plantillas for example error descargar content ciclo php laravel laravel-5.2

php - for - Laravel 5.2 $ errores no aparecen en Blade



laravel exception (11)

Así que sigo el tutorial básico de Laravel 5 y estoy atascado en la validación de formularios. He seguido exactamente con el tutorial, pero obtengo una variable Indefinida: errores en mi vista de creación de artículos.

En el tutorial que estoy siguiendo y lo que he encontrado en línea dicen que la variable de errores siempre está ahí en el archivo Blade para que la use, así que no sé qué estoy haciendo mal.

¡Cualquier ayuda sería apreciada! amando a Laravel excepto por este error!

View @if($errors->any()) <ul class="alert alert-danger"> @foreach($errors->any() as $error) <li>{{$error}}</li> @endforeach </ul> @endif

Controlador

<?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''); } }

Validar solicitud

<?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. Simplemente elimine , ''middleware'' => ''web'' de Route::group(array(''prefix'' => ''user'', ''middleware'' => ''web''), function() en la página routes.php O

  2. Movimiento

    /Illuminate/Session/Middleware/StartSession::class, /Illuminate/View/Middleware/ShareErrorsFromSession::class,

Desde protected $middlewareGroups a protected $middleware en la página kernel.php

Como dice la documentación de Laravel:

Nota: Si su copia de Laravel tiene un RouteServiceProvider que ya incluye el archivo de rutas predeterminado dentro del grupo de middleware web, no necesita agregar manualmente el grupo a su archivo routes.php.

Entonces, eliminar del archivo routes.php sería la forma correcta.


A partir de 5.2, routes.php es llamado por defecto en el contexto de un [''middleware''=>''web''] por RouteServiceProvider . Pero en la generación predeterminada de routes.php de rutas de autenticación, la llamada de Route::group todavía está sucediendo de manera predeterminada, por lo que si elimina esa declaración de Route::group de routes.php la aplicación muestra correctamente los errores.


Cambie @foreach($errors->any() as $error) a @foreach($errors->all() as $error)


Esta es la solución:

Cambie la definición de sus grupos de ruta con un middleware , de :

Route::group([''middleware'' => ''web''], function () {

a

Route::group([''middlewareGroups'' => ''web''], function () {

Fuente: https://github.com/laravel/framework/issues/13000


Este es un problema importante con la actualización 5.2. Lo que sucede es que el middleware que es responsable de hacer que la variable de errors esté disponible para todas sus vistas no se está utilizando porque se movió del middleware global al grupo de middleware web .

Hay dos formas de solucionar esto:

  1. En su archivo kernel.php , puede mover el middleware /Illuminate/View/Middleware/ShareErrorsFromSession::class nuevo a la propiedad protected $middleware .

  2. Puede envolver todas sus rutas web con un grupo de rutas y aplicarles el middleware web .

    Route::group([''middleware'' => ''web''], function() { // Place all your web routes here... });


Publicar esto como podría ser útil para otros,

Como Smartrahat mencionó en la 1ra solución, en su archivo Kernel.php ( app/Http/Kernel.php ) mueva /Illuminate/View/Middleware/ShareErrorsFromSession::class de $middlewareGroups a la propiedad protected $middleware , pero lo mismo comenzará a arrojar el error "Almacén de sesión no establecido a petición",

para resolver este movimiento /Illuminate/Session/Middleware/StartSession::class, a la $middleware property también.


Teniendo requisitos web y API en nuestra aplicación, no queríamos mover el middleware; quizás eso hubiera funcionado, sin embargo:

Tuvimos la situación muy peculiar de que los datos de la sesión flash[] y $errors se transmitieron correctamente entre los métodos estándar de recursos laravel, store() y edit() , pero en algunos casos los datos no volvieron a través de métodos casi idénticos, storeSale() y editSale() .

Descubrimos que en nuestros entornos de desarrollo e implementación, los controladores de sesión ''archivo'' y ''base de datos'' funcionaban en todos los casos, pero el controlador ''cookie'' no.

Cambiar al controlador de la base de datos en todas las instancias resolvió el problema.


Un par de observaciones sobre este tema. Primero, hay un error relacionado en github con respecto a este problema PFA github.com/laravel/framework/issues/12022

Si miras el último comentario que escribió Graham, creo que esa es la cara que estaba enfrentando. Para mí, aunque hubo un error en los datos de publicación de formularios, estaba obteniendo la siguiente igualdad

boolval(count($errors) === 0) === true

En mi caso, agregué declaraciones de registro en el

/Illuminate/Session/Middleware/StartSession::class

la clase de middleware anterior se ejecutó dos veces para una solicitud determinada, no estoy seguro de por qué se ejecutó dos veces, pero creo que debido a esto, la variable $errors se está restableciendo. Estaba usando esta configuración (que creo que vino por defecto con [email protected])

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, ];

Cambié la configuración que funcionó para mí y el recuento de la variable $errors no es cero (también el middleware anterior se ejecutó solo una vez por solicitud)

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, ];

Nota: Todas mis rutas están en el grupo de middleware web antes y después del cambio de configuración de Kernel.php, no moví mis rutas del grupo de middleware web .


en este caso, laravel 5.2 puede consultar un código de ejemplo y editar su archivo kernal.php . mueva esto /Illuminate/View/Middleware/ShareErrorsFromSession::class , forme middlewareGroups a middleware y agregue /Illuminate/Session/Middleware/StartSession::class , a middleware entonces funciona correctamente.


simplemente tienes que moverte:

/Illuminate/Session/Middleware/StartSession::class, /Illuminate/View/Middleware/ShareErrorsFromSession::class,

desde protected $middlewareGroups protected $middleware


Resuelto

Puede cambiar cualquiera de los siguientes:

1. ponga su ruta de trabajo (app/http/routes.php) en

Route::group([''middleware'' => [''web'']], function () { // Here like Route::get(''/'', ''TodoController@index''); Route::post(''/'', ''TodoController@store''); });

Captura de pantalla -

2. Mueva su protected $middlewareGroups web (app/Http/Kernel.php) en protected $middleware = []

Captura de pantalla -