下面是一份基于Laravel 8的创建命令行命令的详细攻略:
步骤一: 创建命令
在 Laravel 中,所有的 Artisan 命令都存储在 app/Console/Commands
目录下。如果这个目录不存在,我们可以手动创建。
我们可以使用 make:command
Artisan 命令来创建一个新的命令。这个命令将会在 app/Console/Commands
目录下生成一个新的 PHP 文件,并且其中已经包含了 Artisan 命令所需的基础代码。
执行如下命令:
php artisan make:command SendEmails
这将在 app/Console/Commands
目录下创建一个名为 SendEmails.php
的命令文件。
命令文件开头应该包含下面这段代码,这会告诉 Artisan 命令的名称、描述和可能的参数和选项:
protected $signature = 'command:name';
protected $description = 'Command description';
命令的名称将会是 PHP artisan 后面跟的命令名,比如 php artisan command:name
。描述将会用于在控制台输出帮助信息。
为了方便演示,我们来创建一个打印表格的命令,命令名为 table
,描述为 “打印表格” ,参数为数据表名称。
php artisan make:command TableCommand --command=table
这会在 app/Console/Commands
目录下创建一个名为 TableCommand.php
的命令文件,并指定了命令,同时在默认生成的基础代码中,我们已经看到了 $signature
和 $description
的设置。
步骤二: 实现命令
接下来,在 TableCommand.php
文件中实现 handle()
方法,该方法是命令执行的核心部分,因此,实现应该在该方法中完成。
在本示例中,我们将获取传递给命令的数据表名称,并使用 Schema
facade 中的 getColumnListing
方法列出数据库中的列。然后,我们使用 Symfony\Component\Console\Helper\Table
类来渲染表格。
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Schema;
use Symfony\Component\Console\Helper\Table;
class TableCommand extends Command
{
protected $signature = 'table {tableName}';
protected $description = '打印数据库数据表';
use InteractsWithConsole;
public function handle()
{
$table_name = $this->argument('tableName');
$columns = Schema::getColumnListing($table_name);
$table = new Table($this->getOutput());
$table->setHeaders($columns)->addRows([$columns]);
$table->render();
}
}
在上面的代码中,我们首先获取了传递给 table
命令的 tableName
参数。然后使用 $table_name
获取到了数据表名称,下一步我们使用 Schema::getColumnListing
方法,获取数据表的列,这个方法返回一个数组。接下来的代码就是渲染获取到的表格数据了。
步骤三: 注册命令
接下来我们需要将我们新创建的命令注册到 Artisan 中。Laravel 为此提供了两种方式:通过服务提供者和通过 RouteServiceProvider。
在本示例中,我们将使用第二种方式,通过 RouteServiceProvider 注册命令。
我们需要在 RouteServiceProvider.php
文件中注册我们新创建的命令。
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use App\Console\Commands\TableCommand;
class RouteServiceProvider extends ServiceProvider
{
protected $commands = [
TableCommand::class
];
public function boot()
{
parent::boot();
}
public function register()
{
$this->commands(
$this->commands
);
}
}
在上面的代码中,我们将新创建的 TableCommand
命令添加到 $commands
数组中。最后,你需要将 RouteServiceProvider
类拷贝到你的项目中。
步骤四: 执行命令
我们已经拥有了使用 Artisan 运行我们新创建的命令的一切准备工具。为了执行这个新命令,我们需要使用 Artisan 的命令行工具执行该命令。
为了列出所有的可用 Artisan 命令,我们只需要在终端中执行以下命令:
php artisan list
你会看到我们新创建的 table
命令,并且你可以执行它:
php artisan table users
这将会展示一个名为 users 的表格,该表格包含 users
数据表中的所有列。
示例输出:
+----+------------+-------------+--------+-----------+---------------------+---------------------+
| id | name | email | mobile | verified | created_at | updated_at |
+----+------------+-------------+--------+-----------+---------------------+---------------------+
| 1 | John Doe | john@doe.com| 123456 | 1 | 2021-08-31 17:20:44 | 2021-08-31 17:20:44 |
| 2 | Jane Doe | jane@doe.com| 654321 | 0 | 2021-08-31 17:20:44 | 2021-08-31 17:20:44 |
| 3 | Adam Smith | adam@smith.com | 333444 | 1 | 2021-08-31 17:20:44 | 2021-08-31 17:20:44 |
+----+------------+-------------+--------+-----------+---------------------+---------------------+
总结
如上所述,Laravel 中创建并注册 Artisan 命令并不复杂。我希望本攻略能够帮助你更好地理解 Laravel Artisan,并为你创建自己的 Artisan 命令提供一些指导。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:laravel 创建命令行命令的图文教程 - Python技术站