代码之家  ›  专栏  ›  技术社区  ›  Latheesan

如何将实体id传递给Laravel 5.5上表单请求中的唯一验证?

  •  0
  • Latheesan  · 技术社区  · 6 年前

    我定义了以下路线:

    Route::put('/{organisationId}', 'OrganisationController@update');
    

    我有以下几点 FormRequest 对于更新请求:

    <?php
    
    namespace App\Http\Requests\Organisation;
    
    use Illuminate\Foundation\Http\FormRequest;
    
    class UpdateOrganisationRequest extends FormRequest
    {
        public function authorize()
        {
            return true;
        }
    
        public function rules()
        {
            return [
                'required|min:3|max:60|unique:organisations,name,' . $this->get('organisationId')
            ];
        }
    }
    

    我试图在我的控制器中这样使用它:

    public function update($organisationId, UpdateOrganisationRequest $request)
    {
        $organisation = $this->organisationRepository->byId($organisationId);
    
        if (!$organisation) {
            return $this->error('Organisation not found.', $this::Bad_Request);
        }
    
        $this->organisationRepository->update($organisation, $request->validated());
    
        return $this->success(
            fractal($organisation, new OrganisationTransformer())
        );
    }
    

    这似乎会触发唯一验证错误,因为它似乎不会排除我尝试更新的id。

    你知道为什么这样不行吗?


    使用前 FormRequest格式请求 ,这就是我如何实现上述相同功能的方式,并且运行良好:

    https://pastebin.com/raw/CDEg6qLt

    我能够用相同的名称更新相同的组织,并且唯一的验证规则不会触发验证异常。

    1 回复  |  直到 6 年前
        1
  •  1
  •   revo shanwije    6 年前

    中定义的所有规则 FormRequest rules 方法应采用键/值对的形式,分别对应于输入名称及其验证规则。你错过了 key 在这里,验证程序很可能会查找名为 0 那根本不存在。

    添加名称和测试结果:

    return [ 'name' => '....' ];