制作没有默认路由器的ZF3应用程序的最佳方法是什么?

时间:2017-03-06 13:18:14

标签: zend-framework-mvc zend-framework3

我制作了一个Zend Framework 3 MVC应用程序。我不想要默认路由器。我的一个控制器RESTFUL,只返回JSON。我想删除默认的IndexController。我想/只是给出404错误。我不想把任何路线称为“回家”,但如有必要,我会这样做。

如果我的路线配置如下:

'router' => [
    'routes' => [
        'myRoute' => [
            'type'    => Segment::class,
            'options' => [
                'route'    => '/myThing[/:action]',
                'defaults' => [
                    'controller' => Controller\MyThingController::class,
                    'action'     => 'index',
                ],
            ],
        ],
    ],
],

当我连接到在浏览器中保留默认索引控制器时有效的路由时,我收到以下异常:

  

致命错误:未捕获的Zend \ Router \ Exception \ RuntimeException:在第354行的/var/www/vendor/zendframework/zend-router/src/Http/TreeRouteStack.php中找不到名为“home”的路由

如果我将'myRoute' => [更改为'home' => [它将呈现默认布局,而不是JsonViewModel呈现的Json。

2 个答案:

答案 0 :(得分:0)

我刚刚为IndexController添加了一个默认路由,现在呈现defautl 404页面。我想知道如何在某些时候让它返回JSON。

class IndexController extends AbstractRestfulController
{
    public function indexAction()
    {
        $this->response->setStatusCode(Response::STATUS_CODE_404);
    }
}

答案 1 :(得分:0)

我不确定这是不是你的用途,而是从你的控制器使用中返回一个json响应。

在你的模块配置中:

'view_manager' => array(
    'strategies' => array(
       'ViewJsonStrategy',
    ),
},

并在您的控制器中:

use Zend\View\Model\JsonModel;
// ...
public function indexAction()
{
    $this->response->setStatusCode(Response::STATUS_CODE_404);
    $view = new JsonModel();
    $view->jsonVariable = 'someValue';
    return $view;
}

这将返回一个json响应。

希望这有帮助。