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()...

总结一下我的问题:我如何告诉 Laravel 不要包含public $layout在不需要视图的某些功能中?

预先感谢,菲舍尔

4

2 回答 2

2

您需要设置$this->layout = null不想呈现视图的任何功能。

于 2012-10-23T10:53:36.007 回答
2

如果不需要视图,那么它应该是重定向。您的登录方法还发生了什么?

您应该做的是在 GET 登录页面上显示登录表单。此页面发布到您进行验证和身份验证的 POST 登录页面。无论在身份验证级别发生什么,用户都应该被重定向回 GET 请求,在该请求中将显示另一个视图。如果他们失败或他们的控制面板/主页,这将再次成为登录表单。

这是一种称为Post/Redirect/Get的 Web 开发模式,应该在大多数情况下应用。我想不出你会应用它的情况。

在您的这种方法中,不需要视图,但您仍应照此进行重定向。

return Redirect::to('wherever');

请记住,您必须返回重定向,否则 Laravel 会假定您想使用您的布局作为响应。

于 2012-10-25T05:58:03.937 回答