其实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
转载时请以链接形式注明出处
评论