Codeigniter 资产文件夹最佳实践
Posted
技术标签:
【中文标题】Codeigniter 资产文件夹最佳实践【英文标题】:Codeigniter assets folder best practice 【发布时间】:2013-11-18 04:13:29 【问题描述】:我是 codeigniter 的新手,但我学得很好,我将添加一个 css、images、js、... 文件夹,但我不知道在哪里放吧
有人告诉我创建一个“公共”文件夹
system
application
public
css
images
然后在你的 index.php(在公共文件夹中)进行相应的调整
$system_path = '../system'; $application_path = '../application';
但是当我这样做时,我得到一个 404(不是 ci 404,而是一个真正找不到的)
有人知道我可能做错了什么吗?谢谢!
【问题讨论】:
这个问题很老了,我希望你尝试了新的 CodeIgniter 4,它为这个特定的问题带来了一些清晰。 这是 8 年前的事了。我什至不知道如何拼写 PHP。我还在做生意,但现在使用 Laravel。祝你好运! 这就是 SO! 的美妙之处。 OP 时不时地重新访问他们的旧帖子以更新它。我也在使用 Laravel,我喜欢它的 Ruby on Rails 氛围。效率极高。 【参考方案1】:我有这个设置:
application
assets
system
.htaccess
在“assets”文件夹中,我有“img”或“js”等子文件夹。 我还使用“实用程序助手”来帮助我指向该文件夹。
如果你想尝试它,你必须首先创建一个名为“utility_helper.php”的助手 使用此代码:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
if ( ! function_exists('asset_url()'))
function asset_url()
return base_url().'assets/';
并将其存储在
application/helpers/
然后你必须自动加载那个助手,你去:
application/config/autoload.php
并自动加载帮助程序(例如:)
$autoload['helper'] = array('form', 'url', 'utility');
您还必须路由到该文件夹('application/config/routes.php')
$route['assets/(:any)'] = 'assets/$1';
并拥有一个包含此内容的 .htaccess 文件:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|assets|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
现在您可以简单地包含外部脚本,css 示例:
<link rel="stylesheet" type="text/css" href="<?php echo asset_url();?>css/style.css">
其中 css 是 assets 中的文件夹,style.css 是 css 文件。 像这样:
application
assets
css
style.css
system
【讨论】:
如果 .htaccess 文件按照它的方式工作,允许在 codeigniter 系统之外访问像 /images 这样的 URL,那么为什么不把资产放在那里并跳过帮助程序呢? 另外,为什么不在帮助程序中包含 echo 并减轻模板设计者输入echo
的麻烦。相反,他们可以只写<? assets_url(); ?>
? (顺便说一句,除了我的问题,我非常喜欢这种方法)
好吧,在我编码的地方,我们倾向于不写这么多的回声,因为你可能想要附加函数结果或类似的东西..你当然可以写回声甚至使用短标签( = ?>,如果这对你来说是新的,谷歌它:)
@maetulj 非常有帮助!我能问一下你为什么使用 if 条件,即' if ( ! function_exists('asset_url()'))' 吗?谢谢
@FaisalAshfaq 只是为了检查该名称是否可用。你不必这样做:)【参考方案2】:
对此的另一个角度——我认为他们试图告诉你做什么——是将你的应用程序和系统文件夹从“公共”html 文件夹上移一层。这样您的源文件就无法访问。因此,在 Mamp 中,公共文件夹称为 htdocs,在大多数 Web 托管中称为 html。
/application/html/
/system /html/
// your main index page is in the public html folder
/.….. /html/index.php
// an assets folder in the public html folder with css, img, etc folders
/.…… /html/assets/css/
/.…… /html/assets/img/
然后在您的 index.php 中,路径会像“向上”一样前进一级
$system_path = '../system';
$application_folder = '../application';
奖金 - 这里有两个对我有很大帮助的提示。 1)命名您的应用程序文件夹,然后您可以轻松地在不同版本之间切换, '回滚' 非常快,等等。
/app_alpha/html/
/app_beta01/html/
/app_beta02/html/
2) 将基本 url 放在 index.php 页面上——而不是放在配置中。
$assign_to_config['base_url'] = 'https://awesomedomain.com';
这样您就可以拥有一个本地开发版本、单独的实时服务器版本——而且您永远不必担心过度编写基本 url,因为它在 index.php 页面上——而不是在配置中。
【讨论】:
【参考方案3】:我会恢复您对index.php
所做的更改,因为在我看来它们是问题的根源。
我一直在为 CodeIgniter 使用类似的设置,我的所有图像、CSS 和 JS 都放在一个名为 static
的文件夹中,实际上我所做的只是创建该文件夹并将文件放入其中,然后它们工作正常。如果您想从您的 URL 中删除 index.php
,您需要确保您的 .htaccess
文件不会为您的静态文件重写 URL。
【讨论】:
以上是关于Codeigniter 资产文件夹最佳实践的主要内容,如果未能解决你的问题,请参考以下文章
Symfony2 共享的 CSS 和 JS 资产在哪里,最佳实践是明智的?