Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Owl Admin强制生成代码

Owl Admin强制生成代码

原创
作者头像
用砖头敲代码
发布于 2024-12-07 08:09:39
发布于 2024-12-07 08:09:39
1480
举报
文章被收录于专栏:用砖头敲代码用砖头敲代码

文件类

文件类型的,如迁移,模型,控制,Service,受/vendor/slowlyo/owl-admin/src/Support/CodeGenerator/BaseGenerator.php控制

代码语言:php
AI代码解释
复制
 protected function writeFile($name, $type)
    {
        $name = str_replace('/', '\\', $name);
        $path = static::guessClassFileName($name);
        $dir  = dirname($path);

        $files = app('files');

        if (!is_dir($dir)) {
            $files->makeDirectory($dir, 0755, true);
        }
        // 注释判断即可
        // if ($files->exists($path)) {
        //     abort(Response::HTTP_BAD_REQUEST, "{$type} [{$name}] already exists!");
        // }

        $content = $this->assembly();

        $files->put($path, $content);
        $files->chmod($path, 0777);

        return $path;
    }

数据库

有两处,一处是数据表的判断,另外一处是迁移文件模板,分别在/vendor/slowlyo/owl-admin/src/Support/CodeGenerator/Generator.php/vendor/slowlyo/owl-admin/src/Support/CodeGenerator/stubs/migration.stub

代码语言:php
AI代码解释
复制
public function generate($id, $needs = [])
    {
        $record = AdminCodeGenerator::find($id);
        $model  = AdminCodeGenerator::find($id);
        $needs  = collect(filled($needs) ? $needs : $record->needs);

        $successMessage = fn($type, $path) => "<b class='text-success'>{$type} generated successfully!</b><br>{$path}<br><br>";

        $paths   = [];
        $message = '';
        try {
            // Model
            if ($needs->contains('need_model')) {
                $path = ModelGenerator::make($model)->generate();

                $message .= $successMessage('Model', $path);
                $paths[] = $path;
            }

            // Controller
            if ($needs->contains('need_controller')) {
                $path = ControllerGenerator::make($record)->generate();

                $message .= $successMessage('Controller', $path);
                $paths[] = $path;
            }

            // Service
            if ($needs->contains('need_service')) {
                $path = ServiceGenerator::make($record)->generate();

                $message .= $successMessage('Service', $path);
                $paths[] = $path;
            }

            // Route
            RouteGenerator::handle($record->menu_info);

            // Migration
            $migratePath = '';
            if ($needs->contains('need_database_migration')) {
                $path = MigrationGenerator::make($record)->generate();

                $message     .= $successMessage('Migration', $path);
                $migratePath = str_replace(base_path(), '', $path);
                $paths[]     = $path;
            }

            // 创建数据库表
            if ($needs->contains('need_create_table')) {
                // 注释掉这个判断即可
                // if (Schema::hasTable($record->table_name)) {
                //     abort(HttpResponse::HTTP_BAD_REQUEST, "Table [{$record->table_name}] already exists!");
                // }

                if ($migratePath) {
                    Artisan::call('migrate', ['--path' => $migratePath]);
                } else {
                    Artisan::call('migrate');
                }
                $message .= $successMessage('Table', Artisan::output());
            }
        } catch (\Throwable $e) {
            app('files')->delete($paths);

            RouteGenerator::refresh();

            admin_abort($e->getMessage());
        }

        return $message;
    }
代码语言:php
AI代码解释
复制
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        // 加一行强制删除
        Schema::dropIfExists('{{ table }}');
        Schema::create('{{ table }}', function (Blueprint $table) {
            {{ content }}
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('{{ table }}');
    }
};

注意事项

