Проверка Laravel требуется, если пользователь вошел в систему

Допустим, у меня есть пользовательский запрос под названием CreateReviewRequest.

В этом запросе у меня есть этот метод:

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules()
{
    return [
        'name'      => 'required_if(auth->logged)',
        'comments'  => 'required|max:255',
        'stars'     => 'required|min:1|max:5',
    ];
}

Как видно по ключу name, я хочу, чтобы от клиента требовалось заполнять поле name, если он не залогинился.

Итак, мой вопрос: как я могу точно потребовать, чтобы мой клиент заполнил name, когда он гость?


person Eliya Cohen    schedule 26.01.2017    source источник


Ответы (3)


Вы можете использовать метод check():

public function rules()
{
    return [
        'name'      => auth()->check() ? 'required' : '',
        'comments'  => 'required|max:255',
        'stars'     => 'required|min:1|max:5',
    ];
}
person Alexey Mezenin    schedule 26.01.2017
comment
Ну, это ответ, который я искал. Спасибо! - person Eliya Cohen; 26.01.2017

Вы не можете сделать простую проверку?

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules()
{
    if (auth()->check()) {
        return [
            'comments'  => 'required|max:255',
            'stars'     => 'required|min:1|max:5',
        ];
    }

    return [
        'name'      => 'required',
        'comments'  => 'required|max:255',
        'stars'     => 'required|min:1|max:5',
    ];
}
person Hammerbot    schedule 26.01.2017
comment
Или прикрепите маршрут промежуточного программного обеспечения аутентификации к методу контроллера. - person DevK; 26.01.2017
comment
Присоединение промежуточного программного обеспечения аутентификации не позволит гостю получить доступ к маршруту, я ошибаюсь? - person Hammerbot; 26.01.2017
comment
Ты прав. Это не решит проблему ОП. Я неправильно понял сначала. - person DevK; 26.01.2017
comment
@El_Matella Я могу достичь этой цели с меньшим количеством строк, объявив $rules var. Я просто надеялся, что для этого есть специальная проверка роли. - person Eliya Cohen; 26.01.2017
comment
Более элегантным решением будет создание переменной для хранения массива, например: $rules = []; if (auth()->check()) $rules['name'] = 'required'; return $rules; - person HTMHell; 26.01.2017

Только для участников:

$validator = Validator::make($request->all(), [

     'email' => auth()->check() ? '' : 'required|min:5|max:60|email',

]);

Только для гостей:

$validator = Validator::make($request->all(), [

     'user_id' => auth()->check() ? 'required|integer|min:1' : '',

]);

Оба:

$validator = Validator::make($request->all(), [

     'message' => 'required|min:10|max:1000'

]);

Комбинированный:

$validator = Validator::make($request->all(), [

     'email' => auth()->check() ? '' : 'required|min:5|max:60|email',
     'user_id' => auth()->check() ? 'required|integer|min:1' : '',
     'message' => 'required|min:10|max:1000'

]);
person Darren Murphy    schedule 11.10.2017