我在調用對象__invoke()時遇到問題。 __invoke()方法是否與實例變量無關?我需要直接在我的模板上調用__invoke(),因爲一些ZF2注入調用$ this-> getView() - > render(...)(否則getView()返回null),我想要設置實例變量那裏。任何解決方法?PHP神奇方法__invoke,空實例變量
見我的代碼:
namespace Person\Person\View\Helper;
use Zend\View\Helper\AbstractHelper;
class PersonShowWidget extends AbstractHelper
{
protected $model = null;
public function __construct(array $options = null)
{
$this->parseOptions($options);
}
public function __invoke()
{
var_dump($this->model); //returns null
return $this->getView()->render('person/show/show_widget', array(
'title' => 'Cliente',
'model' => $this->model,
)
);
}
public function setOptions(array $options = null)
{
$this->parseOptions($options);
}
protected function parseOptions(array $options = null)
{
if (!is_null($options) && is_array($options)) {
if (isset($options['model'])) {
$model = $options['model'];
if (isset($model['id'])) {
$this->model['id'] = $model['id'];
} else {
throw new \Exception;
}
if (isset($model['form'])) {
$this->model['form'] = $model['form'];
} else {
throw new \Exception;
}
}
}
var_dump($this->model); //returns valid data
}
}
我呼籲一些選項或setOptions方法構造函數調用之前__invoke()。
謝謝,
也許我做的概念錯了,我想要做的就是創建一個控制器中的新PersonShowWidget,通過setOptions方法進行配置和然後在視圖中顯示(回顯)它。也許getView()方法返回null,因爲我沒有通過視圖中的ViewManager獲取它? – vicaba 2014-09-04 07:48:37
@vicaba看到我的編輯.. – bitWorking 2014-09-04 13:34:17
我這樣做,你現在提到的方式,問題是,如果我在控制器中創建viewhelper,setView()從來沒有被調用過。現在我試圖在控制器中呈現它,因爲我想將其轉換爲模式,並且只有在按下按鈕時纔想發送代碼。 – vicaba 2014-09-05 13:51:44