Многоуровневый REST API на торт PHP - PullRequest
0 голосов
/ 22 января 2012

Я новичок в CakePHP. Я пользуюсь версией 2.0.5, если судить по рельсам по большому счету, довольно легко добиться цели.

В настоящее время я использую его для создания REST API для игры. Контроллер REST легко построить, но не может найти способ получить вложенные ресурсы.

Я имею в виду, что в рельсах чертовски легко получить нечто подобное: controller1 / id / controller2 / id.

Мне трудно найти способ сделать это в cakephp. Похоже, что метод mapresources не поддерживает многоуровневый API отдыха. Я не прав?

Как я могу сделать API многоуровневого отдыха в cakephp 2?

1 Ответ

2 голосов
/ 25 января 2012

Итак, мне удалось построить собственный генератор.

В зависимости от того, вы предоставляете массив ("parent_controller" => "child_controller").

Таким образом, вы можете сгенерировать дляsuperhero => superpowers

superheros / 1 / superpowers / (здесь с или без идентификаторов в соответствии с вашими маршрутами.

Аргументы сопоставлены с аргументами метода, так что индекс функции ($ superhero_id)

function generateNestedResources($array)
    {

        foreach($array as $key=>$value)
        {
            //Index -GET /
             Router::connect('/'.$key.'/:'.$key.'_id/'.$value,
                array('controller' => $value,'action' => 'index','method' => 'GET'),
                array( $key.'_id' => '[0-9]+','pass' => array($key.'_id')));
            // View -GET /id
            Router::connect('/'.$key.'/:'.$key.'_id/'.$value.'/:id',
                array('controller' => $value,'action' => 'view','method' => 'GET'),
                array('id' => '[0-9]+', $key.'_id' => '[0-9]+','pass' => array($key.'_id','id')));

            //add -POST/
             Router::connect('/'.$key.'/:'.$key.'_id/'.$value,
                array('controller' => $value,'action' => 'add','method' => 'POST'),
                array( $key.'_id' => '[0-9]+','pass' => array($key.'_id')));
            //edit -PUT/ID
             Router::connect('/'.$key.'/:'.$key.'_id/'.$value.'/:id',
                array('controller' => $value,'action' => 'edit','method' => 'PUT'),
                array('id' => '[0-9]+', $key.'_id' => '[0-9]+','pass' => array($key.'_id','id')));

            //delete -DELEte /ID
             Router::connect('/'.$key.'/:'.$key.'_id/'.$value.'/:id',
                array('controller' => $value,'action' => 'delete','method' => 'DELETE'),
                array('id' => '[0-9]+', $key.'_id' => '[0-9]+','pass' => array($key.'_id','id')));

        }

    }
...