EasySwoole的MVC基础内容

 

代码生成 

在根目录下创建 auto.php 文件

include "./vendor/autoload.php";
\EasySwoole\EasySwoole\Core::getInstance()->initialize()->globalInitialize();
// var_dump(\EasySwoole\EasySwoole\Config::getInstance()->getConf('MYSQL'));die;
go(function () {
    //生成基础类

    $generation = new \EasySwoole\CodeGeneration\InitBaseClass\Controller\ControllerGeneration();
    $generation->generate();
    $generation = new \EasySwoole\CodeGeneration\InitBaseClass\UnitTest\UnitTestGeneration();
    $generation->generate();
    $generation = new \EasySwoole\CodeGeneration\InitBaseClass\Model\ModelGeneration();
    $generation->generate();

    //加载数据配置
    $mysqlConfig = new \EasySwoole\ORM\Db\Config(\EasySwoole\EasySwoole\Config::getInstance()->getConf('MYSQL'));
    //获取连接
    $connection = new \EasySwoole\ORM\Db\Connection($mysqlConfig);
    //表名
    $tableName = 'user';

    $codeGeneration = new EasySwoole\CodeGeneration\CodeGeneration($tableName, $connection);
    //生成model
    $codeGeneration->generationModel("\\User");
    //生成controller
    $codeGeneration->generationController("\\Api\\User", null);
    //生成unitTest
    $codeGeneration->generationUnitTest("\\User", null);

    // 命令行执行后是root用户组,要改成www用户组
    // chown -fR www ./*
    // chgrp -fR www ./*
});

命令行执行

php auto.php

执行成功后就会在 生成 控制器: App/HttpController/Api/User/User.php 、 模型:App/Model/User/UserModel.php、单元测试:UnitTest/User/UserTest.php

控制器默认生成的控制器是api接口,控制器上有默认注解,详细使用可以到官网查看

注:代码生成的控制器 是基础注解文档的控制器,如果报错的话就用基础控制器类

// use EasySwoole\HttpAnnotation\AnnotationController;
use EasySwoole\Http\AbstractInterface\Controller;

 

控制器

url解析规则

仅支持PATHINFO模式的 URL 解析,且与控制器名称(方法)保持一致,控制器搜索规则为优先完整匹配模式

在没有路由干预的情况下,内置的解析规则支持无限级嵌套目录

例子:http://serverName/api/auth/login 的 对应执行的方法为 \App\HttpController\Api\Auth::login()

逻辑:

  • http://serverName/a/b/c/d/f

    • 如果 f 为控制器名,则执行的方法为 \App\HttpController\A\B\C\D\F::index()

    • 如果 f 为方法名,则执行的方法为 \App\HttpControllers\A\B\C\D::f()

    • 如果最后的路径为index时,底层会自动忽略,并直接调用控制器的默认方法(也就是index)

注意,EasySwoole的URL路径区分大小写,控制器首字母支持小写转换 

控制器代码例子看文章的 使用视图:

 

 

 

模型/数据库操作

数据库启用:

 数据库连接配置:

return [
    'SERVER_NAME' => "EasySwoole",
    'MAIN_SERVER' => [
        'LISTEN_ADDRESS' => '0.0.0.0',
        'PORT' => 9601,
        'SERVER_TYPE' => EASYSWOOLE_WEB_SERVER, //可选为 EASYSWOOLE_SERVER  EASYSWOOLE_WEB_SERVER EASYSWOOLE_WEB_SOCKET_SERVER,EASYSWOOLE_REDIS_SERVER
        'SOCK_TYPE' => SWOOLE_TCP,
        'RUN_MODEL' => SWOOLE_PROCESS,
        'SETTING' => [
            'worker_num' => 8,
            'reload_async' => true,
            'max_wait_time'=>3
        ],
        'TASK'=>[
            'workerNum'=>4,
            'maxRunningNum'=>128,
            'timeout'=>15
        ],

    ],
    'TEMP_DIR' => null,
    'LOG_DIR' => null,
    'MYSQL' => [
        'host' => '127.0.0.1',
        'database' => '',
        'port'          => 3306,
        'user' => '',
        'password' => '',
        'charset'       => 'utf8',
    ],
];

线程加载: 

use EasySwoole\ORM\DbManager;
use EasySwoole\ORM\Db\Connection;
use EasySwoole\ORM\Db\Config;
use EasySwoole\EasySwoole\Config as GlobalConfig;

