刚刚开始在 Phalcon PHP 框架中进行开发,而且对 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”,这会导致在 ApiController 中的第 9 行提供以下 html 输出。
$model 变量没有像它应该做的那样打印出来。也没有错误,所以我不知道为什么它不打印。根据我在网上阅读的文档和每个资源,由于调度程序和 $di 类或类似的东西,所有参数都应该可以直接从每个控制器操作中获得。所以我的问题是,如果一切似乎都在说我应该能够访问,为什么我不能访问参数?