laravel in Grado di preparare la strada per la serializzazione. Utilizza Chiusura

Quando mi cancella cache nel mio Laravel 5.2 progetto, ho visualizzato questo messaggio di errore:

[LogicException]
Non è possibile preparare il percorso [panel] per la serializzazione. Utilizza Chiusura.

Penso che è collegato con un percorso

Route::get('/article/{slug}', '[email protected]');

associato con un particolare metodo nel mio controller:

public function slug($slug) {
    $article = Article::where('slug',$slug)->first();

    $id = $article ->id_article ;

    if ( ($article=== null) || (is_null($id)) ) return view('errors/Db');

    else return view('detail')->with(array('article'=> $article,  'title'=>'My title - '.$article->title)); 
}`

In breve, da un maestro visualizzare I pass $slug, che è un shortlink l’articolo, con $slug , che è unica nel database, ho identificare il record e poi mi passa contenuti nella vista di dettaglio.

Non ho avuto alcun problema quando ho scritto il metodo, infatti, ha funzionato come un fascino, ma dopo che ho pulito la cache, ho questo errore e i collegamenti nel master di vista non mostra shortcode.

Dove ho sbagliato?

  • modifica la tua domanda includere il resto dei percorsi (in particolare il pannello di percorso)
InformationsquelleAutor Francesco | 2017-07-23

 

3 Replies
  1. 46

    Penso che è collegato con un percorso

    Route::get('/article/{slug}', '[email protected]');
    

    associato con un particolare metodo nel mio controller:

    No, thats non. Il messaggio di errore viene dal route:cache comando, non so perché, svuotando la cache chiamate automaticamente.

    Il problema è un percorso che utilizza una Chiusura invece di un controller, che sembra qualcosa di simile a questo:

    //                      Thats the Closure
    //                            v 
    Route::get('/some/route', function() {
        return 'Hello World';
    });
    

    Dal momento che le Chiusure non può essere serializzato, non si può cache rotte quando si hanno vie di utilizzare chiusure.

    • così il comando => php artigianale percorso:cache non funziona su laravel? un bug?
    • Non credo sia un bug, in quanto è esplicitamente detto in Laravel docs laravel.com/docs/5.7/deployment#optimization (controllare la sezione Ottimizzazione del Percorso di Carico)
    • Dal momento che questa funzione utilizza PHP serializzazione, si può solo cache rotte per le applicazioni che uso esclusivo controller di percorsi formativi. PHP non è in grado di serializzare le Chiusure. Quindi, non utilizzare il php artigianale percorso:la cache è la strada giusta! Basta usare il php artigianale cache:clear
    • quindi, qualsiasi sia la soluzione ?
  2. 22

    Se nessuno dei tuoi percorsi contenere le chiusure, ma si sta ancora ricevendo questo errore, si prega di controllare

    routes/api.php

    Laravel aggiunge un default auth api percorso al file di cui sopra (io credo di sì, così quando abbiamo chiamata php artisan make:auth)

    Route::middleware('auth:api')->get('/user', function (Request $request) {
        return $request->user();
    });
    

    che può essere commentato o sostituita con una chiamata al metodo controller, se necessario:

  3. 1

    Questo è sicuramente un bug.Laravel offre predefiniti codice routes/api.php

    Route::middleware('auth:api')->get('/user', function (Request $request) { 
         return $request->user(); 
    });
    

    che è unabled essere trattati da:

    php artisan route:cache
    

    Questo sicuramente dovrebbe essere risolto entro Laravel squadra.(controllare il link),

    semplicemente se si vuole risolvere il problema è necessario sostituire routes\api.php codice con qualche cosa come :

    Route::middleware('auth:api')->get('/user', '[email protected]');
    

    e in UserController mettere questo metodo:

     public function AuthRouteAPI(Request $request){
        return $request->user();
     }
    

Lascia un commento