【问题标题】:How to switch between layouts in laravel?如何在 laravel 中的布局之间切换?
【发布时间】:2013-09-08 09:42:09
【问题描述】:

我正在尝试制作一个具有 2 个或更多布局的网站,任何用户都可以更改他/她的布局。
我知道我们可以在这样的控制器中使用布局
公共 $layout = 'layouts.default'; ... 并在方法中 $this->layout->nest('content', $view, $data );

但这对我来说没用,它总是默认的,我的意思是如何动态改变$layout的值?
例如,用户将网站视为默认布局,但用户 b 将其视为黑色布局。

------------已编辑

我将布局存储在用户表中,但问题是如何在控制器中添加条件语句? 存储布局名称的$laravel变量是一个属性,在代码中只能设置一次,不能在任何方法之外添加语句来改变它。

【问题讨论】:

  • 你是如何让用户选择布局的?是一次性更改,还是将永远与他们的用户帐户相关?我建议使用会话变量,或者将其设置为将布局存储在您正在使用的用户表中。一旦你有了这些,只需添加一个条件语句来测试在控制器中使用什么布局。

标签: php laravel laravel-3


【解决方案1】:

您可以在用户登录时设置会话变量,以包含从用户表中检索到的要使用的布局名称。然后您可以使用它为您的用户设置布局或回退到默认布局。

例如:

用户登录时:

Session::put('userlayout', $user->layout);

在控制器中:

  • Laravel 4

    protected $layout = Session::get('userlayout', 'layouts.default');
    
  • Laravel 3

    public $layout = Session::get('userlayout', 'layouts.default');
    

或者如果您使用刀片:

  • Laravel 4

    @extends(Session::get('userlayout', 'layouts.default'))
    
  • Laravel 3

    @layout(Session::get('userlayout', 'layouts.default'))
    

【讨论】:

  • 谢谢,但我使用的是 laravel 3.2,看来你的刀片语法是 laravel 4,你能用 laravel 3 语法写吗?再次感谢。
  • @aliA 我认为对于 laravel 3.2,它应该是:public $layout = Session::get('userlayout', 'layouts.default');@layout(Session::get('userlayout', 'layouts.default'))
  • 那行得通。谢谢。波斯语:dastet dard nakone agha faramarz :)
猜你喜欢
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
相关资源
最近更新 更多