Zend 2 布局中带有视图助手的动态内容
Zend 2 Dynamic Content in Layout with View Helpers
我是 Zend FW 2 的新手,我尝试在布局中显示数据库中的数据,但收到错误消息:
Catchable fatal error: Argument 1 passed to Application\View\Helper\HotNews::__construct() must be an instance of Zend\Db\Adapter\Adapter, none given, called in C:\xampp\htdocs\webtruonghoc\vendor\ZF2\library\Zend\ServiceManager\AbstractPluginManager.php on line 207 and defined in C:\xampp\htdocs\webtruonghoc\module\Application\src\Application\View\Helper\HotNews.php on li
Module.php 中的函数 getViewHelperConfig:
public function getViewHelperConfig()
{
return array(
'factories' => array(
'hotNews' => function($sm) {
$adapter = $sm->getServiceLocator()->get('Application\Model\NewsTable');
return new HotNews($adapter);
},
),
);
}
在module.config.php中添加代码:
'view_helpers' => array(
'invokables' => array(
'hotnews' => 'Application\View\Helper\HotNews',
),
文件HotNews.php:
<?php
namespace Application\View\Helper;
use Zend\Authentication\AuthenticationService;
use Zend\View\Helper\AbstractHelper;
use Zend\Db\Adapter\Adapter;
class HotNews extends AbstractHelper
{
protected $adapter;
public function __construct(Adapter $adapter)
{
$this->adapter = $adapter;
}
public function __invoke()
{
$sql="SELECT * FROM news order by date DESC limit 0,4";
return $resultSet = $this->adapter->query($sql, \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
}
}
最后我在布局中显示数据:
<?php $hotnews = $this->hotNews();
var_dump($hotnews);
?>
我错过了什么吗?
您似乎希望将模型设置为服务。但可能没有正确设置服务。在您的 module.config.php 文件中,'service_manager' => 'factories' 下应该有一个条目:
return array(
'service_manager' => array(
'factories' => array(
'Application\Model\NewsTable' => function (ServiceLocatorInterface $serviceLocator) {
//... returns an instance of Application\Model\NewsTable
}
)
)
);
您的 SQL 有错误。此外,您不应该在视图助手内部执行 SQL 语句,并且将 select * 的整个结果集传递给视图也是不好的 JuJu。我会将 SQL 放在存储库 class 中,其中 returns DTO 对象代表您的数据模型。然后您可以将存储库注入您的 ViewHelper 并在您的视图中使用这些 DTO。
我是 Zend FW 2 的新手,我尝试在布局中显示数据库中的数据,但收到错误消息:
Catchable fatal error: Argument 1 passed to Application\View\Helper\HotNews::__construct() must be an instance of Zend\Db\Adapter\Adapter, none given, called in C:\xampp\htdocs\webtruonghoc\vendor\ZF2\library\Zend\ServiceManager\AbstractPluginManager.php on line 207 and defined in C:\xampp\htdocs\webtruonghoc\module\Application\src\Application\View\Helper\HotNews.php on li
Module.php 中的函数 getViewHelperConfig:
public function getViewHelperConfig()
{
return array(
'factories' => array(
'hotNews' => function($sm) {
$adapter = $sm->getServiceLocator()->get('Application\Model\NewsTable');
return new HotNews($adapter);
},
),
);
}
在module.config.php中添加代码:
'view_helpers' => array(
'invokables' => array(
'hotnews' => 'Application\View\Helper\HotNews',
),
文件HotNews.php:
<?php
namespace Application\View\Helper;
use Zend\Authentication\AuthenticationService;
use Zend\View\Helper\AbstractHelper;
use Zend\Db\Adapter\Adapter;
class HotNews extends AbstractHelper
{
protected $adapter;
public function __construct(Adapter $adapter)
{
$this->adapter = $adapter;
}
public function __invoke()
{
$sql="SELECT * FROM news order by date DESC limit 0,4";
return $resultSet = $this->adapter->query($sql, \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
}
}
最后我在布局中显示数据:
<?php $hotnews = $this->hotNews();
var_dump($hotnews);
?>
我错过了什么吗?
您似乎希望将模型设置为服务。但可能没有正确设置服务。在您的 module.config.php 文件中,'service_manager' => 'factories' 下应该有一个条目:
return array(
'service_manager' => array(
'factories' => array(
'Application\Model\NewsTable' => function (ServiceLocatorInterface $serviceLocator) {
//... returns an instance of Application\Model\NewsTable
}
)
)
);
您的 SQL 有错误。此外,您不应该在视图助手内部执行 SQL 语句,并且将 select * 的整个结果集传递给视图也是不好的 JuJu。我会将 SQL 放在存储库 class 中,其中 returns DTO 对象代表您的数据模型。然后您可以将存储库注入您的 ViewHelper 并在您的视图中使用这些 DTO。