如何在CodeIgniter中管理多个应用程序

今天,我们将探讨如何使用单个代码库在CodeIgniter Web框架中管理多个应用程序。 在此过程中,我们将继续创建两个不同的CodeIgniter应用程序,它们将共享核心CodeIgniter代码库。

在不同的应用程序之间共享核心代码库并不是什么新鲜事物,因为不同的框架和开放源代码系统已经在实践它,而CodeIgniter也不例外。 它使您可以轻松地管理共享核心CodeIgniter库和API文件的多个应用程序,同时可以使用不同的数据库和特定于站点的配置。

首先,我们将介绍多站点设置的好处,然后继续进行实际演示,以演示在CodeIgniter框架中设置多个应用程序所需要的工作。

多站点设置的好处

在本节中,我们将重点介绍进行多站点设置的一些好处。

我可以直接指出的最明显的好处之一是,多站点安装共享一个公共代码库,这将使应用程序的升级和维护过程变得更加容易。

例如,假设您有十个不同的CodeIgniter应用程序正在运行。 您刚知道可以使用新版本的CodeIgniter框架进行升级,并且您想尽快对其进行升级,以确保代码保持安全和稳定。

如果您为每个应用程序都有一个单独的代码库,那么遍历每个站点并依次对其进行升级绝对是一个繁琐的过程。 使用多站点设置,您只需要做一次,因为核心代码库已在所有站点之间共享!

接下来,它允许您为每个应用程序使用不同的数据库,即使它们共享相同的代码库。 实际上,这是设置多站点的最受欢迎的用例之一!

除了为每个应用程序使用不同的数据库之外,您还可以创建一个设置,该设置使用相同的数据库,但是前端使用不同的主题或布局。

如果您仍在使用基于FTP的方法在不同服务器之间移动站点文件,那么我想您会喜欢多站点方法,因为它可以最大程度地减少工作量!

如何创建多个应用程序

在本节中,我们将设置基本目录结构以实现多站点设置。

在您的CodeIgniter应用程序的根目录中,创建一个applications目录。 这是存放我们不同应用程序的主目录。

接下来,继续创建两个新目录applications/app_oneapplications/app_two 。 当然,您可以按自己的方式命名,但现在我将保持简单。

因此,如您所见,我们将设置两个不同的应用程序,这些应用程序将使用CodeIgniter框架的单个代码库。 尽管多站点设置将重用大多数CodeIgniter框架文件,但我们仍然需要为我们创建的每个应用程序复制几个文件和目录。

首先让我快速列出您应从默认应用程序复制的文件和目录。

将以下目录从默认应用程序目录复制到applications/app_oneapplications/app_two

  • 快取
  • 配置
  • 日志

如您所见,很明显,每个应用程序都有单独的目录用于cachelogsconfig目录对于您的CodeIgniter应用程序的工作必不可少,因此无论如何我们将对其进行复制。

接下来,让我们复制几个文件以及必要的目录,以使我们能够测试多站点应用程序。

将以下文件从默认的CodeIgniter应用程序复制到我们的app_oneapp_two应用程序:

  • 控制器/welcome.php
  • 查看/错误
  • views / welcome_message.php

为了快速参考, controllers/welcome.php文件应如下所示:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Welcome extends CI_Controller { 

    /**
     * Index Page for this controller.
     *
     * Maps to the following URL
     *         https://example.com/index.php/welcome
     *    - or -
     *         http://example.com/index.php/welcome/index
     *    - or -
     * Since this controller is set as the default controller in
     * config/routes.php, it's displayed at http://example.com/
     *
     * So any other public methods not prefixed with an underscore will
     * map to /index.php/welcome/<method_name>
     * @see https://codeigniter.com/user_guide/general/urls.html
     */
    public function index()
    {
        $this->load->view('welcome_message');
    }
}

并且views/welcome_message.php文件应该看起来像。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Welcome to CodeIgniter</title>

    <style type="text/css">

    ::selection { background-color: #E13300; color: white; }
    ::-moz-selection { background-color: #E13300; color: white; }

    body {
        background-color: #fff;
        margin: 40px;
        font: 13px/20px normal Helvetica, Arial, sans-serif;
        color: #4F5155;
    }

    a {
        color: #003399;
        background-color: transparent;
        font-weight: normal;
    }

    h1 {
        color: #444;
        background-color: transparent;
        border-bottom: 1px solid #D0D0D0;
        font-size: 19px;
        font-weight: normal;
        margin: 0 0 14px 0;
        padding: 14px 15px 10px 15px;
    }

    code {
        font-family: Consolas, Monaco, Courier New, Courier, monospace;
        font-size: 12px;
        background-color: #f9f9f9;
        border: 1px solid #D0D0D0;
        color: #002166;
        display: block;
        margin: 14px 0 14px 0;
        padding: 12px 10px 12px 10px;
    }

    #body {
        margin: 0 15px 0 15px;
    }

    p.footer {
        text-align: right;
        font-size: 11px;
        border-top: 1px solid #D0D0D0;
        line-height: 32px;
        padding: 0 10px 0 10px;
        margin: 20px 0 0 0;
    }

    #container {
        margin: 10px;
        border: 1px solid #D0D0D0;
        box-shadow: 0 0 8px #D0D0D0;
    }
    </style>
</head>
<body>

