Laravel-5.5:为什么我的验证器代码不起作用?

时间:2018-01-09 08:17:07

标签: php laravel laravel-5.5

我有检查发件人电子邮件的简单功能。

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;

protected function validator(array $data)
{
    return Validator::make($data, [
        'recipient' => 'required|email|exists:users,email',
        'sender' => [
            'required',
            Rule::exists('users')->where(function ($query) {
                $query->where('email', Auth::user()->email);
            }),
        ],
    ], $this->validator_messages());
}

为什么不使用此代码?我只需要使用auth用户电子邮件检查发件人电子邮件。

2 个答案:

答案 0 :(得分:2)

您不需要在DB中进行查询,因为auth()->user()对象已经加载。因此,您可以使用In规则:

'sender' => [
        'required',
        Rule::in([auth()->user()->email]),
    ],
],

答案 1 :(得分:0)

我认为你必须为验证创建一个规则类,例如:

php artisan make:rule TestUserRule

在这个类中实现2方法:传递($ attribute,$ value)和消息方法。

例如:

public function passes($attribute,$value){

      //write your conditions here you must return boolean value here
      return User::where('email',Auth::user()->email)->count();
}

或者您可以使用laravel默认存在验证规则