Конфигурация маршрута Zend Framework. AbstractRestfulController

Я смотрю на модуль Wall, который настроен:

return array(
 'router' => array(
 'routes' => array(
 'wall' => array(
 'type' => 'Zend\Mvc\Router\Http\Segment',
 'options' => array(
 'route' => '/api/wall[/:id]',
 'constraints' => array(
 'id' => '\w+'
 ),
 'defaults' => array(
 'controller' => 'Wall\Controller\Index'
 ),
 ),
 ),
 ),
 ),
 'controllers' => array(
 'invokables' => array(
 'Wall\Controller\Index' => 'Wall\Controller\IndexController',
 ),
 ),

Таким образом, члену "defaults" массива "router" задано значение Wall\Controller\Index. Итак, Wall\Controller\Index Я принимаю пространство имен, но я действительно не понимаю смысла, почему его набор таким образом. Контроллер определяется в IndexController.php:

<!--?php
namespace Wall\Controller;

use Zend\Mvc\Controller\AbstractRestfulController;
use Zend\View\Model\JsonModel;

class IndexController extends AbstractRestfulController
{
 protected $usersTable;

 public function get($username)
 {
 $usersTable = $this--->getUsersTable();
 $userData = $usersTable->getByUsername($username);
 $wallData = $userData->getArrayCopy();

 if ($userData !== false) {
 return new JsonModel($wallData);
 } else {
 throw new \Exception('User not found', 404);
 }
 }
}

Таким образом, единственный метод в контроллере, который принимает параметр, получается так, что я должен сказать, что это то, что вызывается при посещении /wall/tusername, но мне непонятно, как работает маршрут. Таким образом, значения по умолчанию для стены маршрута установлены на "Wall\Controller\Index", что это значит? Означает ли это что-либо, что "действие" не объявлено в "defaults"? Каково поведение, если "действие" не объявлено?

Благодарю вас за публикацию.

1 ответ

Для REST-full Application не будет определено никаких действий. Вы можете видеть, что он расширил AbstractRestfulController, а не AbstractActionController

RestfulController будет работать следующим образом:

When you call the URL with POST parameters then it will map to Create method, 
If you call with GET parameters it will map to GET or GETList method 
same as Delete->Delete and PUT -> Update

Таким образом, для этого маршрута приложения будет просто проверяться, какой контроллер необходимо активировать, а отображение функции будет выполняться вышеуказанным процессом.

Надеюсь, это поможет

licensed under cc by-sa 3.0 with attribution.