EasySwoole的管理

服务启动

php easyswoole start

守护模式启动

php easyswoole start d

默认配置加载dev.php,使用该命令加载produce.php

php easyswoole start produce

服务停止

php easyswoole stop

服务重启

php easyswoole reload 只重启task进程
php easyswoole reload all  重启task + worker进程

App\HttpController下创建Test.php

namespace App\HttpController;

use EasySwoole\Http\AbstractInterface\Controller;

class Test extends Controller
{

    function index()
    {
        // TODO: Implement index() method.
        $this->response()->write('this is test controller');
    }

访问Test控制器下的index方法

image.png

我们主要是用于API开发.所以在App\HttpController下创建Api\Video.php.在这个控制器中我不想用Index方法.

namespace App\HttpController\Api;

use EasySwoole\Http\AbstractInterface\Controller;

class Video extends Controller
{
    public function video()
    {
        return $this->response()->write('video');
    }
}

访问测试.出现如下错误

image.png

之前说过!出了错肯定不是我们自己的问题.让我们一起来看看别人啥原因导致我们出错了!6.jpg.在vendor\easyswoole\http\src\AbstractInterface\Controller.php

abstract class Controller
{
    ...
    abstract function index();
    ...
}

报错是因为抽象类下面的抽象方法。如果在继承抽象类后。必须声明它里面的抽象方法。哪怕不写东西都行。否则会报错。真是tmd深井冰.如果每个控制器都要一个index方法而我又用不到哪不是缺魂吗.
为了解决上述无聊恶心的问题我们在App\HttpController下创建一个Base.php作为Api目下所有控制器的基础类

namespace App\HttpController\Api;

use EasySwoole\Http\AbstractInterface\Controller;

class Base extends Controller
{
    public function index()
    {

    }
}

然后我们再在每个控制器下不继承Controller而是继承Base就可以了.如果你需要用到index方法.那直接在对应的控制器下创建就行了.不冲突的哟.

当然既然是Api接口肯定会与客户端进行交互的.我们如果直接输入一个值。它们是无法解析的。我们需要转成json的格式。首先查看vendor\easyswoole\http\src\AbstractInterface\Controller.php下的writeJson方法

protected function writeJson($statusCode = 200, $result = null, $msg = null)
{
    if (!$this->response()->isEndResponse()) {
        $data = Array(
            "code" => $statusCode,
            "result" => $result,
            "msg" => $msg
        );
        $this->response()->write(json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
        $this->response()->withHeader('Content-type', 'application/json;charset=utf-8');
        $this->response()->withStatus($statusCode);
        return true;
    } else {
        return false;
    }
}

他的格式是code,result,msg`.而我们需要restuful风格的返回格式.稍作修改

protected function writeJson($statusCode = 200, $msg = null, $result = null)
{
    if (!$this->response()->isEndResponse()) {
        $data = Array(
            "code" => $statusCode,
            "msg" => $msg,
            "result" => $result
        );
 
}

修改App\HttpController\Api\Video.phpvideo方法

public function video()
{
    $arr = [
        'id' => 1,
        'user' => '二滑大魔王'
    ];
    return $this->writeJson(0, 'ok', $arr);
}

反问测试

image.png

获取传参数.在学习中我们不一定要去看文档.查看源码就可以知道怎么去用的.所以多阅读源码也不是一件坏事.查看vendor\easyswoole\http\src\AbstractInterface\Controller.php

protected function request(): Request
{
    return $this->request;
}

protected function response(): Response
{
    return $this->response;
}

调用request方法就会走到vendor\easyswoole\http\src\Message\ServerRequest.php再调用其的方法获参.
修改修改App\HttpController\Api\Video.phpvideo方法

public function video()
{
    $arr = [
        'id' => 1,
        'user' => '二滑大魔王',
        'parm' => $this->request()->getRequestParam()
    ];
    return $this->writeJson(0, 'ok', $arr);
}

测试

image.png

哦吼成功了哟.至此.你已经可以独立的使用EasySwoole做一些简单的开发了呦
4.gif

Last modification:February 18th, 2020 at 10:32 pm