本教程Owl Admin版本为v4.0.7,其他版本可能有所不同,建议项目上线时将代码恢复原样。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Laravel5.6博客中文章标签增删改查
该命令会在 app 目录下创建模型文件 Tag.php,由于我们在 make:model 命令中使用了 --migration 选项,所以同时会创建 Tag 模型对应的数据表迁移。
写PHP的老王
2019/08/12
7860
Laravel5.6博客中文章标签增删改查
依托illuminate组件实现数据库迁移
因为一些原因,我准备选用yaf框架作为我们的主力开发框架,但是我还想要将Laravel的数据库迁移功能给挪过来。所以就研究了一天相关功能。终于让我实现了。
魔王卷子
2020/02/16
8030
Hyperf 初体验-数据库
Hyperf 数据库的连接配置在 config\autoload\database.php 文件中
hedeqiang
2019/12/18
2.6K0
Hyperf 初体验-数据库
Laravel 模型事件的应用
在日常处理一些用户操作事件时,我们有时候需要记录下来,方便以后查阅,或者大数据统计。
seth-shi
2023/12/18
4610
Laravel 模型事件的应用
laravel5 数据库配置(MySQL)
配置完database.php后,进行.env的配置。 .env是框架的环境变量,是为了让这个选项在不同环境下有不同的值。 .env文件在laravel根目录下。
全栈程序员站长
2022/07/08
2.7K0
laravel5 数据库配置(MySQL)
laravel5.2 多表验证
然后我们在views目录下建一个admin文件夹,将layouts文件夹包括里边的内容都复制过来,再将home.blade.php文件复制过来,重命名一下dashboard,再建一个auth文件夹,将login和register文件放进去,如下图
horan1
2023/07/25
3950
laravel5.2 多表验证
laravel5.1的用户权限管理的实现 原
修改database/migrations/2016_12_02_070731_create_blogs_table.php文件
lilugirl
2019/05/26
8010
基于 Redis 有序集合实现热门浏览文章排行榜
创建 redis_demo 数据库,运行 php artisan migrate 在这个数据库中创建 posts 数据表。
学院君
2021/01/08
2K0
Laravel5.8开发环境搭建与CRUD应用实践
在这个面向初学者的教程中,我们将学习如何使用最新的PHP开发框架Laravel 5.8,来创建一个基于MySQL数据库的Web应用,实现联系人的增删改查功能。
用户1408045
2019/08/25
6.7K0
Laravel学习基础之migrate的使用教程
前言 大家都知道,现在的开发测试都是讲究多人团队协作完成,每个人都有本地环境,在以前我们一般是手动的添加数据,比如在数据库查询器中使用sql语句进行数据插入。如果数据较少,那还是蛮轻松的,但是如果数据过大,那就很蛋疼了,但是这在Laravel中就很轻松,可以使用数据迁移。 本文就详细的介绍了关于Laravel中migrate使用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 生成迁移
用户2323866
2021/07/09
1.1K0
Larave-vue-crud-laravel-和vue-增删改查
看到successfully代表laravel安装成功,如果没有成功请换淘宝镜像重写安装.
胡哥有话说
2019/07/25
2.5K0
Larave-vue-crud-laravel-和vue-增删改查
Laravel Vue 前后端分离 使用token认证
在做前后台分离的项目中,认证是必须的,由于http是无状态的。前台用户登录成功后,后台给前台返回token。之后前台给后台发请求每次携带token。
mafeifan
2018/09/10
4.7K0
Laravel Vue 前后端分离 使用token认证
Laravel5.2之Seeder填充数据小技巧
说明:本文主要聊一聊Laravel测试数据填充器Seeder的小技巧,同时介绍下Laravel开发插件三件套,这三个插件挺好用哦。同时,会将开发过程中的一些截图和代码黏上去,提高阅读效率。
botkenni
2022/01/10
4.1K0
Laravel5.2之Seeder填充数据小技巧
orm 系列 之 Eloquent演化历程2
上篇讲到了数据库Relation的实现,本篇接着讲migrations or database modification logic的功能,此处开始的git是git co aa98553。
zhuanxu
2018/08/23
3K0
orm 系列 之 Eloquent演化历程2
Laravel 广播系统工作原理
今天,让我们深入研究下 Laravel 的广播系统。广播系统的目的是用于实现当服务端完成某种特定功能后向客户端推送消息的功能。本文我们将学习如何使用第三方 Pusher 工具向客户端推送消息的功能。
柳公子
2018/09/17
9.8K1
Laravel 广播系统工作原理
cell-blog 开发记录
修改 config/app.php,将 local 的值 en 改成 zh-CN(laravel-admin 自带 zh-CN):
Cell
2022/02/25
1.3K0
依托illuminate组件实现数据库迁移(后续)
这段时间一直在思考,想着把迁移功能给独立出来。所以还是按照Laravel的模式重新写了一版并提交到了 GitHub 中,另外 Packagist 也发布了。
魔王卷子
2020/02/17
9230
相关推荐
Laravel5.6博客中文章标签增删改查
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档