Значения массива сеансов Laravel

Я только начал тестировать Laravel. Я использую форму с некоторыми полями и пытаюсь проверить ввод с помощью встроенного класса валидатора Laravel.

$input = Input::all();
$rules = array(
        'fname' => 'required|max:100',
        'lname' => 'required|max:100',
        'email' => 'required|email',
            );
$validation = Validator::make($input, $rules);
if ($validation->fails()){
            return Redirect::to('inputform')
                            ->with('input_errors', $validation->errors);
            }

Все идет хорошо, и проверка валидации работает. Когда проверка не проходит, я помещаю ошибки в переменную сеанса с именем input_errors и передаю ее в представление. Моя проблема в том, что я не могу отображать ошибки. Я попробовал цикл foreach, используя blade templating engine, как указано ниже:

@foreach (Session::get('input_errors') as $message)
    {{ What Should I put here? }}
@endforeach

Как я могу отобразить ошибки, которые возвращаются в виде массива. Я попытался сослаться на него как $message[0][0], но это не сработало.

Спасибо.

РЕДАКТИРОВАТЬ: извините, забыл упомянуть, что я использую Laravel 3


person rahules    schedule 02.05.2013    source источник


Ответы (1)


Правильный синтаксис для получения ошибок...

$messages= $validation->messages();

Одно это, к сожалению, не будет возвращать вам сообщения. Он вернет экземпляр MessageBag. Это позволяет вам вытащить любые конкретные сообщения, которые вы хотите, или все.

Если вы хотите получать все сообщения, теперь вы можете сделать...

$errors = $messages->all();

Это вернет массив, который вы можете просмотреть в своем представлении для отображения ошибок. Существуют также методы получения ошибок в определенном поле, например...

$firstNameError = $messages->first('fname');

or

$firstNameErrors = $messages->get('fname');

Я также предлагаю при отправке сообщений об ошибках в представление использовать...

->with_errors($validation);

Это выведет ошибки на сеанс и автоматически предположит, что вы отправляете их как переменную $errors. Затем вы можете отобразить ошибки в своем представлении с помощью.

{{ $errors->first('fname') }}  // Blade approach
<?php echo $errors->first('email'); ?> // Non-blade approach

Таким образом, вам не нужно добавлять логику в свои представления, пытаясь определить, существует ли переменная, прежде чем вы попытаетесь повторить ее.

http://four.laravel.com/docs/validation

person user1669496    schedule 02.05.2013
comment
Я получаю сообщение об ошибке при использовании withErrors, говоря, что это неопределенная функция - person rahules; 02.05.2013
comment
@rahules Должен работать. Какой фактический код вы используете сейчас? Ваш Laravel обновлен? - person Jamie Schembri; 02.05.2013
comment
Это сработало. Мне пришлось использовать with_errors вместо withErrors. На самом деле я использую laravel 3.2.14. Случайно использовал laravel-4 в качестве тега. Изменил и обновил пост. - person rahules; 02.05.2013
comment
Хорошо, я изменил ответ, чтобы он соответствовал тому, что сработало для вас, чтобы люди не путались с проблемой змеиного случая против верблюжьего случая в Laravel 3/4. - person user1669496; 02.05.2013
comment
Спасибо. Хотя маленькое сомнение. Является ли точка с запятой после операторов лезвия стандартом? или это просто вопрос предпочтений? - person rahules; 03.05.2013
comment
Ой, хороший улов. Его там не должно быть, но это не похоже на синтаксическую ошибку. Спасибо. - person user1669496; 06.05.2013