Routing zf2奇怪的路由问题
我正在开发一个zf2应用程序,在路由方面遇到了一些问题 我有一个控制器和15个视图。他们中的大多数工作正常,而另一半,我得到以下例外: 执行过程中发生错误;请稍后再试 其他信息: Zend\Mvc\Router\Exception\RuntimeException 文件: /用户//Sites/zend/vendor/zendframework/zendframework/library/zend/Mvc/Router/Http/TreeRouteStack.php:313 信息: 未找到名为“categories”的路由 以下是控制器类:Routing zf2奇怪的路由问题,routing,zend-framework2,Routing,Zend Framework2,我正在开发一个zf2应用程序,在路由方面遇到了一些问题 我有一个控制器和15个视图。他们中的大多数工作正常,而另一半,我得到以下例外: 执行过程中发生错误;请稍后再试 其他信息: Zend\Mvc\Router\Exception\RuntimeException 文件: /用户//Sites/zend/vendor/zendframework/zendframework/library/zend/Mvc/Router/Http/TreeRouteStack.php:313 信息: 未找到名为“
namespace Stock\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\Json\Json;
use Application\Model\Application;
class StockController extends AbstractActionController
{
private $apiRoutes = array(
'categories' => 'catalog/category',
'certificates' => 'catalog/certificate',
'constructions' => 'catalog/construction',
'colours' => 'catalog/color',
'departments' => 'catalog/department',
'designers' => 'catalog/designer',
'designs' => 'catalog/design',
'discounts' => 'sales/discount',
'locations' => 'catalog/location',
'materials' => 'catalog/material',
'patterns' => 'catalog/pattern',
'products' => 'catalog/product',
'ranges' => 'catalog/range',
'shapes' => 'catalog/shape',
'suppliers' => 'catalog/supplier'
);
public function indexAction()
{
$model = $this->params()->fromRoute('view') ? $this->params()->fromRoute('view') : 'index';
$form = null;
$dataObj = null;
$itemId = null;
$modelForm = 'Stock\Form\\' . ucfirst($model) . 'Form';
if(class_exists($modelForm)){
$form = new $modelForm();
$API = new Application();
$itemId = $this->params()->fromRoute('id') ? $this->params()->fromRoute('id') : null;
$dataObj = $API->get($this->apiRoutes[$model]);
if($dataObj){
foreach($dataObj as $data){
$vars = get_object_vars($data);
if($data->{key($vars)} == $itemId){
$form->setData($vars);
}
}
}
$formControllerResponse = $this->validate($form);
//if response is an object, it contains form errors, so pass client-side for JS to handle.
if($formControllerResponse->valid){
//update magento...
$data = $form->getData();
$API->put($this->apiRoutes[$model], $data);
}
if(isset($formControllerResponse->response)) return $formControllerResponse->response;
}
$view = new ViewModel(array('form' => $form, 'dataObj' => $dataObj, 'itemId' => $itemId));
$view->setTemplate("stock/stock/$model");
return $view;
}
public function validate($form)
{
$filterClass = get_class($form) . 'Filter';
$request = $this->getRequest();
$response = $this->getResponse();
$return = new \stdClass();
$return->valid = false;
$message = array('errors' => false);
if($request->isXmlHttpRequest() && $request->isPost()){
$form->setInputFilter(new $filterClass());
$form->setData($request->getPost());
if(!$form->isValid()){
$errors = $form->getMessages();
foreach($errors as $key => $error){
$message['errors'][$key] = implode($error, '; ');
}
}
else {
$return->valid = true;
}
$response->setContent(Json::encode($message));
$return->response = $response;
}
if($request->isPost()){
$form->setInputFilter(new $filterClass());
$form->setData($request->getPost());
if($form->isValid()){
$return->valid = true;
}
}
return $return;
}
}
下面是module.config.php
文件:
return array(
'controllers' => array(
'invokables' => array(
'Stock\Controller\Stock' => 'Stock\Controller\StockController',
'Stock\Controller\Media' => 'Stock\Controller\MediaController',
),
),
'router' => array(
'routes' => array(
'stock' => array(
'type' => 'segment',
'options' => array(
'route' => '/stock[/][/:view][/:id]',
'constraints' => array(
'view' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Stock\Controller\Stock',
'action' => 'index',
),
),
),
'media' => array(
'type' => 'segment',
'options' => array(
'route' => '/stock/media[/]',
'constraints' => array(
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Stock\Controller\Media',
'action' => 'index',
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'stock' => __DIR__ . '/../view',
),
),
);
因此,我对以下观点有异议:
- 类别李>
- 证书李>
- 颜色李>
- 设计李>
- 折扣李>
- 地点李>
$model
变量,它将打印位置
有人能解释一下吗
非常感谢。您需要为出错的页面定义路由,例如,我将为类别创建1作为示例(您可以根据自己的情况修改它)
'categories' => array(
'type' => 'segment',
'options' => array(
'route' => '/stock/categories[/]',
'constraints' => array(
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Stock\Controller\Categories',\\ assuming you need a controller for categories else you have to change below line for its action
'action' => 'index',
),
),
),