0

最近、Laravel を使い始めました。これまでのところ素晴らしいフレームワークです!しかし、私は質問があります。

次のようなレイアウト テンプレートを使用しています。 public $layout = 'layouts.private';

これは私の 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();

}

ただし、別のコントローラーの関数にアクセスしようとすると、エラー例外が発生します。これは、ビューを呼び出すべきではありません。つまり、ユーザーがログインしようとしている場合です。

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 {

    }

}

}

私が得るエラーは、パブリック $layout でさまざまな変数の内容を設定していないことです。しかし、この関数にはビューが必要ないため、Laravel にこの関数にレイアウトを含めないようにするにはどうすればよいでしょうか?

私自身がクロスした最善の解決策(これが悪い方法かどうかわかりませんか?)はunset($this -> layout);、関数からpost_index()...

public $layout私の質問を要約すると、ビューが必要ない特定の関数に含めないように Laravel に指示するにはどうすればよいですか?

前もってありがとう、フィッシャー

4

2 に答える 2

2

ビューが必要ない場合は、リダイレクトにする必要があります。あなたのログイン方法で他に何が起こっていますか?

すべきことは、GET ログイン ページにログイン フォームを表示することです。このページは、検証と認証を行う POST ログイン ページに投稿します。認証レベルで何が起こるかに関係なく、ユーザーは別のビューが表示される GET 要求にリダイレクトされる必要があります。これは、失敗した場合のログイン フォーム、またはコントロール パネル/ホームページのいずれかになります。

これは、 Post/Redirect/Getと呼ばれる Web 開発パターンであり、ほとんどの場合に適用する必要があります。あなたがそれを適用するケースは考えられません。

あなたのこの方法では、ビューは必要ありませんが、それでもリダイレクトする必要があります。

return Redirect::to('wherever');

リダイレクトを返す必要があることを忘れないでください。そうしないと、Laravel はレイアウトをレスポンスとして使用すると想定します。

于 2012-10-25T05:58:03.937 に答える
2

$this->layout = nullビューをレンダリングしたくない関数を設定する必要があります。

于 2012-10-23T10:53:36.007 に答える