【问题标题】:Passing Stylesheet to View from Controller将样式表从控制器传递给视图
【发布时间】:2013-11-14 22:23:25
【问题描述】:

是否可以将样式表从控制器传递给视图?

我有一个master.layout 文件。此主布局用于网站上的每个页面。在网站上,用户可以更改其用户配置文件的颜色和属性,因此在配置文件页面上,我需要传入自定义用户样式表或自定义样式规则。

我找到的唯一解决方案是在视图中包含 if 语句,如果该页面是个人资料页面,则检查是否定义了 $style,如果是则包含它。但这种方法似乎很笨拙。

是否可以从控制器本身定义布局并传入脚本或样式规则?

编辑:

样式规则存储在数据库中的列中,例如profile.background_colorprofile.heading_color。然后控制器将它们构造成样式表并缓存它,或者将样式直接包含在配置文件视图上的<style> 标记中。我还没有决定采用哪种方法,但两种方法都可以。

【问题讨论】:

  • 这取决于您存储 css 的方式。在某些情况下,调整客户端就可以了。或者您可以将样式表作为参数传递给视图。您需要提供更多信息。
  • @itachi 更新了问题以包含所要求的详细信息。
  • 如果我是你,我会把所有的逻辑从控制器和视图中拿出来,放在一个门面。外观将在数据库中搜索自定义样式规则。如果找到,抓住它,否则通过默认规则。然后在外观中使用另一个方法来输出它。它将保持代码干净,不会在视图或控制器中混乱。
  • 我没听说过 Facade,得研究一下。

标签: php laravel blade


【解决方案1】:

关于 Facade 的建议很奇怪。这对你没有帮助。

你会想做一些事情。

您可以在页面控制器中添加:

$layout->with('extra_stylesheets', ['pages/someslug.css']);

那么.css 文件应该被处理为 PHP 使用一点 mod_rewrite 和 htaccess 乐趣所以它可以被大量缓存(为此使用更多 .htaccess,Google 会提供帮助)。

布局是唯一需要检查额外样式表的位置,并且您的页面视图中的逻辑少一些,并且您的输出 HTML 没有一堆讨厌的<style> 标签。

【讨论】:

    【解决方案2】:

    master.layout 中,确保您有@section('userStyle')...@stop 或类似名称。

    在您的控制器中,设置属性protected $layout = 'master.layout';

    按照您当前的做法构建 css 并将其存储在 php 变量 $css 中。

    然后您可以使用 $this->layout->userStyle = $css 将 css 加载到您的布局中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      • 2017-08-08
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多