我正在使用 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;
}
}
Run Code Online (Sandbox Code Playgroud)
控制器:
class ExampleController extends AppController {
public $components = array('Example');
public function index () {
$this->set('sum', $this->Example->sum(array('a1' => 2, 'a2' => 3)));
}
}
Run Code Online (Sandbox Code Playgroud)
结果我得到了 (int) 2。但我认为应该是5。我做错了什么?
您在错误的时间传递了默认设置。
__construct当您使用以下行实例化组件时调用。
public $components = array('Example');
Run Code Online (Sandbox Code Playgroud)
因此,如果您想将参数传递给组件初始化,您可以这样做:
public $components = array('Example'=>array('a1'=>'2', 'a2'=>'3'));
Run Code Online (Sandbox Code Playgroud)
如果要继续使用以下行传递参数:
$this->set('sum', $this->Example->sum(array('a1' => 2, 'a2' => 3)));
Run Code Online (Sandbox Code Playgroud)
然后,您必须将 sum() 函数调整为:
public function sum($new_settings) {
$sum = $new_settings['a1'] + $new_settings['a2'];
return $sum;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2228 次 |
| 最近记录: |