marshmallow / button-field
Laravel Nova 字段。
Requires
- php: ^7.3|^8.0
README
Nova 按钮包
安装
您可以通过 composer 安装此包。
composer require marshmallow/button-field
用法
默认情况下,此包将解析在调用 make 方法时提供的列的链接。通过调用 resolveUsing
方法,您可以返回按钮的自己的生成链接。
use Marshmallow\ButtonField\ButtonField; ButtonField::make('Certificate')->resolveUsing(function () { return '___YOUR_LINK_GOES_HERE___'; }),
方法
button()
当您调用 button
方法时,这将返回默认的 Laravel Nova 按钮。这应该与您 Nova 安装中的“更新”和“更新并继续编辑”按钮具有相同的样式。此方法默认调用,因此此行为应该直接可用。
$button_field->button();
target()
您可以通过调用 target
方法来更改按钮的行为。
$button_field->target('_blank'); // DEFAULT $button_field->target('_self');
download()
当您调用 download
方法时,按钮的样式将改变。它将是一个带有旁边下载图标的较小按钮。我们还会在按钮上添加“下载”标签,以便浏览器知道您想要下载某个东西。您可以在本页顶部的截图中查看此示例。
$button_field->download();
setButtonText()
创建的按钮的默认文本是“下载”。您可以通过调用 setButtonText
方法来更改此文本。
$button_field->setButtonText('Go to user profile');
visibleWhen()
如果您希望按钮仅在满足条件时可见,则可以使用 visibleWhen
方法。
$button_field->visibleWhen(function() { // Call methods on your resource return $this->certificateIsAvailable(); }, __('Certificate is not generated yet'));
onClick()
您可以使用 onClick
方法运行对模型的各种操作。这是一个非常强大的方法,允许您执行任何操作!目前,此方法仅适用于文本类型按钮,因此我们必须将其设置为 text()
。请检查下面的示例,了解如何在您的 Nova 资源上实现此操作。
ButtonField::make(__('Send invoice')) ->text() ->setButtonText(__('Send invoice')) ->onClick(SendInvoice::class),
现在我们需要创建一个动作类,当按钮被点击时将运行。您可以在任何您喜欢的位置创建此类。这可能是在 app/Actions/Nova/SendInvoice.php。在此文件中,您创建一个实现 OnClickInterface 接口的类。您需要在类中创建 3 个方法。请检查下面的示例。
<?php namespace App\Actions\Nova; use Exception; use Illuminate\Database\Eloquent\Model; use Marshmallow\ButtonField\Contracts\OnClickInterface; class SendInvoice implements OnClickInterface { public function execute(Model $model): void { // Run your code! } public function success(): string { return __('Invoice is end successfully'); } public function error(Exception $exception): string { return __('Something went wrong: :exception', [ 'exception' => $exception->getMessage(), ]); } }
运行 Nova 动作
现在您可以使用按钮字段运行您的 Nova 动作。这意味着现在可以从表单视图运行 nova 动作。确保动作已在您的资源 actions 方法中注册,然后使用下面的示例代码。
ButtonField::make(__('Nova Action')) ->action( action: new \App\Nova\Actions\DemoAction, resourceId: $this->resource->id, label: 'Run the demo dude!' ),
变更日志
有关最近更改的更多信息,请参阅 变更日志。
测试
composer test
安全
如果您发现任何安全相关的问题,请通过电子邮件 stef@marshmallow.dev 联系我们,而不是使用问题跟踪器。
致谢
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件。