2012-12-12 2 views
4

CakePhp 2.2.3을 사용하고 있으며 구성 요소를 만들고 있습니다.CakePHP의 구성 요소에 설정을 올바르게 전달하는 방법

구성 요소 :

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; 
} 

} 

컨트롤러 : 난 다시 (INT)이 결과로 가지고

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

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

. 그러나 나는 그것이 5가되어야한다고 생각한다. 내가 뭘 잘못 했니?

+0

왜 패스 한 다음 설정 매개 변수로 액세스 할 수 있습니까? 설정과 런타임 인수를 섞어서는 안됩니다. – mark

+0

그래, 맞다고 이해하면 구성 요소에 공용 변수를 만들어야합니다. 설정이됩니다. 나는 이것을 $ this-> Example (array ('foo'=> 'bar'))'을 사용하여 바꿀 수있다. 그리고이 구성 요소의 메소드에서이 설정을 사용하여 '핵심'값을 설정할 수 있지만 컨트롤러 동작 에서처럼 일부 변수를 받아 들일 필요가 있습니다. 그리고이 변수를'$ this-> Example-> someMethod ($ first, $ second)'를 사용하여 전달할 수 있습니다. 그리고이 방법은이 두 가지를 모두 사용합니다 (settings + vars.)? 현재 설정을 전달하려면'public function __construct'에서 뭔가를 변경해야합니까? 아니면 만지지 말아야합니까? – Derp

답변

4

잘못된 시간에 기본 설정을 전달하고 있습니다. __construct은 다음 행으로 구성 요소를 인스턴스화 할 때 호출됩니다.

public $components = array('Example'); 

그래서 당신이 컴퍼넌트의 초기화 매개 변수를 전달하려면이처럼 수행

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

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

당신이 다음 줄에 매개 변수를 전달하는 데 계속하려면

그러면 sum() 함수를 다음과 같이 조정해야합니다.

public function sum($new_settings) { 

    $sum = $new_settings['a1'] + $new_settings['a2']; 
    return $sum; 
} 
관련 문제