题
我最近刚刚开始使用 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
在某些功能中,哪些地方不需要视图?
提前感谢Fischer
解决方案
你需要设置 $this->layout = null
在任何您不想渲染视图的函数上。
其他提示
如果不需要视图,那么它应该是重定向。您的登录方法中还发生了什么?
您应该做的是在 GET 登录页面上显示登录表单。此页面会发送到 POST 登录页面,您可以在其中进行验证和身份验证。无论身份验证级别发生什么,用户都应该重定向回 GET 请求,其中将显示另一个视图。如果失败,这将再次成为登录表单或控制面板/主页。
这是一种称为 Web 开发模式 发布/重定向/获取 并且应该在大多数情况下应用。我想不出你会应用它的情况。
在你的这个方法中,不需要视图,但你仍然应该这样重定向。
return Redirect::to('wherever');
请记住,您必须 返回 重定向或 Laravel 会假设您想使用布局作为响应。
不隶属于 StackOverflow