Phalcon PHP:有没有办法自动资源路由没有注释?

时间:2014-08-29 01:18:59

标签: php routing phalcon

我想用Phalcon PHP进行资源路由 - 但是我想这样做而不必指定所有这些注释。有没有办法设置它,所以它更自动一点?您知道吗,比如为特定路径类型定义默认操作?

如:

GET / resources =>的listAction

POST / resource => createAction

2 个答案:

答案 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...来查找发送的请求类型。