Ошибка Laravel 5.2 $, не появляющаяся в Blade
Итак, я следую инструкциям по основам Laravel 5, и я зациклен на проверке формы. Я последовал точно с помощью учебника, но получаю переменную Undefined: ошибки в представлении моих статей.
В учебном пособии, за которым я следую, и что я нашел в Интернете, они говорят, что переменная ошибок всегда присутствует в файле клика для использования, поэтому я не знаю, что я делаю неправильно?
Любая помощь будет оценена! любящий Laravel, за исключением этой ошибки!
View
@if($errors->any())
<ul class="alert alert-danger">
@foreach($errors->any() as $error)
<li>{{$error}}</li>
@endforeach
</ul>
@endif
контроллер
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use App\Http\Requests;
use App\Http\Requests\UserRequest as UserRequest;
// use App\Http\Requests\CreateArticleRequest as CreateArticleRequest;
use App\Http\Controllers\Controller;
use Illuminate\View\Middleware\ErrorBinder;
class UserController extends Controller
{
public function create(){
return view('pages.signUp');
}
public function store(UserRequest $request){
User::create($request->all());
return 'the user has been registered!';
return view('user.profile');
}
}
Проверка запроса
<?php
namespace App\Http\Requests;
use App\Http\Requests\Request;
class UserRequest extends Request
{
/**
* 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 [
'name' => 'required',
'email' => 'required|email',
'country' => 'required',
'password' => 'required|min:6',
'confirm_password' => 'required|same:password',
'height' => 'required',
'weight' => 'required',
];
}
}
Ответы
Ответ 1
Это проблема с обновлением 5.2. То, что происходит, является промежуточным программным обеспечением, которое отвечает за то, что переменная errors
доступна для всех ваших просмотров, не используется, поскольку она перемещена из глобального промежуточного программного обеспечения в группу промежуточного программного обеспечения web
.
Есть два способа исправить это:
-
В вашем файле kernel.php
вы можете переместить промежуточное ПО \Illuminate\View\Middleware\ShareErrorsFromSession::class
обратно в свойство protected $middleware
.
-
Вы можете объединить все свои веб-маршруты с группой маршрутов и применить к ним связующее ПО web
.
Route::group(['middleware' => 'web'], function() {
// Place all your web routes here...
});
Ответ 2
решаемые
Вы можете изменить любое из следующих действий:
1. поместите свой рабочий маршрут (app/http/routes.php)
на
Route::group(['middleware' => ['web']], function () {
// Here like
Route::get('/', '[email protected]');
Route::post('/', '[email protected]');
});
Снимок экрана -
![Screendshot 1]()
2. Переместите protected $middlewareGroups web
(app/Http/Kernel.php)
на protected $middleware = []
Снимок экрана -
![screenshot2]()
Ответ 3
Это решение:
Измените защиту групп маршрутов на промежуточное ПО, от:
Route::group(['middleware' => 'web'], function () {
к
Route::group(['middlewareGroups' => 'web'], function () {
Источник: https://github.com/laravel/framework/issues/13000
Ответ 4
просто вам нужно переместить:
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
от protected $middlewareGroups
до protected $middleware
Ответ 5
-
Просто удалите , 'middleware' => 'web'
из Route::group(array('prefix' => 'user', 'middleware' => 'web'), function()
на странице routes.php OR
-
Переместить
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
От protected $middlewareGroups
до protected $middleware
на странице karnel.php
Как пишет Laravel Documentation:
Примечание. Если в вашей копии Laravel есть RouteServiceProvider, который уже включает файл маршрутов по умолчанию в группе промежуточного программного обеспечения Интернета, вы не нужно вручную добавлять группу в файл routes.php.
Поэтому удаление из файла routes.php
будет правильным.
Ответ 6
Проводка, поскольку это может быть полезно для других,
Как сказано в 1-м решении Smartrahat, в вашем файле Kernel.php
(app/Http/Kernel.php
) переместите \Illuminate\View\Middleware\ShareErrorsFromSession::class
от $middlewareGroups
до protected $middleware
, но то же самое начнет выдавать ошибку "Хранилище сеансов не установлено по запросу",
чтобы решить этот ход
\Illuminate\Session\Middleware\StartSession::class,
до $middleware property
.
Ответ 7
Начиная с 5.2, routes.php
по умолчанию уже вызывается в контексте ['middleware'=>'web']
на RouteServiceProvider
. Но в routes.php
по умолчанию генерация auth-маршрутов вызов Route::group
по-прежнему происходит по умолчанию - поэтому, если вы удалите это объявление Route::group
из routes.php
, приложение корректно показывает ошибки.
Ответ 8
Несколько замечаний по этому вопросу. Во-первых, связанная ошибка в github по этой проблеме
PFA
https://github.com/laravel/framework/issues/12022
Если вы посмотрите на последний комментарий, который написал Грэм, я думаю, что это лицо, с которым я столкнулся.
Для меня, несмотря на то, что в формах почтовых данных была ошибка, я получал следующее равенство
boolval(count($errors) === 0) === true
В моем случае я добавил записи журнала в
\Illuminate\Session\Middleware\StartSession::class
вышеуказанный класс промежуточного программного обеспечения выполнялся дважды для данного запроса, я не уверен, почему он работал дважды, но я думаю, из-за этого переменная $errors
получает reset.
Я использовал эту конфигурацию (которая, как мне кажется, по умолчанию была с Laravel @5.2.43)
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
];
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
],
'api' => [
'throttle:60,1',
],
];
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
Я изменил конфигурацию, которая сработала для меня, и число переменных $errors
не равно нулю (также указанное промежуточное ПО выполнялось только один раз за запрос)
protected $middleware = [
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
];
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
],
'api' => [
'throttle:60,1',
],
];
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
Примечание:
Все мои маршруты находятся в группе промежуточного программного обеспечения web
до и после изменения конфигурации Kernel.php, я вообще не перемещал свои маршруты из группы промежуточного программного обеспечения web
.
Ответ 9
Измените @foreach($errors->any() as $error)
на @foreach($errors->all() as $error)
Ответ 10
в этом случае laravel 5.2 вы можете ссылаться на код примера и редактировать файл kernal.php
. переместите этот \Illuminate\View\Middleware\ShareErrorsFromSession::class
, form middlewareGroups
в middleware
и добавьте \Illuminate\Session\Middleware\StartSession::class
, в middleware
то его работа правильна.
Ответ 11
Имея требования к Web и API в нашем приложении, мы не хотели перемещать промежуточное ПО; возможно, это сработало бы:
У нас была очень странная ситуация, когда данные сеанса flash[]
и $errors
были правильно переданы между стандартными методами ресурса laravel, store()
и edit()
, но в некоторых случаях данные не возвращались почти идентичные методы, storeSale()
и editSale()
.
Мы обнаружили, что в наших средах разработки и развертывания драйверы сеанса "файл" и "база данных" работали во всех случаях, но драйвер "cookie" не выполнял.
Переключение на драйвер базы данных во всех случаях устраняет проблему.