PhalconでMicroアプリを使用して RESTful API を開発しようとしています。現在、Facebook SDK for PHP を使用してソーシャル ログインで作業していますが、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}
他のすべてのルートは適切に機能しますが、クエリ文字列に直面するのはこれが初めてなので、何か間違っているかどうかはわかりません。
ルーティングと PHP組み込みサーバーにMicro Collectionsを使用しています。
これは私の.htrouter.php
です。ルートからのクエリ文字列を抑制すると正しく機能しますが、Facebook SDK はパラメーターを予期しているため失敗します。Phalcon が URL とクエリ文字列を異なる変数に保存するかどうかを確認しようとしましたが、そうではないと思います。$_SERVER['REQUEST_URI']
$_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.php
に生成されるものとまったく同じphalcon-devtools
なので、問題はないと思います。
前もって感謝します!