【问题标题】:Laravel - public layout not needed in every functionLaravel - 每个功能都不需要公共布局
【发布时间】: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 是最好的。更好的选择是仅在需要它的控制器中包含$layout public。或者,如果需要,您可以调用一个 Blade 视图来导入布局。
  • 我认为没有“正确”的方法可以做到这一点...您可以将 $this->layout 设置为新模板,或者如果您不希望取消设置应该没问题为该页面设置一个布局。我可能会创建“公共”或“登录”布局或其他东西,并在需要时将其设置为。即$this->layout = 'public'
  • 太棒了!谢谢你们的cmets伙计们!我将尝试更多地摆弄它,并看看使用刀片模板:)
  • 您是否在尝试分配之前声明了“布局”变量?通常你会添加 public $layout = "my.layout"public $restful = true 变量。

标签: php laravel


【解决方案1】:

您需要在任何不想呈现视图的函数上设置$this->layout = null

【讨论】:

    【解决方案2】:

    如果不需要视图,那么它应该是重定向。你的登录方法还有什么问题?

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

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

    在你的这种方法中,不需要视图,但你仍然应该这样重定向。

    return Redirect::to('wherever');
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-14
      • 1970-01-01
      • 2017-01-21
      • 2014-08-31
      • 2017-12-06
      • 2015-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多