2

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なので、問題はないと思います。

前もって感謝します!

4

3 に答える 3

6

最後に、フォーラムによる多くの調査の後、解決策を見つけました。これを私のに追加する必要がありましたindex.php

すぐ後:

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

これ:

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

ソース

ドキュメント$_SERVER['REQUEST_URI']にあるように、代わりに使用するためにルーターの動作を変更するため、なぜ機能するのかわかりませんが、$_GET['_url']実際に.htrouter.phpはそうです(または少なくともしようとしています)。

とにかく、私は Phalcon の経験があまりないので、何かを誤解している可能性が非常に高いです。それが役に立てば幸い。

于 2015-12-14T22:18:28.517 に答える