【问题标题】:Where should assets go in a CodeIgniter project?CodeIgniter 项目中的资产应该放在哪里?
【发布时间】:2010-09-15 18:20:55
【问题描述】:

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

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    就个人而言,我将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()。我推荐一种使用 site_url() 的不那么冗长的方式...如果您使用 HTML 的 <base> 元素,则不必每次都调用它:

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

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

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

    干杯

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

        base_url()/css/name.css

        【讨论】:

        • base_url() 实际上包括斜杠,所以你想要: base_url() 。 'css/name.css';
        【解决方案4】:

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

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

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • 你能发布你的 mod_rewrite 吗?
          【解决方案6】:

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

          /system
          /css
          /js
          /img
          

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

          【讨论】:

          • 啊,有道理。我希望能够使用 site_url,所以这是有道理的。谢谢!
          • 这是否意味着您将系统文件夹保存在公共目录中?
          • @Blowski 是的。我知道这不是最佳做法,但我认为这不一定是问题,尤其是如果您使用 .htaccess 来关闭对它的访问。
          猜你喜欢
          • 2023-04-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多