2012-06-25 70 views
1

創建類我在配置如下代碼:Zend框架2迪不帶參數

<?php 
return array(
    'di' => array(
     'instance' => array(
      'alias' => array(
       'sms_message' => 'Sms\Message', 
      ), 
      'sms_message' => array(
       'parameters' => array(
        'from' => 'SENDER', 
       ), 
      ), 
     ), 
    ), 
); 

而在Message.php類我有一個二傳手(我不想使用構造器):

/** 
* From 
* @var string 
*/ 
protected $from; 

/** 
* @param string $from 
*/ 
public function setFrom($from) 
{ 
    $this->from = $from; 
} 

但是當我嘗試加載它,我得到未配置的對象:

var_dump($this->getLocator()->get('Sms\Message'));exit; 

object(Sms\Message)[596] 
    protected 'to' => null 
    protected 'from' => null 
    protected 'body' => null 

如何使它發揮作用?

+0

你試過這個沒有使用別名,但只有FQN? Afaik的「別名」鍵必須與配置的「實例」鍵處於同一級別。 – Fge

+0

它實際上處於同一水平。只是非常格式化。 –

回答

0

對於二傳手注射,你必須使用injections關鍵字:

array(  
    'di' => array(
     'instance' => array(
      'alias' => array(
       'sms_message' => 'Sms\Message' 
      ), 
      'Sms\Message' => array(
       'injections' => array(
        'setFrom' => array(
         'from' => 'SENDER' 
        ), 
       ), 
      ), 
     ), 
    ), 
); 

我不知道,如果實例配置應該用別名工作。改用FQCN代替。

我還發現,當前請求的別名時,當再現您例如注射不執行:

// The will call setFrom(...) 
$di->get('Sms\Message); 
// This will not call setFrom(...) 
$di->get('sms_message'); 

,如果這種行爲是有意或無意,我不知道。 (我會報告這test這是目前failing

+0

非常感謝!有用! –