【发布时间】:2012-10-25 13:58:03
【问题描述】:
我最近才开始使用 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 不要在这个函数中包含布局?
我自己的最佳解决方案(不知道这是否是一个坏方法?)是从函数post_index() 到unset($this -> layout);...
总结一下我的问题:我如何告诉 Laravel 不要在某些不需要视图的函数中包含 public $layout?
提前致谢, 菲舍尔
【问题讨论】:
-
lavarel 的文档告诉你什么?我们不是她之前的 lavarel 开发人员,所以你可能把你的问题发给了错误的受众?
-
也许
unseting$this->layout是最好的。更好的选择是仅在需要它的控制器中包含$layoutpublic。或者,如果需要,您可以调用一个 Blade 视图来导入布局。 -
我认为没有“正确”的方法可以做到这一点...您可以将
$this->layout设置为新模板,或者如果您不希望取消设置应该没问题为该页面设置一个布局。我可能会创建“公共”或“登录”布局或其他东西,并在需要时将其设置为。即$this->layout = 'public' -
太棒了!谢谢你们的cmets伙计们!我将尝试更多地摆弄它,并看看使用刀片模板:)
-
您是否在尝试分配之前声明了“布局”变量?通常你会添加
public $layout = "my.layout"和public $restful = true变量。