1

刚刚开始在 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 输出。

API 调用的输出

$model 变量没有像它应该做的那样打印出来。也没有错误,所以我不知道为什么它不打印。根据我在网上阅读的文档和每个资源,由于调度程序和 $di 类或类似的东西,所有参数都应该可以直接从每个控制器操作中获得。所以我的问题是,如果一切似乎都在说我应该能够访问,为什么我不能访问参数?

4

0 回答 0