Hice una aplicación MVC de Zend Framework 3. No quiero un enrutador predeterminado. Mi único controlador RESTFUL y solo devuelve JSON. Quiero eliminar el IndexController predeterminado. Quiero / solo dar un error 404. Prefiero no llamar a ninguna ruta 'hogar', pero lo haré si es necesario.

Si hago que mi configuración de ruta se vea así:

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

Recibo la siguiente excepción cuando me conecto a una ruta que funcionó cuando mantuve el controlador de índice predeterminado en mi navegador:

Error fatal: Zend \ Router \ Exception \ RuntimeException no detectado: la ruta con el nombre "home" no se encuentra en /var/www/vendor/zendframework/zend-router/src/Http/TreeRouteStack.php en la línea 354

Si cambio 'myRoute' => [ a 'home' => [, muestra el diseño predeterminado en lugar del Json representado por JsonViewModel.

1
Justin Dearing 6 mar. 2017 a las 16:18

2 respuestas

La mejor respuesta

Acabo de poner un controlador de índice con una ruta predeterminada que representa la página 404 predeterminada por ahora. Voy a hacer que devuelva JSON en algún momento cuando descubra cómo.

class IndexController extends AbstractRestfulController
{
    public function indexAction()
    {
        $this->response->setStatusCode(Response::STATUS_CODE_404);
    }
}
0
Justin Dearing 6 mar. 2017 a las 14:04

No estoy seguro de si esto es lo que busca, pero para devolver una respuesta json del uso de su controlador.

En la configuración de tu módulo:

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

Y en tu controlador:

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

Esto devolverá una respuesta json.

Espero que esto ayude.

0
Garry 16 jun. 2018 a las 05:51