5

私は 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であるべきだと思います.私は何を間違っていますか?

4

1 に答える 1

5

間違ったタイミングでデフォルト設定を渡しています。 __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;
}
于 2012-12-12T19:45:22.587 に答える