我想用Phalcon PHP进行资源路由 - 但是我想这样做而不必指定所有这些注释。有没有办法设置它,所以它更自动一点?您知道吗,比如为特定路径类型定义默认操作?
如:
GET / resources =>的listAction
POST / resource => createAction
等
答案 0 :(得分:1)
您可以通过多种方式配置路由documentation covers them extensively。您可以设置如下所示的通用路由,这通常在配置中完成。这也是默认路由,无需配置即可使用(除了方法之外)。
// Create the router
$router = new \Phalcon\Mvc\Router();
//Define a route
$router->add(
"/:controller/:action/:params",
array(
"controller" => 1,
"action" => 2,
"params" => 3,
)
)->via(array("POST", "GET"));
您还可以扩展覆盖handle
方法的默认路由器,并指定其中的所有逻辑。在这两种情况下,必须将配置的路由器注入DI。
答案 1 :(得分:1)
您可以指定http-method-types应调用哪个控制器/操作,如文档描述。
// This route only will be matched if the HTTP method is GET
$router->addGet("/products/edit/{id}", "Products::edit");
// This route only will be matched if the HTTP method is POST
$router->addPost("/products/save", "Products::save");
// This route will be matched if the HTTP method is POST or PUT
$router->add("/products/update")->via(array("POST", "PUT"));
除此之外,还有一种方法可以通过Phalcon \ Events \ Manager处理调度程序服务中无法识别的控制器和操作,如下所示。
// config/services.php
use Phalcon\Events\Manager as EventsManager;
//...
/**
* Dispatcher use a default namespace
*/
$di->set("dispatcher", function () {
// catch dispatcher exceptions for HANDLER_NOT_FOUND and ACTION_NOT_FOUND
// @see http://docs.phalconphp.com/en/latest/api/Phalcon_Mvc_Dispatcher.html
// @see http://forum.phalconphp.com/discussion/525/404-and-notfoundaction#C2179
$evManager = new EventsManager();
$evManager->attach("dispatch:beforeException", function ($event, $dispatcher, $exception) {
switch ($exception->getCode()) {
case Dispatcher::EXCEPTION_HANDLER_NOT_FOUND:
case Dispatcher::EXCEPTION_ACTION_NOT_FOUND:
$dispatcher->forward(array(
'controller' => 'index',
'action' => 'show404',
));
return false;
}
});
$dispatcher = new Dispatcher();
$dispatcher->setDefaultNamespace("YourCustomNamespace\\Controllers");
$dispatcher->setEventsManager($evManager);
return $dispatcher;
});
这意味着您可以使用Phalcon \ Mvc \ Router的默认行为,定义自定义路由,并为Phalcon \ Mvc \ Router :: notFound()无法处理的默认行为无法处理的路由做好准备
编辑/附加信息:您可以使用控制器内的php $this->request->isPut()//isDelete and so on...
来查找发送的请求类型。