leemason / larastaller
Larastaller包通过web或Artisan提供流畅的接口,用于安装/升级您的项目。
Requires
- laravel/framework: 5.1.*
Requires (Dev)
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2024-09-14 19:36:35 UTC
README
Larastaller包通过web或Artisan提供流畅的接口,用于安装/升级您的项目。
安装
使用composer安装此包
composer require leemason/larastaller
更新composer后,将ServiceProvider添加到config/app.php中的providers数组中
Laravel 5.1
LeeMason\Larastaller\LarastallerServiceProvider::class,
使用发布命令将packages配置复制到您的config文件夹
php artisan vendor:publish --force
一旦完成,您现在应该有一个位于config/larastaller.php的配置文件。
在此文件中,您将看到2个数组项,requirements
和versions
。
这两个都是数组,requirements将包含一些基本的Laravel必需项以供您开始(您可能不需要更多)。
但对于versions,您需要添加自己的。每个版本可以具有以下内容
'1.0.0' => [ 'changes' => [ 'this is a change', 'this is another' ], 'requirements' => [ //.. the same as the main requirements ], 'tasks' => [ \LeeMason\Larastaller\Tasks\AppKeyTask::class, \LeeMason\Larastaller\Tasks\MigrateTask::class, //.. any more tasks you need to complete for this version ], ]
如您所见,数组键是版本字符串。这必须以与php version_compare
函数兼容的方式格式化。
兼容性
Larastaller包是在Laravel 5.1上开发的,我认为它应该也能与5.0甚至4.x兼容,但它仅针对5.1进行了测试。
简介
@todo
用法
http
@todo
artisan
larastaller包包含多个安装命令,如下所示
php artisan installer:install
这将
- 运行所有版本的依赖项,测试它们并报告任何错误。
- 通过控制台问题、密码、选择和true/false字段请求每个任务请求的所有数据**
- 解析每个任务类并执行任务的
handle()
函数 - 如果任务抛出异常,则安装将停止
- 如果所有任务都成功完成,则将安装详细信息保存到
storage_path('installation.json');
文件中 - 报告安装成功并退出
** 如果您提供了--path
选项,则不会发生这种情况,该选项可以将指向键>值对json编码文件的路径指向输入值。这在部署过程中特别有用,其中使用--no-interaction
。
php artisan installer:changes $version
```$version```` 可能的值 ["latest", "last-x" eg (last-5), "version" string eg (1.1.1), "all"]
这将获取请求的版本,并将添加到版本数组中的更改显示为列表。
配置
包中包含一个config/larastaller.php文件,其中从其中加载基本配置,并具有空的versions数组。
这(在执行上述安装步骤之后)会复制到您的应用程序配置文件夹中,并应包含您所有的自定义需求和版本。
数组中的第一个键是安装的需求列表(独立于任何版本)。
包中包含一些需求类,它们提供必须满足的任何Laravel应用程序的需求,但如果您有其他特定于您的应用程序的需求,您应该将它们附加在这里。
'requirements' => [ \LeeMason\Larastaller\Requirements\PhpVersionRequirement::class, \LeeMason\Larastaller\Requirements\PdoRequirement::class, \LeeMason\Larastaller\Requirements\MbStringRequirement::class, \LeeMason\Larastaller\Requirements\OpenSSLRequirement::class, \LeeMason\Larastaller\Requirements\TokenizerRequirement::class, \LeeMason\Larastaller\Requirements\FolderPermissionsRequirement::class, \LeeMason\Larastaller\Requirements\EnvFileRequirement::class, ],
第二项是versions数组,它包含应用程序的版本数组。
每个版本应该作为数组的索引添加,版本详细信息作为键的值。
'versions' => [ '1.0.0' => [ 'changes' => [ 'this is a change' ], 'requirements' => [ ], 'tasks' => [ \LeeMason\Larastaller\Tasks\AppKeyTask::class, \LeeMason\Larastaller\Tasks\MigrateTask::class, ], ], '1.0.1' => [ //.. ], ],
每个版本应该包含一个更改数组、一个需求数组(如果服务器需求按版本更改,则很有用)和一个任务数组。
定义类
LeeMason\Larastaller\Definition
类非常简单,是一个数据存储对象,允许更流畅地访问配置,并为每个版本创建 LeeMason\Larastaller\Version
实例。
它有一个公共的 API,但仅设计用于通过 Larastaller 包进行内部使用。
需求类
需求类用于测试环境是否适合安装应用程序。
它们必须实现 LeeMason\Larastaller\RequirementInterface
接口,并且理想情况下扩展抽象的 LeeMason\Larastaller\Requirement
类。
每个需求类都应该包含公共属性 $description
、$success
、$error
,这些属性包含描述性字符串来解释需求并提供用户友好的消息。
需求类可以可选地包含一个 __construct()
方法,通过 ServiceContainer 注入任何依赖,这些依赖将自动解决。
需求类最后且最重要的方法是一个 必须提供 的 test()
方法,该方法应返回一个布尔值 true/false,表示需求是否已满足。
大多数需求只是测试需求的是否存在,但 EnvFileRequirement
是一个特殊情况,因为它会在测试之前自动将 .env.example 复制到 .env,如果不存在 .env 文件。
选择这样做而不是将其作为任务,主要是因为 Laravel 应用程序的生命周期。
任务类
任务类用于执行安装应用程序所需的任务。
它们必须实现 LeeMason\Larastaller\TaskInterface
接口,并且理想情况下扩展抽象的 LeeMason\Larastaller\Task
类。
每个任务类都应该包含公共属性 $title
,包含描述性字符串来解释任务的函数。
任务类可以可选地包含一个 __construct()
方法,通过 ServiceContainer 注入任何依赖,这些依赖将自动解决。
为了实际执行某些操作,任务类应该包含一个 handle()
方法。
该方法可以执行任何事情,从运行 artisan 命令到修改数据库表。
如果在执行过程中任务应该提供任何用户反馈消息,可以通过使用其 $this->output
属性来实现,该属性始终是 Symfony\Component\Console\Output\OutputInterface
的实例。
这允许任务通过使用 $this->output->writeLn('...');
方法添加输出。
包中包含一些基本任务以帮助您开始。
LeeMason\Larastaller\Tasks\AppKeyTask
此任务非常简单,执行 php artisan key:generate
命令,并返回其输出。
我们建议此任务作为您包含的第一个版本的第一个任务注册。
LeeMason\Larastaller\Tasks\OptimizeTask
此任务非常简单,执行 php artisan clear-compiled && php artisan optimize --force
命令,并返回其输出。
我们建议此任务作为您包含的每个版本的最后一个任务注册,因为每次有人安装或更新时,都可以重新生成编译的类文件。
LeeMason\Larastaller\Tasks\MigrateTask
此任务本身将简单地执行与调用 php artisan migrate
相同的功能,因此它是一个有用的任务,可以添加到添加迁移到您的应用程序的任何版本中。
然而,它还特别考虑了可扩展性。
例如,如果您需要迁移包或为迁移命令提供选项,您可以扩展类并向 $parameters
数组添加您的参数。
use LeeMason\Larastaller\Tasks\MigrateTask; class MigratePackageTask extends MigrateTask{ protected $parameters = [ '--path' => 'vendor/name/package/migrations' ]; }
这将执行: php artisan migrate --path=vendor/name/package/migrations
安装类
LeeMason\Larastaller\Installation
类负责获取和更新应用程序的 storage_path('installation.json')
文件。
它扩展了Illuminate\Support\Collection
类,所有从storage_path('installation.json')
文件中读取的项目都存储为键 > 值项。
该类可以提供和保存有关安装的数据,并由LeeMason\Larastaller\Installer
类使用,以检查应用程序是否已安装以及是否是最新的。
它在服务容器中注册,因此可以被注入,并提供了以下公共方法:在Collection类方法之上:$installation->isInstalled()
、$installation->isUpdated()
。
如果您需要持久化更改或添加到installation.json文件,请始终确保调用$installation->save()
方法。
安装器类
LeeMason\Larastaller\Installer
类负责将已安装版本与声明的版本匹配,并且通常格式化任务、需求等的配置,以通过http和基于命令的安装方法使用。
它不提供可用于其任务之外的外部公共API。
事件
该包为您提供了许多事件,可以将其挂钩以提供附加功能
LeeMason\Larastaller\Events\AfterInstallEvent(Installer $installer, OutputInterface $output)
上述事件在安装过程之前触发,并传递安装器实例$event->installer
和OutputInterface$event->output
,允许您向安装器发送消息。
LeeMason\Larastaller\Events\BeforeInstallEvent(Installer $installer, OutputInterface $output)
上述事件在安装过程完成后触发,并传递安装器实例$event->installer
和OutputInterface$event->output
,允许您向安装器发送消息。
常见问题解答
为什么不直接使用版本控制?
版本控制很棒,我们已经为该包设计了配置,以最佳方式使用版本控制的功能。
但是,例如git/svn等服务不能
- 在更新时清除缓存
- 在版本之间修改数据库数据
- 提醒需要新的环境变量
- 等
当然,每一项都可以手动完成,甚至可以通过多个artisan命令完成,但用户需要知道这些更改是必要的。
使用larastaller配置保存在版本控制中,任何需要安装它的人都可以简单地运行installer:install
命令,而不需要前面的任务列表。
这会取代composer的需求吗?
不会,我们也不想取代。
这意味着您可以通过一个简单的步骤分发您的应用程序。
简单地将"php artisan installer:install"
添加到您的composer.json文件中的"post-install-command"
数组。
然后,在composer install
之后将发生安装过程。
**如果您更愿意使用Web API,只需与vendor目录一起分发您的应用程序,并指导他们到安装URL。
注意
它仍在早期开发阶段,尚未包含的功能有
Web API用于安装/更新现有安装 事件用于安装/更新
未来
- 添加Web API/路由
- 添加installer:update命令
- 微小的功能改进