Ответы пользователя по тегу Zend Framework
  • REST API для сущности не из коллекции?

    @snow_wons
    Для этого нужно использовать не REST, а RPC сервис.

    Если делать через HAL, то вот так:
    Api\src\V1\Rpc\Version\VersionController.php
    namespace Api\V1\Rpc\Version;
    
    use Zend\Mvc\Controller\AbstractActionController;
    use ZF\ContentNegotiation\ViewModel;
    
    class VersionController extends AbstractActionController
    {
        public function versionAction()
        {
            $hal = $this->getPluginManager()->get('hal');
            
            $o = $hal->createEntityFromMetadata(
                new Entity(), 
                $hal->getMetadataMap()->get('Api\\V1\\Rpc\\Version\\Entity')
            );
                    
            return new ViewModel(array(
                'payload' => $o
            ));
        }
    }

    Api\src\V1\Rpc\Version\Entity.php
    namespace Api\V1\Rpc\Version;
    
    class Entity
    {
        public $version = 1;
    }

    И в конфиге модуля
    'zf-hal' => array(
            'metadata_map' => array(
                'Api\\V1\\Rpc\\Version\\Entity' => array(
                    'route_name' => 'api.rpc.version',
                    'entity_identifier_name' => 'version',
                    'route_identifier_name' => 'version_id',
                    'hydrator' => 'Zend\\Stdlib\\Hydrator\\ObjectProperty',
                ),


    Если же HAL не нужен и достаточно простого ответа:
    Api\src\V1\Rpc\Version\VersionController.php
    namespace Api\V1\Rpc\Version;
    
    use Zend\Mvc\Controller\AbstractActionController;
    
    class VersionController extends AbstractActionController
    {
        public function versionAction()
        {
            return ['version'=>1];
        }
    }

    Entity и код в конфиге не нужен.

    Но если вдруг очень хочется использовать REST, то тоже есть способ.
    Api\src\V1\Rest\Version\VersionController.php
    namespace Api\V1\Rest\Version;
    
    use ZF\Rest;
    
    class VersionController extends Rest\RestController {
    
        protected function getIdentifier($routeMatch, $request)
        {
            return 'version';
        }
    
    }

    Api\src\V1\Rest\Version\Entity.php
    namespace Api\V1\Rest\Version;
    
    class Entity
    {
        public $version = 1;
    }

    Api\src\V1\Rest\Version\VersionResource.php
    namespace Api\V1\Rest\Version;
    
    use ZF\Rest\AbstractResourceListener;
    
    class VersionResource extends AbstractResourceListener
    {
        public function fetch($id)
        {
             return new Entity();
        }
    }
    Ответ написан
    1 комментарий