it-swarm.com.de

Laravel 5.2 $ -Fehler treten nicht in Blade auf

Ich folge also dem Laravel 5-Grundlagen-Tutorial und stecke bei der Formularvalidierung fest. Ich habe genau das Tutorial mitverfolgt, bekomme aber eine undefinierte Variable: Fehler in der Ansicht "Artikel erstellen".

In dem Tutorial, das ich folge, und was ich online gefunden habe, sagen sie, dass die Fehlervariable immer in der Blade-Datei vorhanden ist, damit Sie sie verwenden können. Ich weiß nicht, was ich falsch mache.

Jede Hilfe wäre dankbar! liebende Laravel bis auf diesen Fehler!

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

Regler

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

}

Bestätigung anfordern

<?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',
        ];
    }
}
30
Neal Crowley

Dies ist ein aktuelles Problem mit dem 5.2-Upgrade. Was passiert, ist die Middleware, die dafür verantwortlich ist, dass die Variable errors für alle Ihre Ansichten verfügbar ist, da sie nicht von der globalen Middleware in die Gruppe web Middleware verschoben wurde.

Es gibt zwei Möglichkeiten, dies zu beheben: 

  1. In Ihrer kernel.php-Datei können Sie den Middleware \Illuminate\View\Middleware\ShareErrorsFromSession::class zurück in die protected $middleware-Eigenschaft verschieben.

  2. Sie können alle Ihre Webrouten mit einer Routengruppe umschließen und die web-Middleware auf sie anwenden.

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

Gelöst

Sie können eine der folgenden Optionen ändern:

1. lege deinen Arbeitsweg (app/http/routes.php) auf

Route::group(['middleware' => ['web']], function () { // Here like Route::get('/', '[email protected]'); Route::post('/', '[email protected]'); });

Bildschirmfoto - 

 Screendshot 1

2. Verschiebe deinen protected $middlewareGroups web(app/Http/Kernel.php) auf protected $middleware = []

Bildschirmfoto -

 screenshot2

23

Dies ist die Lösung:

Ändern Sie die Definition Ihrer Routengruppen mit einer Middleware, aus:

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

zu

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

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

18
Yuri

einfach musst du umziehen: 

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

von protected $middlewareGroups bis protected $middleware

  1. Entfernen Sie einfach , 'middleware' => 'web' von Route::group(array('prefix' => 'user', 'middleware' => 'web'), function() inroutes.phppage ODER

  2. Bewegung 

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

Von protected $middlewareGroups bis protected $middleware inkernel.phppage 

Wie die Laravel-Dokumentation sagt: 

Hinweis: Wenn Ihre Kopie von Laravel einen RouteServiceProvider hat, der bereits enthält die Standardroutendatei in der Web-Middleware-Gruppe, Sie Sie müssen die Gruppe nicht manuell zu Ihrer Datei routes.php hinzufügen.

Das Entfernen aus routes.php-Datei wäre also der richtige Weg.

6
Atiqur

Seit 5.2 wird routes.php standardmäßig bereits im Kontext eines ['middleware'=>'web'] von RouteServiceProvider aufgerufen. Bei der routes.php-Standardgenerierung von Auth-Routen wird der Route::group-Aufruf jedoch weiterhin standardmäßig ausgeführt. Wenn Sie die Route::group-Deklaration aus routes.php löschen, zeigt die Anwendung dann Fehler richtig an.

5
Dan Dart

Posting dies, da es für andere nützlich sein könnte, 

Wie in der ersten Lösung von Smartrahat erwähnt, verschieben Sie in Ihrer Kernel.php-Datei (app/Http/Kernel.php) \Illuminate\View\Middleware\ShareErrorsFromSession::class_ von $middlewareGroups in die protected $middleware-Eigenschaft, aber es wird der Fehler "Sitzungsspeicher nicht auf Anforderung gesetzt" ausgegeben 

um diese Verschiebung zu beheben, __.\Illuminate\Session\Middleware\StartSession::class, nach $middleware property.

5
Sambhav

Einige Bemerkungen zu diesem Thema. Zunächst einmal ein verwandter Fehler in github bezüglich dieses ProblemsPFA https://github.com/laravel/framework/issues/12022

Wenn Sie sich den letzten Kommentar ansehen, den Graham geschrieben hat, denke ich, ist dies das Gesicht, mit dem ich zu tun hatte ... Für mich, obwohl es einen Fehler in den Form-Post-Daten gab, erhielt ich die folgende Gleichheit

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

In meinem Fall fügte ich Protokollanweisungen im hinzu 

\Illuminate\Session\Middleware\StartSession::class

die obige Middleware-Klasse lief zweimal für eine gegebene Anforderung, ich bin nicht sicher, warum sie zweimal ausgeführt wurde, aber ich denke, aus diesem Grund wird die Variable $errors zurückgesetzt. 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,
];

Ich habe die Konfiguration geändert, die für mich funktioniert hat und die Anzahl der $errors-Variablen ist nicht Null (auch die obige Middleware wurde nur einmal pro Anforderung ausgeführt)

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

Hinweis: Alle meine Routen befinden sich in der Middleware-Gruppe web vor und nach der Konfigurationsänderung Kernel.php. Ich habe meine Routen überhaupt nicht aus der Middleware-Gruppe web verschoben.

4
agent47

Ändern Sie @foreach($errors->any() as $error) in @foreach($errors->all() as $error)

2
smartrahat

in diesem Fall kann laravel 5.2 auf den Beispielcode verweisen und Ihre kernal.php-Datei bearbeiten. Verschieben Sie diesen \Illuminate\View\Middleware\ShareErrorsFromSession::class, form middlewareGroups in middleware und fügen Sie \Illuminate\Session\Middleware\StartSession::class in middleware .__ hinzu.

0
Madhuka Dilhan

Da wir sowohl Web- als auch API-Anforderungen in unserer Anwendung haben, wollten wir die Middleware nicht verschieben. vielleicht hätte das aber funktioniert:

Wir hatten die sehr spezielle Situation, dass die flash[]- und $errors-Sitzungsdaten korrekt zwischen den Standardmethoden der Laravel-Ressource store() und edit() übertragen wurden. In einigen Fällen kamen die Daten jedoch nicht über nahezu identische Methoden storeSale() und editSale() zurück.

In unseren Entwicklungs- und Implementierungsumgebungen stellten wir fest, dass die Sitzungstreiber "Datei" und "Datenbank" in allen Fällen funktionierten, der "Cookie" -Treiber jedoch nicht.

Durch den Wechsel zum Datenbanktreiber in allen Fällen wurde das Problem behoben.

0
JDA3