0

我有以下 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

------配置

-------- 路由.php

------控制器

--------站点控制器.php

- - - 楷模

------观看次数

问题是我认为我的应用程序忽略了路由器,因为我收到以下错误:如果我导航到 "/" - Matched route doesn't have an associated handler。如果我去一些随机位置,比如“/12321”,它会返回Not-Found handler is not callable or is not defined.

知道我做错了什么吗?

4

2 回答 2

0

请记住,您设置为基本 uri /legacy/api/v1/,因此您的所有路由都打算附加到该 uri。

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

你不能简单地访问:/而是,你必须访问,或者如果你想访问,你必须访问。/legacy/api/v1//user/legacy/api/v1/user

问候!

于 2015-12-19T16:03:47.513 回答
0

我也遇到了 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'
));

希望能帮助到你。

于 2016-01-24T22:22:19.447 回答