medz/cors

小白的问题

starock opened this issue · 5 comments

首先感谢大神写的这个中间件!

说一下我的疑惑。我对PHP了解不多,只是刚开始用thinkPHP写写接口。现在遇到了跨域的麻烦,找了很多方法感觉还是不够好,所以想试试这个CORS中间件。

已经用composer在thinkPHP5工程下安装了medz/cors。
接下来我该怎么做?这段代码应该写在框架的哪个位置?完全不知道怎么下手啊,没有用过中间件,还请各位简单说明一下,谢谢!!

`use Medz\Cors\Cors;

$cors = new Cors($config); // The $config 👉 config/cors.php file.
$cors->setRequest($requestType, $request); // The $request is empty array or is NULL or $_REQUEST
$cors->setResponse($responseType, $response); // The $response is empty array.
$cors->handle();

$response = $cors->getResponse();`

medz commented

刚去查了TP5中间件的用法,结果发现无法用命令行创建中间件。原来我用的是TP5.0.12版本低。刚下了个TP5.1。 我先试试~

medz commented

你先忙,我把遇到的问题发上来,不用着急回复。先谢谢了~ :)

刚才已经学会用中间件了。然后我照猫画虎新建了一个名字叫CorsIt的中间件,代码如下。出现的问题写在注释里。


class CorsIt
{
    public function handle($request, \Closure $next)
    {
        $config = [
            'allow-credentials' => false, // set "Access-Control-Allow-Credentials" 👉 string "false" or "true".
            'allow-headers'      => ['*'], // ex: Content-Type, Accept, X-Requested-With
            'expose-headers'     => [],
            'origins'            => ['*'], // ex: http://localhost
            'methods'            => ['*'], // ex: GET, POST, PUT, PATCH, DELETE
            'max-age'            => 0,
        ];

        //下面三个参数不知道填什么,瞎写的
        $requestType = 'post';
        $responseType = 'post';
        $response = [];


        $cors = new Cors($config); // The $config 👉 `config/cors.php` file.
        $cors->setRequest($requestType, $request); // The $request is empty array or is `NULL` or $_REQUEST
        $cors->setResponse($responseType, $response); // The $response is empty array.
        $cors->handle();

        $response = $cors->getResponse();

        return $response; 
        //报错:中间件方法必须返回Response对象实例

    }
}
medz commented

@starock https://github.com/medz/cors/blob/master/docs/using-by-thinkphp.md#example 例子在这里了~ 注意一下,你安装的 CORS 版本,因为修复了一个错误的容器注册代码,否则安装后你的框架会一直报错!