0

我创建了一个组件,调用ApiComponent它来处理向另一台服务器打开 HttpSocket 以发布信息。它看起来像这样:

class ApiComponent extends Component {

    public function connect($endpoint,$data) {
        App::uses('HttpSocket', 'Network/Http');
        $HttpSocket = new HttpSocket();            
        // rest of the code
    }

}

这在我可以$this->Api->connect('/posts/add.json',$data);从我的控制器调用并且代码按预期执行的意义上是有效的。

但是,我有很多设置,$HttpSocket->request例如主机名、端口号、用户名、密码等,我想从组件中取出并放入配置文件中。

根据http://book.cakephp.org/2.0/en/controllers/components.html#include-your-component-in-your-controllers我可以将参数从 AppController 传递给组件,如下所示:

public $components = array(
    'Api' => array(
        'host' => 'localhost',
        'port' => '80'
    ),
    'Session', 'Auth'
);

手册说这会将数组传递给ApiComponent::__construct()但它没有说明我应该如何访问组件中的数据(或者,它可能......我在这里不熟悉的领域)。

所以,我的问题是:

1) 像这样在 AppController 中放置主机、用户名、密码等内容是否合适?和...

2) ...如果是这样,我如何从组件中访问它们?

...或者...

3) ...如果不是,我应该在哪里放置这样的设置?

4

2 回答 2

1

在您的 ApiComponent 中,您的设置存储在:

$this->settings

API

我不完全同意@Lionel Chan:我认为将这些值存储在组件设置中并不是一个坏主意。但是使用 Configure 类也是一个好习惯。

于 2013-10-03T06:20:13.037 回答
0
  1. 不,这不合适(所以不清楚)。控制器用于系统/业务逻辑,而不是用于配置。

  2. (和 3。)您可能可以使用以下方法来存储配置:

    1. 好,老不变的方式:

      这很简单,只要define(key, value)这些凭据在你的bootstrap.php和你应该没问题,它是全球可访问的。

    2. 使用Configure

      Configure 非常方便,因为它对 CakePHP 来说是全局的。您只需Configure::write()在文件中写入凭据即可bootstrap.php。是的,如果您不介意,它会有一些小开销,但不应该引起注意。

于 2013-10-03T06:14:35.973 回答