ivoba / console-service-provider
Silex 的控制台服务提供商
3.0.1
2016-05-19 10:29 UTC
Requires
- php: >=5.5
- silex/silex: ~2.0
- symfony/console: ~3.0
Requires (Dev)
- phpunit/phpunit: ^4.8
This package is auto-updated.
Last update: 2024-09-10 21:31:00 UTC
README
为 Silex 提供 Symfony\Component\Console
基础的控制台。
致谢
此项目基于 https://github.com/KnpLabs/ConsoleServiceProvider,该项目已不再维护。
安装
将 ivoba/console-service-provider
添加到您的 composer.json
中,并注册服务
<?php use Ivoba\Silex\Provider\ConsoleServiceProvider; $app->register(new ConsoleServiceProvider(), [ 'console.name' => 'MyApplication', 'console.version' => '1.0.0', 'console.project_directory' => __DIR__.'/..' ]); ?>
您现在可以将 console
可执行文件复制到您认为合适的位置,并根据您的需求进行修改。您需要一种方法来获取您的 Silex 应用程序,最常见的方法是从您的引导程序返回它。
<?php $app = new Silex\Application(); // your beautiful silex bootstrap return $app; ?>
在本文档的其余部分,我们将假设您确实有一个 app
目录,因此 console
可执行文件将位于 app/console
。
用法
就像任何基于 Symfony\Component
的控制台一样使用控制台
$ app/console my:command
编写命令
您的命令应该扩展 Ivoba\Silex\Command\Command
以访问以下两个有用的命令
getSilexApplication
,它返回 Silex 应用程序getProjectDirectory
,它返回您的项目根目录(如之前配置的)
我知道,这需要学习很多东西,但这是值得的。
注册命令
有两种方式可以将命令注册到控制台应用程序中。
直接从 console
可执行文件访问控制台应用程序
打开 app/console
,并将您的命令直接放入控制台应用程序中
#!/usr/bin/env php <?php set_time_limit(0); $app = require_once __DIR__.'/bootstrap.php'; use My\Command\MyCommand; $application = $app['console']; $application->add(new MyCommand()); $application->run(); ?>
使用事件调度器
这种方式旨在由提供者开发者使用,并以简单三步的方式暴露了一种无侵入的注册命令的方式
- 注册对
ConsoleEvents::INIT
事件的监听器 - ???
- 盈利!
示例
<?php use My\Command\MyCommand; use Ivoba\Silex\Console\ConsoleEvents; use Ivoba\Silex\Console\ConsoleEvent; $app['dispatcher']->addListener(ConsoleEvents::INIT, function(ConsoleEvent $event) { $app = $event->getApplication(); $app->add(new MyCommand()); }); ?>