上一篇文章中,已经使用react hooks配合ahooks,用@livechat/ui-kit制作了一个仅有echo功能的chatbot。
接下来,本篇文章介绍用laravel(PHP框架)来实现echo,并让前后端通信。
因为在本机调试,并不需要跨域问题。如果放到服务器上,则需要解决跨域问题。跨域的事情,会在另一篇文章中单独介绍。(最新更新,文章下半部分会有跨域内容,在做调试时,react的端口与laravel端口不一致,因此只要不最终生成静态文件并放在laraval的模板里,就会存在跨域问题。)
一、安装laravel
前提是要安装php7.3 和 php的包管理工具composer。
具体安装方法可以参考 getcomposer.org/doc/00-intr…
输入如下命令,安装laravel框架:
composer global require laravel/installer
二、生成botformDashboard项目
输入如下命令,建立一个空的laravel框架项目
composer create-project --prefer-dist laravel/laravel botformdashboard
之后,进入项目目录并启动php服务器:
cd botformdashboard
php artisan serve
这个时候,访问 http://localhost:8000/ 即可看到效果:

三、写路由,完成echo功能
1、创建一个controller
php artisan make:controller Chatbot --echo
打开 app/Http/Controllers/Chatbot.php,找到public function echo函数,输入如下内容:
$data = $request->json()->all();
$text = $data['text'];
$echoText = "$text too";
return response()->json($text);
这样,就完成了echo的功能,但还必须在路由中挂载才可以。
2、在routes/web.php 路由中,挂载controller:
Route::post('/api/echo', 'Chatbot@echo');
3、使用curl进行测试:
curl -i \
-H "Accept: application/json" \
-H "X-HTTP-Method-Override: POST" \
-X POST -d '{"text":"hello"}' \
http://localhost:8000/api/echo
或用httpie进行测试
httpie 的安装,可以用任何包管理工具进行安装:
<tool> install httpie
http POST http://localhost:8000/api/echo text=hello
结果,出现一个错误:

关键错误是:
"message": "CSRF token mismatch."
这是出于安全原因导致的。为了达成目的,先简单粗暴取消这个限制。
找到 app/Http/Middleware/VerifyCsrfToken.php ,在protected $except中添加需要取消CSRF的函数名称:
protected $except = [
"echo"
];
现在,继续测试:
http POST http://localhost:8000/api/echo text=hello
可以看到返回了hello too:

说明后端的api已经可用了。
接下来,就是整合阶段。
实际上去掉那个验证是有问题的,因为涉及到安全,所以如有必要,还是需要加进去一些验证的环节的。但这里,暂时先不加,先力求跑通。
四、前端用fetch调用echo
在react项目中,增加一个异步请求echo服务的代码
const requestBot = async(text)=>{
const response = await fetch("http://localhost:8000/api/echo",{
headers:{
'Accept': 'application/json',
'Content-Type': 'application/json'
},
method:"POST",
body:JSON.stringify({
text: text
})
});
console.log(response);
}
结果出现错误:

原来是跨域了。
接下来,在laravel中安装cors插件:
composer require fruitcake/laravel-cors
然后,生成cors配置文件:
php artisan vendor:publish --tag="cors"
接下来,把 app/Http/Middleware/VerifyCsrfToken.php 文件中定义的echo变为api/*
protected $except = [
"api/*"
];
并在app/Console/Kernel.php中,添加:
protected $middleware = [
\Fruitcake\Cors\HandleCors::class,
];
另其全局生效。现在,react就可以正常发送了。
五、最终效果及源码:

laravel(PHP)后端源代码:github.com/botform/das…
react前端源代码 github.com/botform/bot