我刚刚开始与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 {
}
}
}
我得到的错误是,我没有在我的公共$布局中设置不同变量的内容。但由于此函数不需要查看,如何告诉Laravel不要在此函数中包含布局?
我自己最好的解决方案(不知道这是不是很糟糕?)是unset($this -> layout);
来自函数post_index()
......
总结一下我的问题:我如何告诉Laravel不要在某些不需要视图的函数中包含public $layout
?
提前致谢, 费
答案 0 :(得分:2)
您需要在任何不想渲染视图的函数上设置$this->layout = null
。
答案 1 :(得分:2)
如果不需要视图,那么它应该是重定向。你的登录方法还有什么进展?
您应该做的是在GET登录页面上显示登录表单。此页面发布到POST登录页面,您可以在其中进行验证和身份验证。无论在身份验证级别发生什么,用户都应该重定向回GET请求,其中将显示另一个视图。如果失败或者他们的控制面板/主页,这将是再次登录表单。
这是一个名为Post/Redirect/Get的Web开发模式,应该在大多数情况下应用。我想不出你会应用它的情况。
在你的这种方法中,不需要查看,但你仍然应该重定向。
return Redirect::to('wherever');
请记住,您必须返回重定向,否则Laravel会假设您要将布局用作回复。