我正在开始学习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/
答案 0 :(得分:1)
定义“便携式”。
如果您的CodeIgniter应用程序设置正确 - 即:
system
和application
个文件夹$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)
代码初始化的最佳做法是按以下流程设置资产:
但是你想要
但是,如果要将资产文件夹保留在应用程序中,则必须执行以下一些附加功能: 首先,请确保已在控制器中加载了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">