如何在make:request in laravel

时间:2018-01-26 02:57:57

标签: php laravel laravel-5.5 laravel-validation laravel-request

我正在Laravel 5.5开发一个小型应用程序,我在updateContact创建一个请求并拥有唯一的电子邮件验证规则,同时在控制器中使用相同的验证我可以容易做出:

$contact = Contact::find($request->id);
Validator::make($data, [
    'first_name' => 'required|max:255',
    'email' => 'required', Rule::unique('contacts')->ignore($contact->id),
    'address' => 'max:255',
    'city' => 'max:255',
    'state' => 'max:255',
    'country' => 'max:255',
]);

并且我可以通过php artisan make:request UpdateContact发出请求并在updateContact.php内添加以下内容来验证:

namespace App\Http\Requests;

use App\Contact;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

class UpdateContact 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()
    {
        $contact = Contact::find($request->id);
        return [
            'first_name' => 'required|max:255',
            'email' => 'required', Rule::unique('contacts')->ignore($contact->id),
            'company_id' => 'required',
            'address' => 'max:255',
            'city' => 'max:255',
            'state' => 'max:255',
            'country' => 'max:255',
        ];
    }

    public function messages()
    {
        return [
            'company_id.required' => 'Company name is required'
        ];
    }
}

但我不知道$request->id我该如何使用它?

3 个答案:

答案 0 :(得分:2)

在FormRequest类中, $ this 是请求对象的变量范围。只需执行以下操作即可获取ID属性

$contact = Contact::find($this->id);

同样适用于表单中的任何其他字段。

答案 1 :(得分:1)

为什么您再次在Request对象中找到与id联系的内容?

您只需使用此代码:

 'email' => 'required', Rule::unique('contacts')->ignore($this->id),

您正在使用 ID 查找联系人,然后再使用您在Request对象中已有的 $ contact-> id $这即可。 您只需使用 $ this-> id ,它就会为您提供联系人的ID。没有必要在下面写一行:

 $contact = Contact::find($this->id);

因为

$this->id is same as $contact->id

您还可以使用以下代码验证唯一的电子邮件:

'email' => "required|unique:users,email,$this->id,id" //use double quotation marks

它将与:

相同
'email' => 'required', Rule::unique('contacts')->ignore($this->id),

查看在Request class

中使用的代码段
public function rules()
{
    switch ($this->method()) {
        case 'POST':
        {
            return [
                'name' => 'required',
                'email' => 'required|email|unique:users',
                'password' => 'required'
            ];
        }
        case 'PUT':
        case 'PATCH':
        {
            return [
                'name' => 'required',
                'email' => "required|unique:users,email,$this->id,id"
                 //OR you can use below rule
                // 'email' => Rule::unique('users')->ignore($this->id),
            ];
        }
        default: break;
    }
}

答案 2 :(得分:-1)

要在其中调用类的对象,您可以使用 $ this 变量范围。然后访问属于该对象的任何变量。例如 $ this-> id $ this-> name 等。

如果您想在同一课程中访问静态功能,则可以使用 self 关键字。 例如,你有一个静态函数

public static function add($a, $b){
    return $a+$b;
}

您拨打添加方法,例如 self :: add(2,2);