Laravel-admin 控制器的 form 方法里怎么获取当前模型实例?

url xxx/admin/users/1/edit
想要获取对应用户的实例

...
use App\Models\User;

class UsersController extends Controller
{
    ...
    protected function form()
    {
        $form = new Form(new User);

        //只能从回调函数里获取当前模型实例吗?
        $form->saved(function (Form $form) {
            $user = $form->model();
        });

        //不在回调函数里时返回的实例是空的
        $user = $form->model();
    }
    ...
}
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 9

老哥找到方法了吗?

5年前 评论

@windtalker 目前是用 $id = isset(request()->route()->parameters()['user']) ? request()->route()->parameters()['user'] : null; 去判断,id 不为 null 则是 users/{user}/edit,为 null 则是 users/create

5年前 评论

你可以在protected function form($id) 加上$id啊

5年前 评论

http://www.******.com/admin/demo/cate/1/edit

同问,protected function form ($id) 加上 $id 无效。有没有别的办法

/**

Make a form builder.

@return Form
*/
protected function form($id=null)
{
$form = new Form(new ConfigWechatKeyword);
$form->display('id', 'ID');

print_r($id);
print_r($form->model()->id);

exit;

return $form;

}

不管怎么样都是空

4年前 评论
running8
//model:Race
 if($form->isEditing()){
    $id=request()->route()->parameters()['race'];
}
//文档提到的 $form->isUpdating(); 已废弃,用$form->isEditing() 。
4年前 评论

还有更好的方法吗?

3年前 评论
running8 3年前

对这个laravel-admin我也是醉了,
我也遇到类似的问题:
想在form方法里获取某个字段的值。比如Article表中有一个字段为type, 值有mp4,pdf 等,需要根据不同的值处理不同的逻辑。

protected function form()
{
$form = new Form(new Article());

最后我是这样写的。
$arr = request()->route()->parameters();
$id = (isset($arr[‘article’])?$arr[‘article’]:0);
if($id){
$info = Article::where(‘id’,$id)->findOrFail($id);
$type = $info[‘type’];
// 这样就拿到type属性了。
}else{
// some code
}

.
.
.
}

谢谢学长的提示,上面是修改好的。

3年前 评论
running8 3年前
phpervip (作者) 3年前
    //不知道你想获取模型的值来做什么,如果是根据字段来加载其它字段,可以参考我这个,联动示倒: 
    $form->select('province_id','选择省')->options(config('arr.chinaarea.province'))->load('city_id', '/admin/chinaarea/apicity');
    $form->select('city_id','选择市')->options(function ($id,$f){
        $pid =$f->data()['province_id'];
        $city_arr = config('arr.chinaarea.city_arr');
        return $city_arr[$pid];
    });
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!