Phalcon: почему не маршрутизируются маршруты роутера?

У меня есть следующий 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,

Есть идеи, что я делаю не так?

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,

Привет!

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'
));

Надеюсь, поможет.

0

По вопросам рекламы [email protected]