我正在关注zend framework 'album' tutorial
我想创建相当于专辑片段的路线,我看起来像这样:
'testimonial' => array(
'type' => 'segment',
'options' => array(
'route' => '/testimonial[/][:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Application\Controller\Testimonial',
),
),
),
根据文档,这应该指向我的推荐控制器,这应该像这样映射控制器:
/testimonial points to index
/testimonial/add points to add
所以在我的控制器中我有以下用于测试目的:
class TestimonialController extends \Zend\Mvc\Controller\AbstractActionController
{
public function indexAction()
{
die('list');
}
public function addAction()
{
die('create');
}
}
但是,如果我访问路线/推荐或推荐/添加它没有命中我的任何调试语句,也没有出现任何错误,我只是得到空白的zend骨架模板。
我需要为路线映射做些额外的事吗?或者到目前为止我做错了什么?
为了清楚起见,如果我向推荐控制器添加 __ construct 方法,它会正确地命中它,所以控制器工作,路由知道它在那里,只需要告诉它转到某种方式 indexAction()或 addAction()。
答案 0 :(得分:2)
您忘记将parent::setEventManager($events);
添加到setEventManager()
中的TestimonialController
方法。 AbstractActionController也将它用于一些事件(如onBootstrap)。
将方法更改为:
public function setEventManager(\Zend\EventManager\EventManagerInterface $events)
{
parent::setEventManager($events);
$this->events = $events;
$events->attach('dispatch', array($this, 'checkOptions'), 10);
}
getTestimonialTable()
方法中还有另一个小错误,您尝试获取$this->$testimonialTable
属性$this->testimonialTable
,如下所示:
public function getTestimonialTable()
{
if (!$this->testimonialTable) {
$sm = $this->getServiceLocator();
$this->testimonialTable = $sm->get('Application\Models\TestimonialTable');
}
return $this->testimonialTable;
}
我希望这会有所帮助。对于您的问题冗长的评论会议感到抱歉。事实证明,你发布的所有代码都是纯金; - )