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

What's the best way to make a ZF3 application with no default router?

我制作了一个 Zend Framework 3 MVC 应用程序。我不想要默认路由器。我的一个控制器 RESTFUL 只返回 JSON。我想删除默认的 IndexController。我想 / 只给出 404 错误。我不想调用任何路由 'home',但如有必要会调用。

如果我的路由配置如下所示:

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

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

Fatal error: Uncaught Zend\Router\Exception\RuntimeException: Route with name "home" not found in /var/www/vendor/zendframework/zend-router/src/Http/TreeRouteStack.php on line 354

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

我只是放置了一个带有默认路由的索引控制器,该路由暂时呈现默认的 404 页面。当我弄清楚怎么做时,我会在某个时候做到 return JSON。

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

我不确定这是否是您想要的,但是 return 来自您的控制器使用的 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;
}

这将 return 一个 json 响应。

希望对您有所帮助。