如何将 artisan 命令添加到我的包 laravel
how to add artisan command to my package laravel
所以我在 Laravel 5.4 中开发了一个自定义包,我添加了我的路线、我的控制器,但我不知道如何添加 artisan 命令,这是我的代码:
namespace MyPackage;
use Illuminate\Support\ServiceProvider;
class MyPackageServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
include __DIR__.'/routes.php';
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->make('MyPackage\Controllers\MyPackageServiceController');
}
}
通常在通常情况下,我添加一个新的artisan命令并将其添加到app/Console/Commands/Kernel。php,那么我怎么能在我的包裹里做那个?
我在项目中的实现方式是在 app/Console/Kernel.php
中添加 Kernel.php
class 扩展 ConsoleKernel
,然后在单独的 [=36] 中添加命令及其功能=]es 在 app/Console/Commands/
中,有一个受保护的变量签名 protected $signature = 'import:zip {path : Zip code file path}';
,它包含命令 I'll post both kernel.php 和一个命令文件 here .
这就是我的 kernel.php 的样子
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
\App\Console\Commands\ProcessZip5UniqueChanges::class,
\App\Console\Commands\ProcessZip5NonUniqueChanges::class,
\App\Console\Commands\ImportZipCodes::class
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')
// ->hourly();
}
/**
* Register the Closure based commands for the application.
*
* @return void
*/
protected function commands()
{
require base_path('routes/console.php');
}
}
?>
这是我的命令之一 \App\Console\Commands\ProcessZip5UniqueChanges::class
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Database\QueryException;
class ImportZipCodes extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'import:zip {path : Zip code file path}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Import zip codes';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$path = $this->argument('path');
if(file_exists($path)){
$this->import($path);
} else {
$this->error('File not exists');
}
}
?>
现在我可以 运行 php artisan import:zip /path/to/the/uploaded/file
,希望这对您有所帮助
编辑
在打包时尝试这样,因为命令应该是自动加载的
<?php
namespace Vendor\Package;
class MyServiceProvider extends ServiceProvider {
protected $commands = [
'Vendor\Package\Commands\MyCommand::Class',
'Vendor\Package\Commands\FooCommand::Class',
'Vendor\Package\Commands\BarCommand::Class',
];
public function register(){
$this->commands($this->commands);
}
}
?>
您可以像绑定任何其他 class 一样绑定它,但使用前缀 command.
到实际的命令名称。
如果你的命令名称是mycommand
,那么注册就是这样。
$this->app->singleton('command.mycommand', function () {
return new MyCommand;
});
根据 laravel 如何注册其命令找到此信息。
vendor/laravel/framework/src/Illuminate/Foundation/Providers/ArtisanServiceProvider.php
对于 Laravel 5.3 及更高版本,在 PackageServiceProvider 的启动方法中添加以下内容。确保将 'SetupCommand' 更改为您的命令 class name
if ($this->app->runningInConsole()) {
$this->commands([
SetupCommand::class
]);
}
确保你已经像
一样导入了你的命令
use vendor\package\Commands\SetupCommand;
安装包后,您将在 php artisan 命令列表中找到您的命令
所以我在 Laravel 5.4 中开发了一个自定义包,我添加了我的路线、我的控制器,但我不知道如何添加 artisan 命令,这是我的代码:
namespace MyPackage;
use Illuminate\Support\ServiceProvider;
class MyPackageServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
include __DIR__.'/routes.php';
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->make('MyPackage\Controllers\MyPackageServiceController');
}
}
通常在通常情况下,我添加一个新的artisan命令并将其添加到app/Console/Commands/Kernel。php,那么我怎么能在我的包裹里做那个?
我在项目中的实现方式是在 app/Console/Kernel.php
中添加 Kernel.php
class 扩展 ConsoleKernel
,然后在单独的 [=36] 中添加命令及其功能=]es 在 app/Console/Commands/
中,有一个受保护的变量签名 protected $signature = 'import:zip {path : Zip code file path}';
,它包含命令 I'll post both kernel.php 和一个命令文件 here .
这就是我的 kernel.php 的样子
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
\App\Console\Commands\ProcessZip5UniqueChanges::class,
\App\Console\Commands\ProcessZip5NonUniqueChanges::class,
\App\Console\Commands\ImportZipCodes::class
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')
// ->hourly();
}
/**
* Register the Closure based commands for the application.
*
* @return void
*/
protected function commands()
{
require base_path('routes/console.php');
}
}
?>
这是我的命令之一 \App\Console\Commands\ProcessZip5UniqueChanges::class
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Database\QueryException;
class ImportZipCodes extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'import:zip {path : Zip code file path}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Import zip codes';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$path = $this->argument('path');
if(file_exists($path)){
$this->import($path);
} else {
$this->error('File not exists');
}
}
?>
现在我可以 运行 php artisan import:zip /path/to/the/uploaded/file
,希望这对您有所帮助
编辑
在打包时尝试这样,因为命令应该是自动加载的
<?php
namespace Vendor\Package;
class MyServiceProvider extends ServiceProvider {
protected $commands = [
'Vendor\Package\Commands\MyCommand::Class',
'Vendor\Package\Commands\FooCommand::Class',
'Vendor\Package\Commands\BarCommand::Class',
];
public function register(){
$this->commands($this->commands);
}
}
?>
您可以像绑定任何其他 class 一样绑定它,但使用前缀 command.
到实际的命令名称。
如果你的命令名称是mycommand
,那么注册就是这样。
$this->app->singleton('command.mycommand', function () {
return new MyCommand;
});
根据 laravel 如何注册其命令找到此信息。
vendor/laravel/framework/src/Illuminate/Foundation/Providers/ArtisanServiceProvider.php
对于 Laravel 5.3 及更高版本,在 PackageServiceProvider 的启动方法中添加以下内容。确保将 'SetupCommand' 更改为您的命令 class name
if ($this->app->runningInConsole()) {
$this->commands([
SetupCommand::class
]);
}
确保你已经像
一样导入了你的命令use vendor\package\Commands\SetupCommand;
安装包后,您将在 php artisan 命令列表中找到您的命令