Sonata Admin - 禁用列表视图
Sonata Admin - Disable list view
我遇到了 Sonata Admin 的问题。有没有办法禁用 "list view" ?我想获取数据库中的第一个实体,并在单击边栏中的 link 时继续它。但不是所有条目。
有干净的方法吗? (我有想法在自定义控制器中检查实体,并根据实体重定向到列表视图或编辑视图,但这并不是真的 clean)
如果您想为您的列表视图执行自定义查询,您可以在您的管理 class 中覆盖 createQuery 方法,如下所示:
class EntityAdmin
{
public function createQuery($context = 'list')
{
$query = parent::createQuery($context);
$query->andWhere(
$query->expr()->eq($query->getRootAlias() . '.id', ':id')
);
$query->setParameter('id', 1);
return $query;
}
}
您的列表视图中将只有您的第一个实体。
更新
您可以覆盖 standard_layout.html.twig 以更改边栏中的 link :
首先您需要设置模板所在的位置:
app/config/config.yml
sonata_admin:
templates:
layout: ApplicationSonataAdminBundle::standard_layout.html.twig
更改边栏的行为,对于 Sonata Admin 2.3,您可以这样做:
src/Application/Sonata/AdminBundle/Resources/Views/standard_layout.html.twig l.224
<ul class="treeview-menu{% if active %} active{% endif %}">
{% for admin in group.items %}
{% if admin.code == 'sonata.admin.entity' and
admin.hasroute('edit') and
admin.isGranted('EDIT') %}
<li{% if app.request.get('_sonata_admin') == admin.code %} class="active"{% endif %}><a href="{{ admin.generateUrl('edit', {'id' : 1}) }}"><i class="fa fa-angle-double-right"></i> {{ admin.label|trans({}, admin.translationdomain) }}</a></li>
{% else %}
{% if admin.hasroute('list') and admin.isGranted('LIST') %}
<li{% if app.request.get('_sonata_admin') == admin.code %} class="active"{% endif %}><a href="{{ admin.generateUrl('list')}}"><i class="fa fa-angle-double-right"></i> {{ admin.label|trans({}, admin.translationdomain) }}</a></li>
{% endif %}
{% endif %}
{% endfor %}
</ul>
您必须将 'sonata.admin.entity' 更改为 identifier of your admin service。
此外,如果您想删除对列表的访问权限,您应该在管理员中添加 class
use Sonata\AdminBundle\Route\RouteCollection;
class EntityAdmin
{
protected function configureRoutes(RouteCollection $collection)
{
$collection->remove('list');
}
}
我遇到了 Sonata Admin 的问题。有没有办法禁用 "list view" ?我想获取数据库中的第一个实体,并在单击边栏中的 link 时继续它。但不是所有条目。
有干净的方法吗? (我有想法在自定义控制器中检查实体,并根据实体重定向到列表视图或编辑视图,但这并不是真的 clean)
如果您想为您的列表视图执行自定义查询,您可以在您的管理 class 中覆盖 createQuery 方法,如下所示:
class EntityAdmin
{
public function createQuery($context = 'list')
{
$query = parent::createQuery($context);
$query->andWhere(
$query->expr()->eq($query->getRootAlias() . '.id', ':id')
);
$query->setParameter('id', 1);
return $query;
}
}
您的列表视图中将只有您的第一个实体。
更新
您可以覆盖 standard_layout.html.twig 以更改边栏中的 link :
首先您需要设置模板所在的位置:
app/config/config.yml
sonata_admin:
templates:
layout: ApplicationSonataAdminBundle::standard_layout.html.twig
更改边栏的行为,对于 Sonata Admin 2.3,您可以这样做:
src/Application/Sonata/AdminBundle/Resources/Views/standard_layout.html.twig l.224
<ul class="treeview-menu{% if active %} active{% endif %}">
{% for admin in group.items %}
{% if admin.code == 'sonata.admin.entity' and
admin.hasroute('edit') and
admin.isGranted('EDIT') %}
<li{% if app.request.get('_sonata_admin') == admin.code %} class="active"{% endif %}><a href="{{ admin.generateUrl('edit', {'id' : 1}) }}"><i class="fa fa-angle-double-right"></i> {{ admin.label|trans({}, admin.translationdomain) }}</a></li>
{% else %}
{% if admin.hasroute('list') and admin.isGranted('LIST') %}
<li{% if app.request.get('_sonata_admin') == admin.code %} class="active"{% endif %}><a href="{{ admin.generateUrl('list')}}"><i class="fa fa-angle-double-right"></i> {{ admin.label|trans({}, admin.translationdomain) }}</a></li>
{% endif %}
{% endif %}
{% endfor %}
</ul>
您必须将 'sonata.admin.entity' 更改为 identifier of your admin service。
此外,如果您想删除对列表的访问权限,您应该在管理员中添加 class
use Sonata\AdminBundle\Route\RouteCollection;
class EntityAdmin
{
protected function configureRoutes(RouteCollection $collection)
{
$collection->remove('list');
}
}