Laravel更新请求验证如何获取ID

5

我正在使用 Laravel 5.2,成功为用户更新请求设置了正确的内容。但是当我尝试对另一个表(clusters)进行相同的操作时,无法在 clusterrequest 验证中获取 id。

以下是我的 clusters 相关的内容:

路由:

Route::post('clusterFormUpdate/{id}', ['uses'=>'ClusterController@postFormUpdate','middleware' => ['permission:user-edit']]);

控制器:

public function postFormUpdate(ClusterUpdateRequest $request, $id)
{
    $inputs = $request->all();

ClusterUpdateRequest:

...
public function rules()
{

    $id = $this->id;
    dd($id);

    return [
        'name'      => 'required|max:255|unique:clusters,name,' . $id . ',id',
        'countries' => 'required',
    ];
}

当我运行这个时,我得到了null。
如果我尝试对我的用户表执行相同操作,则可以正确打印出id,所以我想知道我可以在哪里查找此问题?
谢谢。

这真的很奇怪,现在通过在路由中将其更改为id,它可以工作...奇怪的是,我对所有路由和控制器都使用完全相同的模型,而对于其他模型,它正常工作... - Richard
2
现在它能够正常工作的原因是因为基础请求类中神奇的__get()方法。如果在请求中找不到值,它会假定您正在尝试从路由中获取该值。如果您在QueryStringPOST请求中拥有id,这将不起作用,因此最好明确使用(使用param()方法)。 - Rwd
2个回答

20

要获取Request中的id,您可以使用route()方法:

public function rules()
{
    $id = $this->route('n'); //or whatever it is named in the route
    
    return [ 
        'name'      => 'required|max:255|unique:clusters,name,' . $id . ',id',
        'countries' => 'required',
    ];
}

如果可以的话,我会再次升级它 :) - jeremykenedy
1
我正在使用 Route::resource,通过 $this->route('customer')->id 获取了 id - Christhofer Natalius
使用资源,您还可以使用 Request::route('{model}') - Khaled Lela

0
  1. 在终端中运行 'php artisan route:list'
  2. 查看列表项PUT/PATCH方法以查看路由/ URL中的参数,例如:user/{user}
  3. $id = $this->$user (其中$user是您路由中的{user})
  4. 编写规则 'name' => 'unique:users,name,' .$id,

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接