我有以下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
。
知道我做错了吗?
答案 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'
));
希望它有所帮助。