Я нахожусь в процессе настройки веб-сайта с использованием Zend Framework, где его можно либо назвать API, либо использовать в надлежащей настройке MVC для создания веб-сайта на нем.
Я установил Zend_rest_route, который проверяет URI и определяет, какой маршрут использовать.
Для вызова API мы используем:
http://api.domain.com/controller/action/id/1
и для веб-сайта, который мы называем
http://domain.com/controller/action/id/1
Идея состоит в том, что вам нужно создать только один контроллер, содержащий все действия, которые можно использовать для веб-сайта и API, что сводит к минимуму необходимость переписывать код.
Я создал базовый контроллер, который расширяетZend_Rest_Controller, который затем расширяется всеми контроллерами для того, чтобы получить основную силу API.
Проблема, с которой я сталкиваюсь, заключается в том, что когда я вызываю контроллер / действие с использованием API, действие нене вызывается.
Когда я var_dump объекта запроса, я получаю следующее:
Website - http://domain.com/guestbook/test/id/5 :
...
["_params":protected]=>
array(4) {
["controller"]=>
string(9) "guestbook"
["action"]=>
string(4) "test"
["id"]=>
string(1) "5"
["module"]=>
string(7) "default"
}
...
-
API - http://api.domain.com/guestbook/test/id/5 :
...
["_params":protected]=>
array(4) {
["controller"]=>
string(9) "guestbook"
["action"]=>
string(3) "get"
["test"]=>
string(2) "id"
["module"]=>
string(7) "default"
}
...
Веб-сайт вызывает правильное действие "test", но тAPI вызывает действие «get», а затем «test» становится первым параметром.
Как мне заставить его вызвать правильное действие?
PHP CODE TO FOLLOW:
Маршрутизатор в Bootlstrap:
$this->bootstrap('frontController');
$frontController = Zend_Controller_Front::getInstance();
$restRoute = new Zend_Rest_Route($frontController);
$frontController->getRouter()->addRoute('default', $restRoute);
Базовый контроллер:
abstract class My_Controller_Base extends Zend_Rest_Controller
{
public function getAction()
{
$this->getResponse()
->setHttpResponseCode(200);
}
public function postAction()
{
$this->getResponse()
->setHttpResponseCode(201);
}
public function putAction()
{
$this->getResponse()
->setHttpResponseCode(200);
}
public function deleteAction()
{
$this->getResponse()
->setHttpResponseCode(204);
}
}
* 1033И, наконец, мой Контроллер Гостевой Книги:
class GuestbookController extends My_Controller_Base
{
private $mapper;
private $model;
public function init()
{
$this->mapper = new Application_Model_GuestbookMapper();
$this->model = new Application_Model_Guestbook();
}
public function indexAction()
{
$this->view->entries = $this->mapper->fetchAll();
}
public function testAction()
{
$test = new Application_Model_Guestbook();
$id = $this->getRequest()->getParam('id', 1);
$this->view->entries = $this->mapper->find($id,$test);
var_dump($this->view->entries);
$this->_helper->viewRenderer->setNoRender(true);
}
}