我是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);
?>
我错过了什么吗?
答案 0 :(得分:2)
看起来您希望将您的模型设置为服务。但可能没有正确设置服务。在你的module.config.php文件中,'service_manager'=&gt;下应该有一个条目。 '工厂':
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放在一个Repository类中,该类返回表示数据模型的DTO对象。然后,您可以将存储库注入ViewHelper,并在视图中使用这些DTO。