christophrumpel/laravel-command-file-picker

此包允许用户在 Laravel 命令期间从列表中选择一个文件或类。

v1.2.0 2020-12-09 15:35 UTC

README

Latest Version on Packagist Build Status Quality Score Total Downloads

此包允许你在 Laravel 命令期间显示一个文件或类列表以供选择。

Screenshot of the command Screenshot of the command Screenshot of the command

你可能需要此包的原因

在使用 Laravel 命令时,你可能需要在特定的文件或类上运行它们。比如说,你想在你的 Laravel 模型上运行一些操作。在过去,你可能已经将类或文件作为参数传递给命令。这可以工作,但操作起来相当繁琐,容易出错。

此包将通过提示文件或类列表来简化用户的操作。(如上图所示)用户可以轻松选择一个,你可以在命令中使用它。

安装

您可以通过 composer 安装此包

composer require christophrumpel/laravel-command-file-picker

用法

加载类

要向用户显示类列表,您需要使用名为 PicksClasses 的包特性。只需将其添加到您的 Laravel 命令之一中。(请注意,您必须自己创建 Laravel 命令。)

<?php

use Illuminate\Console\Command;


class MyLaravelCommand extends Command
{
  use PicksClasses;
  
  //...

}

之后,您可以通过调用新的 askToPickClasses 方法向用户显示可选择的文件列表

$modelClass = $this->askToPickClasses(base_path('app/Models'));

这将显示所有类并返回一个集合。此集合可以包含所选模型或所有模型(如果您已使用 All 选项)。如果您只需要 Laravel 模型,也可以按如下方式加载它们

$models = $this->askToPickModels();

它将自动在您的 app/Models 路径下查找模型。

加载文件

要向用户显示文件列表,您需要使用名为 PicksFiles 的包特性。只需将其添加到您的 Laravel 命令之一。

<?php

use Illuminate\Console\Command;


class MyLaravelCommand extends Command
{
  use PicksFiles;
  
  //...

}

之后,您可以通过调用新的 askToPickFiles 方法向用户显示可选择的文件列表。您提供的参数是一个目录路径。

$files = $this->askToPickFiles(base_path('app/Models'));

这将显示所有文件并返回一个集合。此集合可以包含所选文件或所有文件(如果您没有选择 All 选项)。

过滤已加载的文件

有时您不希望向用户显示所有找到的文件或类。这时,您可以使用一个过滤器回调来定义要排除哪些结果。以下是一个示例。

$files = $this->askToPickFiles(base_path('app/Models'), function(array $fileInfo) {
    return rand(0,1);
});

第二个参数是过滤器回调,它传递给 Laravel 的集合过滤方法。它允许您遍历所有文件并定义要保留在文件列表中的内容以及要排除的内容。在我们的示例中,决策将是随机的。请注意,$fileInfo 变量将是一个包含有关当前文件一些细节的数组,如路径。对于模型或类,它将包含类名和文件路径。

过滤后的结果将在 Laravel 命令期间显示给用户。

移除 "全部" 选项

如果您希望在显示列表时移除 全部 选项,可以使用额外的参数完成此操作

$files = $this->askToPickFiles(base_path('app/Models'), $filterCallable, $showAllOption);

测试

composer test

变更日志

请参阅 变更日志 了解最近更改的更多信息。

贡献

请参阅CONTRIBUTING获取详细信息。

安全性

如果您发现任何与安全相关的问题,请通过电子邮件christoph@christoph-rumpel.com联系,而不是使用问题跟踪器。

鸣谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件

Laravel包模板

此包是使用Laravel包模板生成的。