Я только начал разработку в PHP-фреймворке Phalcon, и я в целом довольно новичок в PHP. У меня вопрос о том, как создать запрос с маршрутом, что, как я считаю, я сделал, и передать параметры маршрута в действие контроллера, которое связано с указанным маршрутом. Ниже я включил три файла, над которыми я работал, и суммирую, что каждый должен делать. У меня также есть конечный результат и где моя проблема лежит непосредственно.
Первый файл — это файл index.php, который принимает все запросы на маршрут для моего сайта.
<?php
//Include all routes on site
foreach (glob("../app/routes/*.php") as $filename)
{
include $filename;
}
foreach (glob("../app/controllers/*.php") as $filename)
{
include $filename;
}
//Create routes and initialize routes
$router = new \Phalcon\Mvc\Router();
$router->mount(new PublicRoutes());
$router->mount(new ApiRoutes());
$router->mount(new AdminRoutes());
$router->handle();
$controller = $router->getControllerName();
$action = $router->getActionName();
$params = $router->getParams();
$di = new \Phalcon\DI\FactoryDefault();
$d = new Phalcon\Mvc\Dispatcher();
$d->setDI($di);
$d->setControllerName($router->getControllerName());
$d->setActionName($router->getActionName());
$d->setParams($router->getParams());
$controller = $d->dispatch();
Второй файл — это фактические маршруты, смонтированные для моего вызова API, с которым я тестирую все.
<?php
class ApiRoutes extends Phalcon\Mvc\Router\Group
{
public function initialize()
{
//Basic api route for pixelpusher
$this->add(
"/addhawk/api/:action/:model/:params",
array(
"controller" => "api",
"action" => 1,
"model" => 2,
"params" => 3,
)
);
}
}
Третий и последний файл — это класс контроллера для API с единственным действием, которое я сейчас тестирую.
<?php
class ApiController extends \Phalcon\Mvc\Controller
{
public function handlerAction()
{
//Pull in parameters
echo "<h1>API Handler Entered</h1>";
$model = $this->dispatcher->getParam("model");
echo $model;
//Choose correct api based off of api param
if( $model == "grid" ) {
echo 'grid';
}
else if ( $model == "admin" ) {
echo 'admin';
}
else {
//No valid api must have been found for request
}
//Return result from api call
return true;
}
}
Таким образом, URL является «localhost / addhawk / api / handler / grate / view», что приводит к следующему выводу в html-формате строки 9 в ApiController.
Из переменной $ model нет распечатки, как это должно быть. Там также нет ошибки, поэтому я понятия не имею, почему это не печать. В соответствии с документацией и каждым ресурсом, который я прочитал в Интернете, все параметры должны быть доступны непосредственно из каждого действия контроллера благодаря диспетчеру и классу $ di или чему-то подобному. Итак, мой вопрос: почему я не могу получить доступ к параметрам, если кажется, что все должно быть в состоянии?
Задача ещё не решена.
Других решений пока нет …