我需要将数据从控制器传递到我的自定义视图助手。我尝试以两种方式做到这一点,但不幸的是我无法让它发挥作用。
我已经在 module.config.php 中注册了助手
我尝试将变量从控制器传递给助手的第一种方法
:
在我的控制器中:
public function indexAction()
{
$this->data = $this->getApplicationTable()->getTypes();
$helper = new TestHelper();
$helper->setVariables($this->data);
}
这是我的帮手:
class TestHelper extends AbstractHelper {
public $data;
public function __invoke()
{
var_dump($this->data); // output null
return $this->getView()->render('helper-view.phtml', $this->data);
}
public function setVariables($var)
{
if($var){
$this->data = $var;
var_dump($this->data) // output array with correct data
}
}
}
在布局中,我这样显示:
<?php echo $this->testHelper(); ?>
我从 helper-view.phtml 得到错误,该变量为空。
我尝试的第二种方法是基于依赖注入
我的模块.php:
public function getServiceConfig()
{
return array(
'factories' => array(
'Application\Model\ApplicationTable' => function($sm) {
$tableGateway = $sm->get('ApplicationTableGateway');
$table = new ApplicationTable($tableGateway);
return $table;
},
'ApplicationTableGateway' => function ($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
return new TableGateway('tableName', $dbAdapter);
},
),
);
}
public function getViewHelperConfig()
{
return array(
'factories' => array(
'TestHelper' => function ($helperPluginManager) {
$sm = $helperPluginManager->getServiceLocator();
$tableGateway = $sm->get('Application\Model\ApplicationTable');
$viewHelper = new TestHelper();
$viewHelper->setTableGateway($tableGateway);
return $viewHelper;
}
),
);
}
我的助手:
class TestHelper extends AbstractHelper {
public $tableGateway;
public function __invoke()
{
$data = $this->tableGateway->getTypes();
return $this->getView()->render('helper-view.phtml', $data);
}
public function setTableGateway($tableGateway)
{
$this->tableGateway = $tableGateway;
}
}
我得到了与第一种方式相同的错误。
我将不胜感激任何帮助。