企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# :-: 发布配置以及 migrations ### 命令发布 > 在command目录下面建立 Publish.php 文件 > 在config建立 permissions.php 配置文件 > 在database目录下建立相关表的 migration 文件 > 这里要提到一下,你可以首先下载 think-migration 包,然后建立所需要的表结构 这里为什么可以这么做? ``` 1. 得益于5.1对于 config 的统一层次管理,这很适合编写包的配置文件, 因为之间没有关联。可能你会问?5.0难道不可以吗?extra的配置也是可行的。没错!所以我讲的是对开发更加友好了。 2. migration 的加入,适合我们编写与包关联的表操作,虽然 5.0 也可以,但是我更希望的是官方能加入支持。这样会省去开发过程 ```` ### 编写命令发布 这里会直接贴上发布代码 ```php <?php namespace think\permissions\command; use think\console\Command; use think\console\Input; use think\console\input\Argument; use think\console\input\Option; use think\console\Output; class PermissionPublish extends Command { protected function configure() { $this->setName('permission-publish') ->setDescription('Publish Permission Files'); } protected function execute(Input $input, Output $output) { $output->write(sprintf('permissions config file publish %s' . PHP_EOL, $this->publishConfig() ? 'successfully' : 'failed')); $output->write(sprintf('permissions migrations publish %s',$this->publishMigrations() ? 'successfully' : 'failed')); } // 发布配置文件 protected function publishConfig() { $permissionsConfigPath = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'permissions.php'; return copy($permissionsConfigPath, app()->getConfigPath() . 'permissions.php'); } // 发布migration文件 protected function publishMigrations() { $migrationsPath = app()->getRootPath() . 'database' . DIRECTORY_SEPARATOR . 'migrations' . DIRECTORY_SEPARATOR; if (!is_dir($migrationsPath)) { mkdir($migrationsPath, 0777, true); } $databasePath = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'database' . DIRECTORY_SEPARATOR; $handle = opendir($databasePath); $status = true; while ( ($file= readdir($handle))!= false) { if ($file!= '.' && $file!= '..') { if (!copy($databasePath . basename($file), $migrationsPath . basename($file))) { $status = false; break; } } } return $status; } } ```