【问题标题】:Putting /assets folder into /application in CodeIgniter将 /assets 文件夹放入 CodeIgniter 中的 /application
【发布时间】:2013-01-02 09:52:41
【问题描述】:

我开始研究CodeIgniter,在深入研究之前,我正在考虑和分析一些场景。

其中一个是关于assets(css/js/img)文件夹:google一下,主要趋势是将assets文件夹放在根目录下,与/system和/application处于同一级别;考虑到我可以拥有多个应用程序(如此处所述:http://ellislab.com/codeigniter/user-guide/general/managing_apps.html),每个应用程序都有自己的资产文件夹,对我来说最合乎逻辑的解决方案是将 /assets 文件夹放入 /application 文件夹 - 这似乎也是更“便携”

好的,现在的问题是:如何将资产文件引用到我的视图中?如果 /assets 文件夹在根目录中,我会阅读我可以参考的内容,即。 .css 文件如下:<?=base_url()?>/assets/css/style.css 但是如果 /assets 文件夹在 /application 中,因为我不能使用 <?=base_url()?>/application/assets/css/style.css 怎么办?

提前致谢!

@Brendan:嗨,Brendan,感谢您的评论;我将从拥有多个应用程序(/application1、/application2 等)的问题开始更好地解释“可移植性”,这是我回答的起点;如果我只有一个应用程序也没问题,但我'我正在预想拥有不止一个的场景)

将 /assets 文件夹与 index.php 置于同一级别意味着我最终可能会拥有许多子文件夹,就像我的应用程序一样,例如 /assets/application1、/assets/application2 等。

如果我必须将 applicationX 文件夹移动到其他计算机,我应该记得移动相应的 /assets/applicationX 文件夹;如果我曾经将 /applicationX 重命名为 /newnameX,我应该记得将 /assets/applicationX 也重命名为 /assets/newnameX,以免弄得一团糟

拥有 /assets INTO /application 让我摆脱了所有这些问题,这是我的想法;助手的想法很好,正如我刚刚找到的这篇文章所说,这似乎完全解决了我要问的问题:http://heybigname.com/2009/11/23/managing-assets-with-codeigniter/

【问题讨论】:

标签: codeigniter codeigniter-2 assets


【解决方案1】:

定义“便携”。

如果您的 CodeIgniter 应用程序设置正确——即:

  • systemapplication web 根目录下的文件夹
  • $config['base_url'] 是正确的(包括协议在内的完整域,即http://www.example.com

那么您应该将您的assets 文件夹与前端控制器 (index.php) 放在同一目录中。这种配置不比在application 文件夹中包含assets 更“便携”(我认为它更便携)。如果您的应用程序目录位于 Web 根目录之下(确实应该如此),那么如果没有“代理”脚本为您加载文件,您将无法从该文件夹加载资产。充其量这将意味着更多的 php 负载,在最坏的情况下(在实施不佳的情况下)存在安全风险。

简而言之:assets 确实不属于application。然而,PHP/CI 的美妙之处在于,如果您愿意,您仍然可以这样做(但 application 必须位于 Web 根目录之上)。

此外,您可以将文件路径传递给base_url() 函数,如下所示:

<?php echo base_url('assets/css/style.css'); // output: http://www.example.com/assets/css/style.css ?>

【讨论】:

    【解决方案2】:

    我知道这是一个老问题,但我前段时间写了一篇文章,针对这个问题提出了一些观点。我喜欢 Ruby on Rails 布置 Assets 文件夹的方式,并且我创建了一个模仿此的设置。

    在这里查看我的博客:http://www.stefandunn.co.uk/blog/custom-codeigniter-helpers-stolen-from-ruby-on-rails/

    这是我说的最后一点。

    有了这个,你可以使用简单的 php 代码来引用你的资产文件:

    javascript_tag('main.js');
    image_tag('logo.png', array('class'=>'logo', 'id'=> 'logo'));
    stylesheet_tag('main.css');
    

    【讨论】:

      【解决方案3】:

      codeigniter 中设置资产的最佳实践如下:

      • 应用
      • 资产
      • 系统

      但你想要:

      • 应用程序 > 资产 > css > style.css
      • 系统

      但是如果您想将 assets 文件夹保留在应用程序中,那么您必须执行一些额外的功能,如下所示: 首先,确保您已在控制器中加载了 URL 帮助程序:

      $this->load->helper("url");
      

      您必须首先使用以下代码在“application/helpers”目录中创建一个名为“my_helper.php”的助手:

      if ( ! function_exists('asset_url()'))
      {
        function asset_url() {
      
          return base_url().'application/assets/';
      
        }
      }
      

      现在,您必须将这个助手加载到您的控制器中,如下所示:

      $this->load->helper("my_helper");
      

      现在将 'application/'' 目录中的 .htaccess 代码替换为以下代码:

      RewriteEngine on
      RewriteCond $1 !^(index\.php|images|assets|robots\.txt)
      RewriteRule ^(.*)$ /index.php/$1 [L]
      

      完成上述所有功能后,您必须在视图中声明您的资产,如下所示:

      <link rel="stylesheet" href="<?php echo asset_url(); ?>css/style.css">
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-13
        • 2016-05-24
        • 2015-03-26
        • 2013-07-15
        • 1970-01-01
        • 2021-09-26
        • 1970-01-01
        相关资源
        最近更新 更多