zend框架对段路由的默认操作

时间:2013-11-18 18:46:59

标签: php zend-framework routes

我正在关注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()

1 个答案:

答案 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;
}

我希望这会有所帮助。对于您的问题冗长的评论会议感到抱歉。事实证明,你发布的所有代码都是纯金; - )