У меня есть пример контроллера rest, который я пытаюсь запустить, что дает мне головную боль.zend frame rest controller question
Мой URL им пытаются получить доступ в локальный/книги/редактировать/1
По какой-то странной причине этот маршрут кажется назвать getAction с контроллером вместо editAction. И он вызывает ошибки, говорящие, что объект не существует.
Контроллер,
class BooksController extends Zend_Rest_Controller {
private $_booksTable;
private $_form;
public function init() {
$bootstrap = $this->getInvokeArg ('bootstrap');
$db = $bootstrap->getResource ('db');
$options = $bootstrap->getOption ('resources');
$dbFile = $options ['db'] ['params'] ['dbname'];
if (! file_exists ($dbFile)) {
$createTable = "CREATE TABLE IF NOT EXISTS books (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
name VARCHAR(32) NOT NULL,
price DECIMAL(5,2) NOT NULL
)";
$db->query ($createTable);
$insert1 = "INSERT INTO books (name, price) VALUES ('jQuery in Action', 39.99)";
$insert2 = "INSERT INTO books (name, price) VALUES ('PHP in Action', 45.99)";
$db->query ($insert1);
$db->query ($insert2);
}
$this->_booksTable = new Zend_Db_Table ('books');
$this->_form = new Default_Form_Book();
}
/**
* The index action handles index/list requests; it should respond with a
* list of the requested resources.
*/
public function indexAction() {
$this->view->books = $this->_booksTable->fetchAll();
}
/**
* The list action is the default for the rest controller
* Forward to index
*/
public function listAction() {
$this->_forward ('index');
}
/**
* The get action handles GET requests and receives an 'id' parameter; it
* should respond with the server resource state of the resource identified
* by the 'id' value.
*/
public function getAction() {
$this->view->book = $this->_booksTable->find ($this->_getParam ('id'))->current();
}
/**
* Show the new book form
*/
public function newAction() {
$this->view->form = $this->_form;
}
/**
* The post action handles POST requests; it should accept and digest a
* POSTed resource representation and persist the resource state.
*/
public function postAction() {
if ($this->_form->isValid ($this->_request->getParams())) {
$this->_booksTable->createRow ($this->_form->getValues())->save();
$this->_redirect ('books');
} else {
$this->view->form = $this->_form;
$this->render ('new');
}
}
/**
* Show the edit book form. Url format: /books/edit/2
*/
public function editAction() {
var_dump ($this->getRequest()->getParam ('edit'));
$book = $this->_booksTable->find ($this->getRequest()->getParam ('id'))->current();
var_dump ($book->toArray());
$this->_form->populate ($book->toArray());
$this->view->form = $this->_form;
$this->view->book = $book;
}
/**
* The put action handles PUT requests and receives an 'id' parameter; it
* should update the server resource state of the resource identified by
* the 'id' value.
*/
public function putAction() {
$book = $this->_booksTable->find ($this->_getParam ('id'))->current();
if ($this->_form->isValid ($this->_request->getParams())) {
$book->setFromArray ($this->_form->getValues())->save();
$this->_redirect ('books');
} else {
$this->view->book = $book;
$this->view->form = $this->_form;
$this->render ('edit');
}
}
/**
* The delete action handles DELETE requests and receives an 'id'
* parameter; it should update the server resource state of the resource
* identified by the 'id' value.
*/
public function deleteAction() {
$book = $this->_booksTable->find ($this->_getParam ('id'))->current();
$book->delete();
$this->_redirect ('books');
}
}
Бутстраповское есть
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
protected function _initAutoload() {
$autoloader = new Zend_Application_Module_Autoloader (array (
'namespace' => 'Default_',
'basePath' => dirname (__FILE__)
));
return $autoloader;
}
protected function _initRestRoute() {
$this->bootstrap ('Request');
$front = $this->getResource ('FrontController');
$restRoute = new Zend_Rest_Route ($front, array(), array (
'default' => array ('books')
));
$front->getRouter()->addRoute ('rest', $restRoute);
}
protected function _initRequest() {
$this->bootstrap ('FrontController');
$front = $this->getResource ('FrontController');
$request = $front->getRequest();
if (null === $front->getRequest()) {
$request = new Zend_Controller_Request_Http();
$front->setRequest ($request);
}
return $request;
}
}
Может кто-нибудь увидеть, что может быть причиной getAction называться при просмотре этой ссылке ???
Это где я получил мой пример из, http://avnetlabs.com/zend-framework/restful-controllers-with-zend-framework – nixgadgets
Если вы не можете это сделать, то как я могу использовать пользовательские маршруты? – nixgadgets
После углубления, есть специальная обработка для «нового» и «редактирования» в Zend/Rest/Route.php –