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

时间:2015-12-15 22:51:02

标签: php phalcon phalcon-routing

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

------模型

------观点

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

知道我做错了吗?

2 个答案:

答案 0 :(得分:0)

请记住,您已将其设置为基本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访问W/BroadcastQueue( 562): Failure sending broadcast Intent { act=com.tenforwardconsulting.cordova.bgloc.STATIONARY_REGION_ACTION flg=0x10 (has extras) } W/BroadcastQueue( 562): android.os.DeadObjectException W/BroadcastQueue( 562): at android.os.BinderProxy.transactNative(Native Method) W/BroadcastQueue( 562): at android.os.BinderProxy.transact(Binder.java:496) W/BroadcastQueue( 562): at android.app.ApplicationThreadProxy.scheduleRegisteredReceiver(ApplicationThreadNative.java:1093) W/BroadcastQueue( 562): at com.android.server.am.BroadcastQueue.performReceiveLocked(BroadcastQueue.java:431) W/BroadcastQueue( 562): at com.android.server.am.BroadcastQueue.deliverToRegisteredReceiverLocked(BroadcastQueue.java:521) W/BroadcastQueue( 562): at com.android.server.am.BroadcastQueue.processNextBroadcast(BroadcastQueue.java:729) W/BroadcastQueue( 562): at com.android.server.am.BroadcastQueue$BroadcastHandler.handleMessage(BroadcastQueue.java:149) W/BroadcastQueue( 562): at android.os.Handler.dispatchMessage(Handler.java:102) W/BroadcastQueue( 562): at android.os.Looper.loop(Looper.java:135) W/BroadcastQueue( 562): at android.os.HandlerThread.run(HandlerThread.java:61) W/BroadcastQueue( 562): at com.android.server.ServiceThread.run(ServiceThread.java:46) W/ActivityManager( 562): Scheduling restart of crashed service com.xpressgo.courier.cordova/com.tenforwardconsulting.cordova.bgloc.DistanceFilterLocationService in 82050ms W/ActivityManager( 562): Scheduling restart of crashed service com.xpressgo.courier.cordova/com.tenforwardconsulting.cordova.bgloc.FusedLocationService in 97188832ms

问候!

答案 1 :(得分: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'
));

希望它有所帮助。

相关问题