У меня есть следующий 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'
));
Надеюсь, поможет.