【问题标题】:How to load CSS and JS from theme directory in Laravel 4如何从 Laravel 4 中的主题目录加载 CSS 和 JS
【发布时间】:2014-07-23 01:58:12
【问题描述】:

如果有人可以帮助我,我会非常高兴! 我是 Laravel 的初学者,并开始构建一个我将在其中使用主题的应用程序。 我想将我的 CSS 文件存储在“/path-to-theme/img/”文件夹中。 我发现了一些关于 CSS 加载的示例,但这不是我需要的。

这是我发现的:

<link rel="stylesheet" href="{{ URL::asset('assets/css/bootstrap.min.css') }}">

查看this link 了解更多信息。 我应该怎么做才能从“/path-to-theme/img/”而不是“/public”文件夹加载 CSS。

请帮帮我!非常感谢!

【问题讨论】:

  • 您所指的帖子中的主题是 HTML 模板。 CSS 文件必须位于 public 文件夹中

标签: laravel laravel-4


【解决方案1】:

所有资产必须位于public 目录中。在该目录中,您可以使用您可能想要使用的任何文件夹结构,例如。 public/path-to-theme/etc.

可能还有其他解决方案(未测试),但有点混乱

您可以创建一个AssetsController 并在该控制器中根据模板设置加载文件。我不确定您的具体情况如何,但我可以想象以下情况。用户对主题有偏好(存储在数据库的用户表中)。在app.php 中,您可以创建一个template 配置变量。如果未设置特定主题(例如由用户设置或基于输入字段或获取参数(或其他)),则此变量的值是将使用的默认主题。

array(
   'theme' => 'default',
),

在 AssetsController 中,您冷创建一个 getCss 操作并加载与您需要的 css 对应的主题:

public function getCss() {

    $theme = Config::get('app.theme');
    return file_get_contents($theme.'/stylesheet.css');
}

routes.php 中创建以下路由

Route::get('stylesheet.css', array('uses' => 'AssetsController@getCss'));

要在视图文件中加载 css,请添加以下内容:

<link rel="stylesheet" href="{{ URL::action('AssetsController@getCss') }}">

这适用于默认主题。如果您想加载用户特定的主题首选项,您可以在过滤器 (filters.php) 中执行此操作,例如在 auth 过滤器或 filters.php 中的自定义过滤器中(您应该将该过滤器名称附加到原始路由您要显示的页面)。

Route::filter('auth', function()
{
    Config::set('app.theme', Auth::user()->theme);
});

这仅在用户登录时有效。但在不同的过滤器中,您可以检查是否设置了不同的参数(例如 get、post 或 session 变量)。

希望这可能会有所帮助。

【讨论】:

  • Ok MThomas,我创建了一个名为 CssController 的控制器,其中我有一个方法 loadCss(),我创建了一个路由 Route::get('style.css', 'CssController@loadCss'); - 当我访问 css 文件 lux-apps/style.css 时一切正常。但是......还有另一个问题 - 我想像这里一样访问我的 css 文件:lux_apps.ru/css/style.css,我创建了一个路由 Route::get('css/style.css', 'CssController@loadCss');它不起作用!!! :( 为什么会这样?你能帮帮我吗?
  • 首先,我的意思是使用控制器的解决方案有点混乱,正确的方法是将文件存储在 public/theme/css 中。所有其他路由是否正常运行,听起来您的 Apache mod 重写配置不正确或您使用了错误的 htaccess 文件。
【解决方案2】:

如果你已经切换到 Laravel 5,你可以试试我的包,它的功能如下:

  • 主题文件夹中的视图和资产分离
  • 主题继承:扩展任何主题并创建主题层次结构

在这里试试:igaster/laravel-theme

【讨论】:

    【解决方案3】:

    资产必须发布到public 文件夹。您可以使用 command prompt/terminal 中的类似内容发布资产:

    php artisan asset:publish
    
    php artisan asset:publish vendor/package
    
    php artisan asset:publish --path="vendor/package"
    

    使用合适的。 Check the documentation Laravel 网站和另一个 related question

    【讨论】:

      猜你喜欢
      • 2013-09-28
      • 2021-01-06
      • 2017-11-28
      • 1970-01-01
      • 2021-04-09
      • 2015-01-09
      • 2014-06-14
      • 1970-01-01
      相关资源
      最近更新 更多