18

我刚开始使用CodeIgniter,我不确定css、js和图像之类的东西应该去哪里。在整个系统文件夹之外似乎还可以,但这意味着一切都是分开的。内部意味着文件路径更长,我担心它可能会搞砸。这个问题的最佳实践是什么?

4

6 回答 6

15

我通常将单独的文件夹放在根级别,所以我最终得到这样的目录结构:

/system
/css
/js
/img

似乎对我有用-当您使用时site_url(url),它生成的 URL 来自根目录,因此您可以使用它site_url('css/file.css')来生成样式表的 URL 等。

于 2008-10-07T13:51:25.713 回答
6

就个人而言,我将application目录从目录中剥离出来,system并使其成为system. 然后我创建一个项目目录,在public_html (www)其中移动 index.php 并存储我的公共资产。

假设您正在处理的项目名为projekt. 在父目录中public_html (www)创建一个名为 的目录CISYSTEM,并在该目录中根据您正在使用的版本创建一个目录202210等等。

/CISYSTEM
    /202
    /210
    /another_CI_version
/projekt_application
    /models
    /views
    /controllers
    /private_assets
/public_html
    /projekt
        index.php
        .htaccess
        css
        img
        js
        lib

这种目录结构的美妙之处在于它增加了另一层安全性,并使升级/更换 CI 核心变得非常容易。另外,您不应该对核心进行更改 - 拥有一个存储核心的目录并让所有项目引用它可以保持干燥。

不过,所有这些目录改组都需要您重新路由一些东西。幸运的是,CodeIgniter 使它变得简单——所有的更改都可以在index.php文件中进行。

打开index.php并重新路由几件事:

改变:$system_path = 'system';

到:$system_path = '../../CISYSTEM/210';

改变:$application_folder = 'application';

到:$application_folder = '../../projekt_application';


site_url()另外,我看到很多人在其他答案中谈论使用。我推荐一种不那么冗长的使用方式……如果你使用 HTML 的元素site_url(),你不必每次都调用它:<base>

<base href="<?= site_url();?>">

只需将其包含在您的应用程序中<head>,您就可以直接调用您的控制器......如:

<a href='controllername/functionname'>Some Action</a>

干杯

于 2012-08-04T00:52:34.627 回答
1

我讨厌在根级别有这么多目录,所以我使用 /public 并使用 htaccess 将 /scripts 重写为 /public/scripts 等等。

于 2008-10-07T18:44:54.297 回答
1

我发现最好将资产保持在根级别。您可以使用<?=base_url()?>来回显站点的完整根目录。在配置文件中,您设置了网站的根目录。这个声明只是呼应了这一点。

因此,您可以像这样使用包含:

<link href="<?=base_url()?>/css/style.css" rel="stylesheet" type="text/css" />

在你的代码中的任何地方,它仍然会得到http://example.com/css/style.css

于 2008-10-07T23:33:00.690 回答
1

base_url()/css/name.css

于 2010-09-07T10:05:02.993 回答
1

为了以这种方式使用 site_url(url) 帮助程序,您必须首先配置 Apache mod_rewrite(或等效项)以从 URI 中删除 index.php 段。

否则,site_url 方法会将 index.php 添加到 URL,如果您将它们放在上面的基本目录中,这可能会搞砸资产的路径。

这是关于从 URI 中删除 index.php 的 CodeIgniter 文档:

http://codeigniter.com/wiki/mod_rewrite/

于 2011-04-19T17:14:28.630 回答