swoft 控制器

在应用下的 app/bean.php 配置 server

在应用下的 app/bean.php 配置 server,在这个文件里,你可以看到 Http Server数组里面包含了 Http Server 的基本信息。下面列举了一些简单的配置,你也可以自由组合同时提供多种服务。

'httpServer'        => [
        'class'    => HttpServer::class,
        'port'     => 18306,
        'listener' => [
        ],
        'process'  => [
        ],
        'on'       => [
        ],
//        'type' => SWOOLE_SOCK_TCP | SWOOLE_SSL,  //支持https,必须安装OpenSSL扩充
        /* @see HttpServer::$setting */
        'setting' => [0
              'worker_num' => 4,
            //支持https,签名文件
//            'ssl_cert_file' => '/my/certs/2288803_www.domain.com.pem',
//            'ssl_key_file'  => '/my/certs/2288803_www.domain.com.key',
        ]
    ],
  'httpServer'        => [
        'class'    => HttpServer::class,
        'port'     => 18306,
        'listener' => [
            'rpc' => bean('rpcServer')
        ],
        'process'  => [
          //  'monitor' => bean(MonitorProcess::class)
          //  'crontab' => bean(CrontabProcess::class)
        ],
        'on'       => [
            // Enable task must task and finish event
            SwooleEvent::TASK   => bean(TaskListener::class),  
            SwooleEvent::FINISH => bean(FinishListener::class)
        ],
        /* @see HttpServer::$setting */
        'setting' => [
            'task_worker_num'       => 12,
            'task_enable_coroutine' => true,
            'worker_num'            => 6,
            // Enable Https
            'ssl_cert_file' => '/my/certs/2288803_www.domain.com.pem',
            'ssl_key_file'  => '/my/certs/2288803_www.domain.com.key',
        ]
    ],
    //Enable Https
    'type' => SWOOLE_SOCK_TCP | SWOOLE_SSL,

可配置项用于 http server bean 配置,除了 class 其他都是 http server 的属性。

class: 指定 Http Server 的处理类
port: 指定 Http Server 的端口
listener: 指定其他一同启动的服务,添加端口服务监听,可以多个。
rpc 启动 RPC 服务
process: 启动自定义用户进程
on: 配置监听的事件
注册事件、设置对应事件的处理监听,事件触发组件调用,在任务里面使用
setting: 这里是参考 Swoole Server 配置选项
pidFile: 设置进程 pid 文件 位置,默认值 @runtime/swoft.pid
mode: 运行的模式,参考 Swoole Server 构造函数 第三个参数
type: 指定Socket的类型,支持TCP、UDP、TCP6、UDP6、UnixSocket Stream/Dgram 等 Swoole Server 构造函数 第四个参数
启用 Https 支持 注意: 你必须安装 OpenSSL 库,并且确保安装 swoole 时是启用了 ssl 选项的。同时,需要设置 ‘type’ => SWOOLE_SOCK_TCP | SWOOLE_SSL

新建控制器

新建控制器,在 /app/Http/Controller/文件夹下新建文件 IndexController.php

/**
 * Class IndexController
 * @package App\Http\Controller
 * @Controller(prefix="/apidemo")
 */
class IndexController{
    /**
     * @RequestMapping("index",method={RequestMethod::GET})
     * @throws \Swoft\Exception\SwoftException
     */
    public function index(){
        $res = Context()->getResponse();

        $data = ['name'=>'Swoft2.0.2222'];
        return $res->withData($data);
    }

    /**
     * @RequestMapping("index_v2")
     * @throws \Swoft\Exception\SwoftException
     */
    public function indexV2(){
        $res = Context()->getResponse();

        $data = ['name'=>'Swoft2.0.2222'];
        return $res->withData($data);
    }
}

注意事项

注意事项:1、Swoft路径全部使用注解方式进行。注解必须使用 /** 开始,不能少或者多 * ,只能是两个* ,不然会报错。
2、如果有其他注释,不能出现@符合,如下:

   /**
     *
     * //路径解析
      * //将此注解应用于 Action 上,则作用域仅为当前的 Action  @Middleware 用于配置单个中间件  @Middlebrows 用于配置一组 Middleware
     * * @RequestMapping("demo_middle")      */   

会报错,蓝色部分是你的注释,其中 @Middleware 不能加@符号,不然会报错。
3、路由访问是通过 @Controller(prefix="/apidemo") 中的prefix + 类中每个方法的@RequestMapping(“index”) 参数:url/apidemo/index 进行访问当前控制器的方法。
4、如果有多个方法的路由相同,会以最后一个为准,覆盖之前的。

创建控制器

  • 主要通过 @Controller 注解实现,代码可以放在任意位置,但为了统一标准,建议放在 app/Http/Controller 目录下
  • 使用注解 @Controller (prefix=“路由前缀”),需要引入 Controller 类

