Domanda

Recentemente ho iniziato a lavorare con Laravel.Ottimo quadro finora!Tuttavia ho una domanda.

Sto usando un modello di layout come questo:public $layout = 'layouts.private';

Questo è impostato nel mio Base_Controller:

public function __construct(){

    //Styles
    Asset::add('reset', 'css/reset.css');
    Asset::add('main', 'css/main.css');

    //Scripts
    Asset::add('jQuery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js');

    //Switch layout template according to the users auth credentials.
    if (Auth::check()) {
        $this -> layout = 'layouts.private';
    } else {
        $this -> layout = 'layouts.public';
    }

    parent::__construct();

}

Tuttavia ottengo un'eccezione di errore ora quando provo ad accedere alle funzioni nei miei controller diversi, che non dovrebbero chiamare alcuna vista, ad es.quando un utente sta per effettuare il login:

class Login_Controller extends Base_Controller {

public $restful = true;

public function post_index()
{

    $user = new User();
    $credentials = array('username' => Input::get('email'), 'password' => Input::get('password'));

    if (Auth::attempt($credentials))
    {

    } else {

    }

}

}

L'errore che ottengo, è che non imposta il contenuto delle diverse variabili nel mio layout public pubblico.Ma poiché non è necessaria alcuna vista in questa funzione, come faccio a dire a Laravel di non includere il layout in questa funzione?

La soluzione migliore che io sono venuto una croce (non so se questo è un brutto modo?) è quello di unset($this -> layout); dalla funzione post_index()...

Per riassumere la mia domanda:come faccio a dire a Laravel di non includere public $layout in alcune funzioni, dove non è necessaria una vista?

Grazie in anticipo, Fischer

È stato utile?

Soluzione

È necessario impostare $this->layout = null su qualsiasi funzione non si desidera eseguire il rendering della vista.

Altri suggerimenti

Se una vista non è necessaria, dovrebbe essere un reindirizzamento.Cos'altro sta succedendo in quel tuo metodo di login?

Quello che dovresti fare è mostrare un modulo di accesso nella pagina GET login.Questa pagina viene inviata alla pagina di accesso POST in cui esegui la convalida e l'autenticazione.Indipendentemente da ciò che accade a livello di autenticazione, l'utente dovrebbe quindi essere reindirizzato a una richiesta GET in cui verrà visualizzata un'altra vista.Questo sarà di nuovo il modulo di accesso se non hanno funzionato o il loro pannello di controllo / home page.

Questo è un modello di sviluppo web chiamato Post / Redirect / Get e dovrebbe essere applicato nella maggior parte dei casi.Non riesco a pensare a un caso in cui lo applichi.

In questo tuo metodo, non è necessaria alcuna visualizzazione, ma dovresti comunque reindirizzare come tale.

return Redirect::to('wherever');

Ricorda che devi restituire il redirect o Laravel assumerà che tu voglia usare il tuo layout come risposta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top