刚开始在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 class或类似的东西。所以我的问题是,为什么我不能访问参数,如果一切似乎都在说我应该能够?