拉拉维尔 5.4 表单 请求唯一验证:如何访问 ID?



我有以下表格请求:

<?php
namespace AppHttpRequests;
use AppSociallink;
use IlluminateFoundationHttpFormRequest;
use IlluminateValidationRule;
class SociallinkRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'seq' => 'required|unique:sociallinks,seq,' . $this->id . ',id',
'social_name' => 'required|unique:sociallinks,social_name,' . $this->id . ',id',
'cssclass' => 'required',
'url' => 'nullable|active_url'
];
}

我需要字段seqsocial_name是唯一的。当我尝试编辑时,此代码不起作用。我发现$this->id不存在dd($this).我的网址是:http://prj.test/sociallink/2/edit。这里的许多示例都使用了$this->id但我无法在代码中的任何位置访问该变量,因为它似乎不存在。当我将$this->id替换为本示例中2这样的物理id时,验证工作正常。但动态地,如何使用当前行的id进行唯一验证?

除非您有带有id的表单输入,否则它实际上并不在$request中($this在您的请求代码中)。 您可以通过从控制器返回整个请求来验证这一点:

return request()->all(); 

假设您定义了以下路由:

sociallink/{sociallink}/edit ...

然后在您的请求中,您可以执行以下操作:

public function rules()
{
$sociallink = $this->route('sociallink');
return [
'seq'         => 'required|unique:sociallinks,seq,' . $sociallink . ',id',
'social_name' => 'required|unique:sociallinks,social_name,' . $sociallink . ',id',
'cssclass'    => 'required',
'url'         => 'nullable|active_url'
];
}

表单请求文档中有一个示例:

另请注意上例中对route方法的调用。此方法授予对被调用路由上定义的 URI 参数的访问权限,例如以下示例中的{comment}参数:

Route::post('comment/{comment}');

最新更新