将/ assets文件夹放入CodeIgniter中的/ application

时间:2013-01-18 16:22:12

标签: codeigniter codeigniter-2 assets

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

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

好的,现在问题是:如何将资产文件引用到我的视图中?如果/ assets文件夹在根目录中,我读到我可以参考ie。像这样的.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以免弄得一团糟

拥有/资产INTO /应用程序可以让我免除所有这些问题,这是我的想法;帮助者的想法很好,正如我刚刚发现的那篇文章所述,这似乎解决了我正在问的问题:http://heybigname.com/2009/11/23/managing-assets-with-codeigniter/

3 个答案:

答案 0 :(得分:1)

定义“便携式”。

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

    网络根目录下方的
  • systemapplication个文件夹
  • $config['base_url']是正确的(包含协议的完整域名,即http://www.example.com

然后您应该将assets文件夹放在与前端控制器相同的目录中(index.php)。与assets文件夹中的application相比,这种配置同样具有“可移植性”(我认为它更多)。如果您的应用程序目录位于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 ?>

答案 1 :(得分:1)

我知道这是一个老问题,但我前段时间写了一篇文章,其中有一点针对这个问题。我喜欢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');

答案 2 :(得分:0)

代码初始化的最佳做法是按以下流程设置资产:

  • 应用程序
  • 资产
  • 系统

但是你想要

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

但是,如果要将资产文件夹保留在应用程序中,则必须执行以下一些附加功能: 首先,请确保已在控制器中加载了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">