在Config文件(routles.php,mail.php ...)之间在CakePHP共享配置文件

时间:2013-01-15 15:45:31

标签: cakephp cakephp-2.0 cakephp-2.1 cakephp-2.2

我在localhost中运行一个站点作为开发环境,并在服务器中运行。

两者之间的一些配置文件存在一些差异,每次我必须更新服务器中的更改时,我必须小心不要覆盖一些不同的文件。

我希望能够通过为每个环境创建一个具有正确配置的单个文件来简化此过程。

我需要读取此Config文件中当前的文件:

  • 应用程序/配置/ email.php
  • 应用程序/配置/ routes.php文件

理想情况下,如果可能的话:

  • 应用程序/供应商/ VENDOR_NAME / vendor_file.php

有可能吗?

我曾尝试使用Configure :: read和Configure :: write,但似乎无法在public $smtp等电子邮件设置或路由文件中完成。

Thaks。

2 个答案:

答案 0 :(得分:2)

routes文件只是一个调用路由器的php文件。您可以非常简单地将其拆分为多个文件并自行加载:

app/Config/
  routes.php
  routes_dev.php
  routes_production.php
然后

routes.php将加载正确的路由文件。

<?php
if ($env == 'dev') {
  include 'routes_dev.php';
} else {
  include 'routes_production.php';
}

电子邮件配置也只是一个php文件。您可以编写一个函数来根据环境设置正确的默认配置。

class EmailConfig {

  public function __construct() {
    if ($env == 'dev') {
      $this->default = $this->dev;
    }
  }

  public $default = array(
      'host' => 'mail.example.com',
      'transport' => 'Smtp'
  );

  public $dev = array(
      'host' => 'mail2.example.com',
      'transport' => 'Smtp'
  );

}

至于供应商档案,这是个案基础。

如果你有一个部署系统,最好为每个环境(甚至是一个完整的配置目录)实际拥有单独的文件,并在部署构建完成后重命名它们,使得Cake和你的代码更加明智。 / p>

答案 1 :(得分:0)

我以前处理这种情况的方法是将环境变量添加到apache virtualhost配置中。

SetEnv cake_apps_path /var/www/apps/
SetEnv cake_libs_path /var/www/libs/

这让我可以拉出$ _SERVER ['cake_apps_path']和$ _SERVER ['cake_libs_path']。然后每个开发人员都可以在自己的virtualhost配置中设置自己的变量,然后将其添加到服务器的virtualhost配置中,然后就完成了。每个开发人员都可以拥有自己的路径。

相关问题