新增资源型路由方法 也希望能采纳到版本中

TycoonSong

在路由定义的时候是否觉得定义路由很麻烦 尤其是重复的路由定义工作 大型项目的话路由就更多了在路由定义的时候是否觉得定义路由很麻烦 尤其是重复的路由定义工作 大型项目的话路由就更多了

其实我们是可以偷点懒得 当然如果官方在下一个版本中采纳了资源型路由 那么请相信 路由重复定义将不再烦恼你

index方法我们常用来获取列表数据
show方法我们常用来获取详情
create方法我们常用于获取新增数据
store方法我们常用于新增数据提交
update方法我们常用于更新提交
edit方法我们常用于获取编辑数据
destroy方法我们常用于删除数据
recovery 方法我们常用于软删除数据得恢复操作
当然还得预留其他方法得添加 这样我们在使用得时候就变得超级简单
下面得tasA和tapB就是自定义得any路由了
Route::resource('address',UserAddressController::class,['index','create','update','tapA','tapB']);

简单得方法 我们把route类重新定义一下就好 然后在使用过程中引用这个类即可

use Webman\Route as Router;

class Route extends Router
{
    /**
     * 资源型路由
     * @param string $name
     * @param string $controller
     * @param array $options
     */
    public static function resource(string $name, string $controller, array $options = [])
    {
        if(is_array($options) && !empty($options)){
            foreach ($options as $action) {
                switch ($action){
                    case 'index':
                        static::addRoute('GET', "/{$name}", [$controller,$action]);
                        break;
                    case 'create':
                        static::addRoute('GET', "/{$name}/create", [$controller,$action]);
                        break;
                    case 'store':
                        static::addRoute('POST', "/{$name}", [$controller,$action]);
                        break;
                    case 'update':
                        static::addRoute('PUT', "/{$name}/{id}", [$controller,$action]);
                        break;
                    case 'edit':
                        static::addRoute('GET', "/{$name}/{id}/edit", [$controller,$action]);
                        break;
                    case 'show':
                        static::addRoute('GET', "/{$name}/{id}", [$controller,$action]);
                        break;
                    case 'destroy':
                        static::addRoute('DELETE', "/{$name}/{id}", [$controller,$action]);
                        break;
                    case 'recovery': //还原删除操作
                        static::addRoute('PUT', "/{$name}/{id}/recovery", [$controller,$action]);
                        break;
                    default:
                        static::addRoute(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'], "/{$name}/{$action}[/{id}]", [$controller,$action]);
                        break;
                }
            }
        }else{
            //为空时自动注册所有常用路由
            static::addRoute('GET', "/{$name}", [$controller,'index']);
            static::addRoute('GET', "/{$name}/create", [$controller,'create']);
            static::addRoute('POST', "/{$name}", [$controller,'store']);
            static::addRoute('PUT', "/{$name}/{id}", [$controller,'update']);
            static::addRoute('GET', "/{$name}/{id}/edit", [$controller,'edit']);
            static::addRoute('GET', "/{$name}/{id}", [$controller,'show']);
            static::addRoute('DELETE', "/{$name}/{id}", [$controller,'destroy']);
            static::addRoute('PUT', "/{$name}/{id}/recovery", [$controller,'recovery']);
        }
    }
}

如果官方能在webman-framework/src/Route.php中添加此方法 那就更好了

967 3 1
3个评论

admin

应该做成插件形式,插件加入到bootstrap,然后启动后,读取所有app下controller目录,然后 Route::rule()方法,批量注册 路由快捷,
tp5有但是tp6就去掉了

  • TycoonSong 2022-03-10

    你说的这个自动路由老大已经写了插件了

liziyu

这个可以有,严重关注!

  • 暂无评论
walkor

发pr吧,然后记得帮忙写个文档。
https://github.com/webman-php/webman-manual

  • 暂无评论
年代过于久远,无法发表评论

TycoonSong

1224
积分
0
获赞数
0
粉丝数
2021-10-29 加入
🔝