Ignorare la sezione in laravel lama modello lancio di variabile non definita errori

Sto usando Laravel 4 e lama dei modelli e l’esecuzione in un problema quando provo ad estendere un modello.

Nel mio layout ho

@yield('content')

e nella mia pagina ho

@section('content')
    Welcome {{ $name }}
@stop

che funziona bene, ho creato un’altra pagina molto simile a quella di prima, e la voglia di cambiare sovrascrivere il contenuto di amministrazione della sezione. Le altre sezioni del modello sono belle.

quindi estendo la mia pagina, e fare

@section('content')
    Hello!
@stop

Ho un vago notare con la variabile $name.

Ho provato

@section('content')
    Hello!
@overwrite

e stesso affare, mi arriva l’avviso di errore.
Ho controllato il mio controller utilizzando il modello corretto. Non la chiamo @genitore quindi non capisco, come è possibile sovrascrivere una sezione in un modello con avviso di errori?

InformationsquelleAutor Wizzard | 2013-10-15

 

4 Replies
  1. 9

    Lama layout di lavorare la loro strada in cima all’albero, al percorso o master di vista prima del rendering di alcuni bambini. Così, nidificati viste che si estendono gli altri devono sempre avere un genitore reso prima. Come risultato, viste padre che contengono sezioni sarà sempre eseguito il rendering prima del bambino.

    Per superare il problema, è una buona idea sempre e solo nido pagine che non sovrascrivere i genitori sezioni che contengono le variabili, come i genitori, i contenuti saranno sempre resi prima che il bambino.

    Come il precedente, ideale non può essere sempre rispettata o dei genitori del contenuto della sezione è una buona alternativa metodo potrebbe essere quello di utilizzare la visualizzazione compositori. Vista compositori danno l’opportunità di dichiarare le variabili per ogni visualizzazione ogni volta che viene eseguito il rendering.

    View::composer(array('pages.admin'), function($view)
    {
        $view->with('name', Auth::user()->username);
    });

    Un’altra alternativa sarebbe quella di utilizzare una visualizzazione creatore. I creatori sono sparato il momento di una vista creata un’istanza piuttosto che rendering. Questo metodo consente di sovrascrivere la variabile se si desidera prima vista viene eseguito il rendering.

    View::creator(array('pages.admin'), function($view)
    {
        $view->with('name', Auth::user()->username);
    });

    Si può leggere di più su questi metodi nella documentazione qui. (O qui per il Laravel 5 documentazione.)

    • Grazie, vista compositore è uno strumento molto utile.
  2. 1

    Io non sono sicuro se questo è un bug o è intenzionale, ma sembra che Laravel rende le variabili prima di interpretare lama istruzioni.
    La soluzione potrebbe essere questa:

    views/layouts/testlayout.blade.php:

        <html>
        <body>
            @yield('sidebar', 'This is the master sidebar. {{ $name }}' )
    
            <div class="container">
                @yield('content')
            </div>
        </body>
       </html>

    visualizzazione effettiva: views/test.blade.php

    @extends('layouts.testlayout')
    
    
    @section('sidebar')
       No variable in the child
    @stop
    
    @section('content')
        This is a child content
    @stop

    Questo impedisce la variabile $name per ottenere il rendering se c’è una sezione con quel nome nella vista attuale. Sembra che questo è l’approccio che se il contenuto del file di layout contiene una variabile

    • È del tutto intenzionale. Lama layout deve sempre eseguire il rendering di un genitore prima di un bambino o di eredità non sarebbe possibile.
  3. 1

    Non posso garantire il supporto per Laravel 4, ma per chi cerca una soluzione che funziona in Laravel 5.5 (e probabilmente un po ‘ più indietro – difficile) è quello di definire le variabili di cui hai bisogno quando @extending.

    E. g. nell’esempio in questione:

    @extend('my.parent.view', ['name' => ''])

    Questo approccio può essere particolarmente utile se i dati necessari è disponibile per il bambino, ma con un nome diverso.

    E. g. se un genitore-visualizza bisogno di un $parent variabile, ma il bambino vista ha solo un $child variabile che ha una proprietà che fa riferimento il genitore, si potrebbe fare:

    @extend('my.parent.view', ['parent' => $child->parent])
  4. -4

    Ho trovato una soluzione semplice per questo problema 🙂

    Semplicemente aggiungere il @ simbolo prima la variabile/metodo si chiama il padre di vista. Se c’è un errore (errore di notifica/avviso) di PHP può ignorarlo e continuare l’esecuzione.

    Non è perfetto, ma ci salva a vista codice/compositori.

    Spero che questo aiuto!

Lascia un commento