gpt4 book ai didi

routes - Phalcon Micro 应用程序无法使用查询字符串正确路由

转载 作者:行者123 更新时间:2023-12-02 15:19:41 29 4
gpt4 key购买 nike

我正在尝试使用 Phalcon 中的 Micro 应用程序开发 RESTful API。现在我正在使用 PHP 的 Facebook SDK 进行社交登录,但我发现当 Facebook 将我重定向到我的回调时(显然里面有一个查询字符串),路由器找不到任何处理程序方法。

GET: http://localhost:8000/api/v1/register/facebook/callback?code=...&state=...#_=_

Not-Found handler is not callable or is not defined
#0 /home/adrian/PhpstormProjects/myproject/index.php(39): Phalcon\Mvc\Micro->handle()
#1 {main}

我的所有其他路线都工作正常,但这是我第一次面对查询字符串,所以我不知道我是否做错了什么。

我使用Micro Collections进行路由,并使用PHP内置服务器

这是我的.htrouter.php。当我抑制来自 $_SERVER['REQUEST_URI'] 的查询字符串时,路由正常工作,但 Facebook SDK 失败,因为它需要参数。我尝试查找 Phalcon 是否将 URL 和查询字符串保存在不同的 $_GET 变量中,但我认为情况并非如此。

<?php
if (!file_exists(__DIR__ . '/' . $_SERVER['REQUEST_URI'])) {
$_GET['_url'] = $_SERVER['REQUEST_URI'];
}
return false;

我的micro-collection.php

<?php

use \Phalcon\Mvc\Micro\Collection as MicroCollection;

$register = new MicroCollection();
$register->setHandler('App\Controllers\V1\RegisterController', true);
$register->setPrefix('/api/v1/register');
$register->get('/facebook', 'getAuthFacebook');
$register->get('/facebook/callback', 'facebookCallback');

return $register;

这是我的RegisterController.php

<?php

namespace App\Controllers\V1;

use App\Controllers\ControllerBase;
use Phalcon\Http\Response;

class RegisterController extends ControllerBase
{
public function getAuthFacebook()
{
$helper = $this->facebook->getRedirectLoginHelper();
$permissions = ['email', 'user_likes'];
$loginUrl = $helper->getLoginUrl('http://localhost:8000/api/v1/register/facebook/callback', $permissions);

return new Response($loginUrl);
}

public function facebookCallback()
{
....
}
}

我的 index.phpphalcon-devtools 为新项目生成的完全相同,只是我挂载了我的微集合,所以我认为问题不存在。

提前谢谢您!

最佳答案

最后,经过论坛的大量研究,我找到了解决方案。我必须将其添加到我的 index.php 中:

就在之后:

$app = new \Phalcon\Mvc\Micro($di);

这个:

$app->getRouter()->setUriSource(\Phalcon\Mvc\Router::URI_SOURCE_SERVER_REQUEST_URI);

Source

我不知道它为什么有效,因为作为 documentation说,它改变了路由器的行为,以便使用 $_SERVER['REQUEST_URI'] 而不是 $_GET['_url'] 但这实际上就是 .htrouter .php 确实(或者至少尝试这样做)。

无论如何,由于我对 Phalcon 的经验不是很丰富,所以很可能我误解了一些东西。希望对您有所帮助。

关于routes - Phalcon Micro 应用程序无法使用查询字符串正确路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34257310/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com