繁体   English   中英

Phalcon:为什么不调用路由器的路由?

[英]Phalcon: why router's routes are not being called?

我有以下index.php:

<?php

use Phalcon\Loader;
use Phalcon\Mvc\View;
use Phalcon\DI\FactoryDefault;
use Phalcon\Mvc\Url as UrlProvider;
use Phalcon\Db\Adapter\Pdo\Mysql as DbAdapter;
use Phalcon\Mvc\Micro;

try {
    // Register an autoloader
    $loader = new Loader();
    $loader->registerDirs(array(
        __DIR__ . '/controllers/',
        __DIR__ . '/models/'
    ))->register();

    // Create a DI
    $app = new Micro();
    $di = new FactoryDefault();

    $app->setDI($di);

    // Setup the view component
    $di->set('view', function () {
        $view = new View();
        $view->setViewsDir('/views/');
        return $view;
    });

    // Setup a base URI so that all generated URIs include the "legacy" folder
    $di->set('url', function () {
        $url = new UrlProvider();
        $url->setBaseUri('/legacy/api/v1/');
        return $url;
    });

    $di->set('router', function() {
//        require __DIR__.'/config/routes.php';        
//        return $router;

        $router = new Phalcon\Mvc\Router(false);

        $router->add('/', array(
            "controller" => "site",
            "action" => "index"
        ));

        $router->notFound(
                [
                    "controller" => "site",
                    "action" => "ping"
                ]
        );
        var_dump($router);

        return $router;
    });

    $app->handle();
} catch (\Exception $e) {
    // Do Something I guess, return Server Error message
    $app->response->setStatusCode(500, "Server Error");
    $app->response->setContent($e->getMessage());
    $app->response->send();
}

以及以下结构:--api

---- v1

------配置

-------- routes.php

------控制器

-------- SiteController.php

- - - 楷模

------意见

问题是我认为我的应用程序忽略了路由器,因为出现以下错误:如果导航到“ /”,则- Matched route doesn't have an associated handler 而如果我转到“ / 12321”之类的随机位置,则会返回Not-Found handler is not callable or is not defined

知道我在做什么错吗?

请记住,您将其设置为基本uri /legacy/api/v1/因此所有路由都将附加到该地址。

 $di->set('url', function () {
     $url = new UrlProvider();
     $url->setBaseUri('/legacy/api/v1/');
     return $url;
 });

您不能简单地访问: /而是访问/legacy/api/v1 /或者如果要访问/user ,则必须访问/legacy/api/v1 /user

问候!

我也对phalcon(1.3.x)路由有一些问题。 这是我让他们按照自己想要的方式工作的方法。 花了我很长时间才弄清楚:

/** @var \Phalcon\Mvc\Router $router */
$router = new Phalcon\Mvc\Router(FALSE); // does not create default routes
$router->removeExtraSlashes(TRUE);

$router->setDefaults(array(
    'namespace' => 'Namespace\Controller',
    'controller' => 'index',
    'action' => 'index'
));

$router->notFound(array(
    'controller' => 'index',
    'action' => 'show404'
));

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM