zend framework 2无法呈现模板解析器无法解析为文件

时间:2013-07-09 10:54:59

标签: templates zend-framework render resolver

我正在学习如何使用Zend Framework2。根据网上提供的一些教程,我写了一些代码。对我来说最重要的教程就是这个:https://github.com/psamatt/zf2-doctrine-example它涵盖了我计划写的大部分基础知识。我坚持一个看起来很奇怪的问题。在我的摘要页面上,显示来自DB的所有记录我有一个链接来添加新记录,编辑现有记录和删除记​​录。路由由module.config.php:

涵盖
        'router' => array(
            'routes' => array(
                    'incident' => array(
                            'type'    => 'segment',
                            'options' => array(
                                    'route'    => '/incident[/][:action][/:id]',
                                    'constraints' => array(
                                            'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                            'id'     => '[0-9]+',
                                    ),
                                    'defaults' => array(
                                            'controller' => 'Helpdesk\Controller\Incident',
                                            'action'     => 'index',
                                    ),
                            ),
                    ),
            ),
    ),

当我使用指向新记录的链接时(h.t.t.p:// helpdesk / incident / add),一切正常。但是当我使用链接编辑我的记录时(h.t.t.p:// helpdesk / incident / edit / 1 - 其中1是示例记录ID)我收到错误:

Zend\View\Renderer\PhpRenderer::render: Unable to render template "helpdesk/incident/edit"; resolver could not resolve to a file

这是我的IncidentController.php:

<?php
namespace Helpdesk\Controller;

use Application\Controller\EntityUsingController;
use DoctrineModule\Stdlib\Hydrator\DoctrineObject;
use Doctrine\ORM\EntityManager;
use Zend\View\Model\ViewModel;

use Helpdesk\Form\IncidentForm;
use Helpdesk\Entity\Incident;



class IncidentController extends EntityUsingController
{

/**
 * Index action
 * 
 */
public function indexAction()
{
    $em = $this->getEntityManager();

    $incidents = $em->getRepository('Helpdesk\Entity\Incident')->findAll();

    return new ViewModel(array(
            'incidents' => $incidents 
    ));
}


/**
 * Edit action
 * 
 */
public function editAction()
{
    $incident = new Incident();
    if ($this->params('id') > 0) {
        $incident = $this->getEntityManager()->getRepository('Helpdesk\Entity\Incident')->find($this->params('id'));
    }

    $form = new IncidentForm($this->getEntityManager());
    $form->bind($incident);
    $form->setHydrator(new DoctrineObject($this->getEntityManager(),'Helpdesk\Entity\Incident'));

    $request = $this->getRequest();

    if ($request->isPost()) {
        $form->setInputFilter($incident->getInputFilter());
        $form->setData($request->getPost());
        if ($form->isValid()) {
            $em = $this->getEntityManager();
            $em->persist($incident);
            $em->flush();

            $this->flashMessenger()->addSuccessMessage('Incident saved');

            // Redirect to list of incidents
            return $this->redirect()->toRoute('incident');
        }
    }

    return array(
            'incident' => $incident,
            'form' => $form,
    );
}


/**
 * Add action
 * 
 */
public function addAction()
{
    return $this->editAction();
}


/**
 * Delete action
 * 
 */
public function deleteAction()
{
    $id = (int)$this->getEvent()->getRouteMatch()->getParam('id');
    if (!$id) {
        return $this->redirect()->toRoute('incident');
    }

    $request = $this->getRequest();
    if ($request->isPost()) {
        $del = $request->post()->get('del', 'No');
        if ($del == 'Yes') {
            $id = (int)$request->post()->get('id');
            $incident = $this->getEntityManager()->find('Helpdesk\Entity\Incident', $id);
            if ($incident) {
                $this->getEntityManager()->remove($incident);
                $this->getEntityManager()->flush();
            }
        }

        // Redirect to list of incidents
        return $this->redirect()->toRoute('default', array(
                'controller' => 'incident',
                'action' => 'index',
        ));
    }

    return array(
            'id' => $id,
            'incident' => $this->getEntityManager()->find('Helpdesk\Entity\Incident', $id)->getArrayCopy()
    );
}
}

这两者有什么区别?为什么一个工作正常,而第二个产生错误?

感谢您的帮助

SMOK。

1 个答案:

答案 0 :(得分:1)

最有可能的helpdesk / incident / edit.phtml不存在,而add action正在呈现现有的helpdesk / incident / add.phtml。

您可以重复使用现有的helpdesk / incident / add.phtml或创建一个新的。