<div id="container">
    <h1>Welcome to CodeIgniter! You're browsing Application One!</h1>

    <div id="body">
        <p>The page you are looking at is being generated dynamically by CodeIgniter.</p>

        <p>If you would like to edit this page you'll find it located at:</p>
        <code>application/views/welcome_message.php</code>

        <p>The corresponding controller for this page is found at:</p>
        <code>application/controllers/Welcome.php</code>

        <p>If you are exploring CodeIgniter for the very first time, you should start by reading the <a href="user_guide/">User Guide</a>.</p>
    </div>

    <p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds. <?php echo  (ENVIRONMENT === 'development') ?  'CodeIgniter Version <strong>' . CI_VERSION . '</strong>' : '' ?></p>
</div>

</body>
</html>

当然,您应该在视图文件中更改以下消息,以便我们可以在测试期间区分应用程序。

对于applications/app_one/views/welcome_message.php ,它应类似于:

<h1>Welcome to CodeIgniter! You're browsing Application One!</h1>

对于applications/app_two/views/welcome_message.php ,它应该类似于:

<h1>Welcome to CodeIgniter! You're browsing Application Two!</h1>

现在,就我们的多站点设置而言,我们已完成所有工作。 但是,它仍无法立即使用,因为我们仍然需要通知CodeIgniter我们的多站点设置,因为它总是加载位于application目录中的默认应用application

画龙点睛

让我们快速浏览一下配置默认应用程序目录的设置。 继续并在应用程序的根目录下打开index.php文件,然后查找以下代码片段。

/*
 *---------------------------------------------------------------
 * APPLICATION DIRECTORY NAME
 *---------------------------------------------------------------
 *
 * If you want this front controller to use a different "application"
 * directory than the default one you can set its name here. The directory
 * can also be renamed or relocated anywhere on your server. If you do,
 * use an absolute (full) server path.
 * For more info please see the user guide:
 *
 * https://codeigniter.com/user_guide/general/managing_apps.html
 *
 * NO TRAILING SLASH!
 */
$application_folder = 'application';

从上面的代码片段中可以很明显地看出,它允许您设置默认应用程序的路径。 因此,在这里我们可以进行更改,以便它从默认目录以外的目录中拾取默认应用程序。

当然,您可以继续并立即执行类似的操作,并且应该运行app_one应用程序。

$application_folder = 'applications/app_one';

另一方面,如果要运行app_two怎么app_two ? 作为一个快捷工具,您可以将每个应用程序的index.php文件复制到index_app_one.phpindex_app_two.php 。 在虚拟主机中,确保进行相应的更改。

另一方面,我更喜欢略有不同的方法,并且我希望依靠ENV变量在运行时在不同的应用程序之间进行选择。

例如,您可以在NGINX中设置自定义ENV变量,如以下代码片段所示。

// set the env variable CI_DEFAULT_APP in the "location" directive of vhost
fastcgi_param  CI_DEFAULT_APP  applications/app_one;

如果您使用的是Apache Web服务器,则可以通过以下方法实现相同的目的:

SetEnv CI_DEFAULT_APP applications/app_one

接下来,让我们修改index.php文件中的代码,该文件利用ENV变量来确定要运行的默认应用程序。

...
...
$application_folder = (isset($_SERVER['CI_DEFAULT_APP']) ? $_SERVER['CI_DEFAULT_APP'] : 'application');
...
...

因此,正如您所看到的,我们首先检查CI_DEFAULT_APP ENV变量的存在,如果不可用,那么我们将使用默认应用程序。

通常,您想在不同的域上运行不同的应用程序。 理想情况下,我想为每个应用程序使用两个不同的虚拟主机。 在NGINX的上下文中,每个虚拟主机的快速示例应如下所示。

www.ci-app-one.com域指向app_one

server {
  listen {YOUR_IP}:80;
  server_name  www.ci-app-one.com;
  root   /var/www/html;
  index index.html index.php;

  location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
    access_log off;
    expires max;
  }

  location / {
     # Check if a file or directory index file exists, else route it to index.php.
     try_files $uri $uri/ /index.php;
  }

  location ~ \.php$ {
    root   /var/www/html;
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;
    fastcgi_param  CI_DEFAULT_APP  applications/app_one;
    include fastcgi_params;
  }
}

同样, www.ci-app-two.com域指向app_two

server {
  listen {YOUR_IP}:80;
  server_name  www.ci-app-two.com;
  root   /var/www/html;
  index index.html index.php;

  location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
    access_log off;
    expires max;
  }

  location / {
     # Check if a file or directory index file exists, else route it to index.php.
     try_files $uri $uri/ /index.php;
  }

  location ~ \.php$ {
    root   /var/www/html;
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;
    fastcgi_param  CI_DEFAULT_APP  applications/app_two;
    include fastcgi_params;
  }
}

当然,您可以立即进行测试,以查看更改是否确实有效! 如果您遇到任何问题,请随时向我提出任何疑问。

这是非常简单的方法,您可以使用一个代码库在CodeIgniter框架中设置多个应用程序。

结论

今天,我们经历了CodeIgniter框架的一个有趣方面,它允许您使用单个代码库来管理多个应用程序。 这样做的明显好处是可以轻松升级和维护现有代码库。

CodeIgniter是功能强大的PHP平台。 无论您是刚入门还是要使用下一个版本,请不要忘记查看我们为您提供的服务

如果您已经实施了类似的方法,或者可能会以稍微不同的方式来实现,请分享您的想法。 无论哪种方式,我都想听听您的想法!

翻译自: https://code.tutsplus.com/tutorials/manage-multiple-applications-in-codeigniter--cms-29795

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值