laravel nova 在索引页隐藏编辑按钮
laravel nova hide edit button on index page
如何禁用 nova 索引页面上的 edit/delete 按钮并在详细页面中仍然允许,如果我创建一个策略,那将禁用所有地方的操作,我想允许在详细页面中编辑和删除,但只想从索引中删除那些按钮,
正在做类似
的事情
public function update(User $user, Customer $customer)
{
if ( request()->route()->getName('route-name') ) {
return false;
}
}
是正确的方法还是有更好的方法?
您可以定义自定义操作并根据您的要求设置操作可见性。
- 新建操作Class:
# To generate the action class
php artisan nova:action DeleteUserData --destructive
- 设置操作可见性:
/**
* Indicates if this action is only available on the resource index view.
*
* @var bool
*/
public $onlyOnIndex = false;
/**
* Indicates if this action is only available on the resource detail view.
*
* @var bool
*/
public $onlyOnDetail = true;
来源:https://nova.laravel.com/docs/1.0/actions/defining-actions.html#action-visibility
如果您想禁用索引页面上的任何行按钮,请为资源创建一个策略,并在我的情况下对相应的函数创建 return false update()
、
所有其他人 return 正确并在 AuthServiceProvider.php 添加策略
protected $policies = [
Post::class => PostPolicy::class,
];
并在资源 class
public static function authorizable()
{
return true;
}
这将禁用该按钮。
有一个替代方案,只需使用 css。
div[dusk$="-index-component"] table td.td-fit {
display: none !important;
}
我有一个 Leads 资源,我需要隐藏其上的编辑按钮。我在 CSS 中执行了以下操作 - 请参阅此处了解如何 add your own CSS to Nova.
使用我的 Leads 资源的 slug,我可以通过 slug 和资源部分来引用 dusk 属性:
div[dusk="leads-index-component"] table td.td-fit span:last-of-type {
display: none !important;
}
所以您要更改的部分是 leads-index-component
部分 {your-resource-slug}-index-component
此外,如果您想同时隐藏视图和编辑图标,只需删除 :last-of-type
部分:
作为参考,我正在使用 Button Field package 添加自定义按钮以重定向到我自己的自定义工具来管理此资源。
我不隶属于所提供的任何链接。
似乎只有CSS个解决方案,例如:
/* Details page */
div[dusk="users-detail-component"] button[dusk="open-delete-modal-button"],
/* Index page next to each row */
div[dusk="users-index-component"] button[dusk$="-delete-button"],
/* Index page after checking boxes */
div[dusk="users-index-component"] div[dusk="delete-menu"] {
display: none !important;
}
输入您的组件名称,在本例中为 users-
。
涉及授权和策略的其他解决方案不仅会隐藏按钮,还会完全禁用该操作,因此如果需要,您将无法通过自定义操作运行它。
我知道这个线程有点旧,但您也可以从您的 nova 资源中覆盖 authorizedToUpdate
方法,如下所示:
public function authorizedToUpdate(Request $request): bool
{
return "nova-api/{resource}" != $request->route()->uri();
}
这也适用于 authorizedToView
和 authorizedToDelete
。
我想做类似的事情。我不希望编辑按钮出现在索引页上,但我希望操作 运行(并更新资源)。所以我使用了下面的代码:
use Laravel\Nova\Http\Requests\ActionRequest;
...
public function authorizedToUpdate(Request $request)
{
return $request instanceof ActionRequest;
}
如何禁用 nova 索引页面上的 edit/delete 按钮并在详细页面中仍然允许,如果我创建一个策略,那将禁用所有地方的操作,我想允许在详细页面中编辑和删除,但只想从索引中删除那些按钮,
正在做类似
的事情 public function update(User $user, Customer $customer)
{
if ( request()->route()->getName('route-name') ) {
return false;
}
}
是正确的方法还是有更好的方法?
您可以定义自定义操作并根据您的要求设置操作可见性。
- 新建操作Class:
# To generate the action class
php artisan nova:action DeleteUserData --destructive
- 设置操作可见性:
/**
* Indicates if this action is only available on the resource index view.
*
* @var bool
*/
public $onlyOnIndex = false;
/**
* Indicates if this action is only available on the resource detail view.
*
* @var bool
*/
public $onlyOnDetail = true;
来源:https://nova.laravel.com/docs/1.0/actions/defining-actions.html#action-visibility
如果您想禁用索引页面上的任何行按钮,请为资源创建一个策略,并在我的情况下对相应的函数创建 return false update()
、
所有其他人 return 正确并在 AuthServiceProvider.php 添加策略
protected $policies = [
Post::class => PostPolicy::class,
];
并在资源 class
public static function authorizable()
{
return true;
}
这将禁用该按钮。
有一个替代方案,只需使用 css。
div[dusk$="-index-component"] table td.td-fit {
display: none !important;
}
我有一个 Leads 资源,我需要隐藏其上的编辑按钮。我在 CSS 中执行了以下操作 - 请参阅此处了解如何 add your own CSS to Nova.
使用我的 Leads 资源的 slug,我可以通过 slug 和资源部分来引用 dusk 属性:
div[dusk="leads-index-component"] table td.td-fit span:last-of-type {
display: none !important;
}
所以您要更改的部分是 leads-index-component
部分 {your-resource-slug}-index-component
此外,如果您想同时隐藏视图和编辑图标,只需删除 :last-of-type
部分:
作为参考,我正在使用 Button Field package 添加自定义按钮以重定向到我自己的自定义工具来管理此资源。
我不隶属于所提供的任何链接。
似乎只有CSS个解决方案,例如:
/* Details page */
div[dusk="users-detail-component"] button[dusk="open-delete-modal-button"],
/* Index page next to each row */
div[dusk="users-index-component"] button[dusk$="-delete-button"],
/* Index page after checking boxes */
div[dusk="users-index-component"] div[dusk="delete-menu"] {
display: none !important;
}
输入您的组件名称,在本例中为 users-
。
涉及授权和策略的其他解决方案不仅会隐藏按钮,还会完全禁用该操作,因此如果需要,您将无法通过自定义操作运行它。
我知道这个线程有点旧,但您也可以从您的 nova 资源中覆盖 authorizedToUpdate
方法,如下所示:
public function authorizedToUpdate(Request $request): bool
{
return "nova-api/{resource}" != $request->route()->uri();
}
这也适用于 authorizedToView
和 authorizedToDelete
。
我想做类似的事情。我不希望编辑按钮出现在索引页上,但我希望操作 运行(并更新资源)。所以我使用了下面的代码:
use Laravel\Nova\Http\Requests\ActionRequest;
...
public function authorizedToUpdate(Request $request)
{
return $request instanceof ActionRequest;
}