class EasySwooleEvent implements Event
{
    public static function initialize()
    {
        // TODO: Implement initialize() method.
        date_default_timezone_set('Asia/Shanghai');
        
        // mysql 初始化
        $config = new Config(GlobalConfig::getInstance()->getConf("MYSQL"));
        
        //连接池配置
        $config->setGetObjectTimeout(3.0); //设置获取连接池对象超时时间
        $config->setIntervalCheckTime(30*1000); //设置检测连接存活执行回收和创建的周期
        $config->setMaxIdleTime(15); //连接池对象最大闲置时间(秒)
        $config->setMaxObjectNum(20); //设置最大连接池存在连接对象数量
        $config->setMinObjectNum(5); //设置最小连接池存在连接对象数量
        $config->setAutoPing(5); //设置自动ping客户端链接的间隔

        DbManager::getInstance()->addConnection(new Connection($config));
    }

    public static function mainServerCreate(EventRegister $register)
    {

        // 文件热加载[dev]
        // 配置同上别忘了添加要检视的目录
        $hotReloadOptions = new \EasySwoole\HotReload\HotReloadOptions;
        $hotReload = new \EasySwoole\HotReload\HotReload($hotReloadOptions);
        $hotReloadOptions->setMonitorFolder([EASYSWOOLE_ROOT . '/App']);

        $server = ServerManager::getInstance()->getSwooleServer();
        $hotReload->attachToServer($server);

        // mysql
        $register->add($register::onWorkerStart,function (){
            //链接预热
            DbManager::getInstance()->getConnection()->getClientPool()->keepMin();
        });

    }
}

 

模型代码: 

class UserModel extends AbstractModel
{
    //设置表名
	protected $tableName = 'user';

    //查询获取分页列表
	public function getList(int $page = 1, int $pageSize = 10, string $field = '*'): array
	{
		$list = $this
		    ->withTotalCount()
			->order($this->schemaInfo()->getPkFiledName(), 'DESC')
		    ->field($field)
		    ->page($page, $pageSize)
		    ->all();
		$total = $this->lastQueryResult()->getTotalCount();;
		return ['total' => $total, 'list' => $list];
	}
}

 

视图

这里我使用的是thinkPHP的视图

使用前准备:

安装thinkPHP的视图

composer require topthink/think-template

创建视图基础类:App/Base/ViewController.php

<?php
/*
 * @Author: HappyCrab
 * @Date: 2020-11-06 14:01:29
 * @LastEditors: HappyCrab
 * @LastEditTime: 2020-11-06 17:35:19
 * @Description: 
 */
namespace App\Base;

use EasySwoole\Http\AbstractInterface\Controller;
use EasySwoole\EasySwoole\Config;
use think\Template;

/**
 * 视图控制器
 * Class ViewController
 * @author  : evalor <master@evalor.cn>
 * @package App
 */

abstract class ViewController extends Controller
{

    private $view;

    /**
     * 初始化模板引擎
     * ViewController constructor.
     * @param string   $actionName
     * @param Request  $request
     * @param Response $response
     */
    public function __construct()
    {
        $this->init();
        parent::__construct();
    }

    /**
     * 输出模板到页面
     * @param  string|null $template 模板文件
     * @param array        $vars 模板变量值
     * @param array        $config 额外的渲染配置
     * @author : evalor <master@evalor.cn>
     */
    public function fetch($template=null, $vars = [], $config = [])
    {
        ob_start();
        $template==null&&$template=$GLOBALS['base']['ACTION_NAME'];
        $this->view->fetch($template, $vars, $config);
        $content = ob_get_clean();
        $this->response()->write($content);
    }

    /**
     * @return Template
     */
    public function getView(): Template
    {
        return $this->view;
    }

    // 初始化
    public function init()
    {
        $this->view             = new Template();
        $tempPath               = Config::getInstance()->getConf('TEMP_DIR');     # 临时文件目录
        $class_name_array       = explode('\\', static::class);
        $class_name_array_count = count($class_name_array);
        $controller_path        = $class_name_array[$class_name_array_count - 2] . DIRECTORY_SEPARATOR . $class_name_array[$class_name_array_count - 1] . DIRECTORY_SEPARATOR;
        $this->view->config([
                'view_path' => EASYSWOOLE_ROOT . DIRECTORY_SEPARATOR . 'App' . DIRECTORY_SEPARATOR . 'Views' . DIRECTORY_SEPARATOR . $controller_path,
                # 模板文件目录
                'cache_path' => "{$tempPath}/templates_c/",               # 模板编译目录
            ]);

    }
}

 

使用视图:

创建控制器:App/HttpController/Home/User.php

namespace App\HttpController\Home;

use App\Base\ViewController;

class User extends ViewController
{
    public function index()
	{
        $assign = array(
            'test'=>1,
        );
        
        // 设置模板参数
        $this->getView()->assign($assign);
        // 输出页面
        $this->fetch('task');
    }

}

创建视图模板:App/Views/Home/User/index.html

<code>视图测试:{$test}</code>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值