路由绑定

swoft 并没有采用配置文件的方式来配置路由,而是采用了注解,可以使用 @RequestMapping 注解添加路由
使用注解 @RequestMapping ,需要引入该类,其中相关属性如下:

route 指定路由
method 指定请求方式(GET、POST、PUT、PATCH、DELETE、OPTIONS、HEAD)
params 指定 path 变量正则匹配限制

请求对象

请求对象 Request 为 Swoft\Http\Message\Request

获取请求对象

  1. 通过控制器方法参数注入 (Request $request)
  2. 通过请求上下文获取Swoft\Context\Context::mustGet()->getRequest()

响应对象

响应对象 Response 为 Swoft\Http\Message\Response

获取响应对象

  • 通过控制器方法参数注入 (Response $response)
  • 通过请求上下文获取 Swoft\Context\Context::mustGet ()->getResponse ()

响应对象返回数据

由于获取请求数据内容较多,比如设置状态码,输出字符串内容,设置响应数据格式,输出数组,重定向等,后面单独讲解,暂时缺省

参数验证

永远不要相信前端传输的数据
swoft 提供系统自带的验证规则进行声明验证器以及自定义验证器的功能,当然也支持自定义验证器规则,此处缺省,后续文章会详细介绍

例子代码

<?php   declare(strict_types=1);

namespace app\Http\Controller;

use Swoft\Http\Message\Request;

interface BaseController
{
    public function index(Request $request);

    public function show(Request $request);

    public function edit(Request $request);

    public function update(Request $request);

    public function create();

    public function store(Request $request);

    public function destroy(Request $request);

}

实现类

<?php declare(strict_types=1);

namespace app\Http\Controller\Admin;

use app\Http\Controller\BaseController;
use Swoft\Http\Message\Request;
use Swoft\Http\Server\Annotation\Mapping\Controller;
use Swoft\Http\Server\Annotation\Mapping\RequestMethod;
use Swoft\Validator\Annotation\Mapping\Validate;
use app\Validator\TestValidator;
use Swoft\Context\Context;

/**
 * Class TestController
 * @package app\Http\Controller\Admin
 * @Controller(prefix="/admin/test")
 */
class TestController implements BaseController
{
    /**
     * @RequestMapping(route="index",method={RequestMethod::GET})
     * @Validate(validator="TestValidator",fields={"name"})
     * @param Request $request
     */
    public function index(Request $request){
        $response = Context::mustGet()->Response();
        $data     = ['name'=>'Swoft2.0'];
        return $response->withData($data);
    }

    public function show(Request $request){

    }

    public function edit(Request $request){

    }

    public function update(Request $request){

    }

    public function create(){

    }

    public function store(Request $request){

    }

    public function destroy(Request $request){

    }
}

[原创]Swoft源码剖析-目录
woft2.x 小白学习笔记 (一) —控制器
Swoft 官方开发文档
swoft 文档
swoft 文档v1
swoft 文档v2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SWOT 分析是一种常用的战略分析工具,用于评估一个组织、企业或项目的优势、劣势、机会和威胁。以下是 bilibili 的 SWOT 分析: 优势: 1. 大量年轻用户:bilibili 用户主要是 18-35 岁的年轻人,这是一个庞大的市场。 2. 强大的社区氛围:bilibili 鼓励用户互动,创造了一个友好的社区氛围。 3. 优秀的原创内容:bilibili 有大量的原创内容,包括动画、音乐、游戏等各种领域,这些内容吸引了大量的忠实用户。 4. 多元化的收入来源:除了广告收入,bilibili 还从会员制度、游戏、电商等多个方面获得收入。 劣势: 1. 盈利模式不够稳定:bilibili 目前主要的收入来源是广告,但是这种盈利模式可能会受到市场波动和竞争的影响。 2. 直播市场竞争激烈:bilibili 在直播市场的竞争非常激烈,需要不断更新内容和服务才能保持竞争力。 3. 缺乏优质内容:虽然 bilibili 有大量的原创内容,但是其中有很多质量较低的作品,需要更加注重筛选和优化。 机会: 1. 市场增长潜力:随着年轻人对数字娱乐的需求不断增长,bilibili 有机会扩大市场份额。 2. 投资方支持:bilibili 有多个大型投资方的支持,这为公司的发展提供了资金和资源支持。 3. 大众文化转变:人们对于传统媒体的需求正在下降,数字媒体的需求正在上升。 威胁: 1. 竞争对手增加:随着直播、短视频等领域的竞争对手不断增多,bilibili 需要保持竞争优势。 2. 法规限制:政府对于网络直播、内容审查等方面的监管正在趋严,可能会对 bilibili 的业务造成影响。 3. 内容质量问题:用户对于内容质量的要求正在不断提高,如果 bilibili 无法提供高质量的内容,将面临用户流失的风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟伟哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值