Laravel 访问器和修改器的使用


其实Laravel的访问器和修饰器 有点类似于PHP内置的魔术方法get和set。
不多说 直接贴出个实例
访问器
首先在Model中定义getFirstNameAttribute方法

<?php

namespace App\Models\User;

use Illuminate\Database\Eloquent\Model;

class User extends Model{
{
    public function getFirstNameAttribute($value)
    {
        return ucfirst($value);
    }
}

然后我们在控制器中就可以这样去使用

$user = App\User::find(1);
$firstName = $user->first_name;

我一般也会把后台管理记录的动作也放到控制器中


namespace App\Models\User;

use Illuminate\Database\Eloquent\Model;

class User extends Model{
{
    //修改
        public function getEditButtonAttribute()
    {
        return '<a href="'.route('admin.user.edit',$this).'" class="btn btn-xs btn-primary"><i class="fa fa-pencil" data-toggle="tooltip" data-placement="top" title="编辑"></i></a> ';
    }
        //删除
        public function getDeleteButtonAttribute()
    {
        if ($this->id != access()->id()) {
            return '<a href="javascript:void(0);" onclick="_delete($(this))" name="delete" class="btn btn-xs btn-danger" ><i class="fa fa-trash" data-toggle="tooltip" data-placement="top" title="删除"></i>
                <form action="'.route('admin.user.destroy',$this).'" method="POST" name="" style="display:none">
                    <input name="_method" value="delete" type="hidden">
                    <input name="_token" value="'.csrf_token().'" type="hidden">
                </form>
            </a> ';
        }

        return '';
    }
        //返回修改删除的连接
        public function getActionButtonsAttribute(){
            return
            $this->getEditButtonAttribute() .
            $this->getDeleteButtonAttribute() ;
        }
}

然后我们在Blade模板中foreach遍历出来的时候
使用{{$user->ActionButtons}}就可以显示出修改删除的操作连接了。
修改器
修改器的使用方法和访问器一样

<?php

namespace App\Models\User;

use Illuminate\Database\Eloquent\Model;

class User extends Model{
{
    public function setFirstNameAttribute($value)
    {
        $this->attributes['first_name'] = strtolower($value);
    }
}

调用方法

$user = App\User::find(1);
$user->first_name = 'XiaoMing';

本文地址:https://www.blear.cn/article/Laravel-Accessors-and-Mutators

转载时请以链接形式注明出处

评论