如何正确地将设置传递给CakePHP中的组件

时间:2012-12-12 18:38:33

标签: php cakephp

我正在使用CakePhp 2.2.3而且我正在制作一个组件。

组件:

App::uses('Component', 'Controller');
class ExampleComponent extends Component {

public $settings = array();

protected $_defaults = array(
    'a1' => null,
    'a2' => 2
);

public function __construct(ComponentCollection $collection, $settings = array()) {

    $settings = array_merge($this->_defaults, $settings);
    $this->settings = $settings;

}

public function sum() {
    $sum = $this->settings['a1'] + $this->settings['a2'];
    return $sum;
}

}

控制器:

class ExampleController extends AppController {
public $components = array('Example');

public function index () {
    $this->set('sum', $this->Example->sum(array('a1' => 2, 'a2' => 3)));
}
}

我得到了返回(int)2的结果。但我认为它应该是5。 我做错了什么?

1 个答案:

答案 0 :(得分:4)

您正在错误的时间传递默认设置。 使用以下行实例化组件时会调用__construct

public $components = array('Example');

因此,如果要将参数传递给组件初始化,请按以下方式执行:

public $components = array('Example'=>array('a1'=>'2', 'a2'=>'3'));

如果您想继续使用以下行传递参数:

$this->set('sum', $this->Example->sum(array('a1' => 2, 'a2' => 3)));

然后你必须将你的sum()函数调整为:

public function sum($new_settings) {

    $sum = $new_settings['a1'] + $new_settings['a2'];
    return $sum;
}