如何更改SonataAdminBundle中的默认实体顺序以进行列表操作?
回答:)将此添加到您的管理类
Run Code Online (Sandbox Code Playgroud)protected $datagridValues = array( '_page' => 1, '_sort_order' => 'DESC', // sort direction '_sort_by' => 'id' // field name );
我按照这个文档来安装SonataMediaBundle但是我收到了这个错误:
PHP Fatal error: Class 'Application\Sonata\MediaBundle\ApplicationSonataMediaBundle' not found in /var/www/znata.com/app/AppKernel.php on line 47
Run Code Online (Sandbox Code Playgroud)
使用sonata命令后生成应用程序:
php app/console sonata:easy-extends:generate SonataMediaBundle
Run Code Online (Sandbox Code Playgroud)
新目录生成于:
apps/Application/Sonata/MediaBundle
Run Code Online (Sandbox Code Playgroud)
一切都已完成,但当我在AppKernel.php中注册生成的应用程序时,我收到了该错误.
public function registerbundles()
{
return array(
...
new Application\Sonata\MediaBundle\ApplicationSonataMediaBundle(),
...
);
}
Run Code Online (Sandbox Code Playgroud)
你知道如何解决这个问题吗?
我开始在Symfony2.1应用程序中使用SonataAdminBundle.我开发了所有类,现在我希望添加角色以防止查看,列出和编辑对这些用户组(例如非管理员用户)的操作.Admin
请注意,我不使用SonataUserBundle(派生自FOSUserBundle),我想使用sonata.admin.security.handler.roleSonata提供的安全处理程序:ACL对我的小项目来说功能太强大(并且提供了大量开销).
我自己的UserBundle提供User类和Group类(最后一个用于指定每个用户的角色).角色层次结构在我的security.yml文件中提供,例如:
security:
role_hierarchy:
ROLE_POST_AUTHOR: ROLE_USER
ROLE_ADMIN: [ ROLE_USER, ROLE_POST_AUTHOR]
ROLE_SUPER_ADMIN: [ ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]
Run Code Online (Sandbox Code Playgroud)
现在,我通过指定安全处理程序来配置config.yml文件
sonata_admin:
security:
handler: sonata.admin.security.handler.role
Run Code Online (Sandbox Code Playgroud)
在官方的文档更侧重于如何使用ACL和SonataUserBundle,所以我不知道怎么我的角色从链接security.yml与SonataAdminBundle.
PS:类似的问题是:SonataAdminBundle安全角色.
我正在使用Sonata Admin并且我有一个类别的字段,我需要像select中的树一样按顺序显示它们:
<select>
<option>Category father-1</option>
<option>--Category child-1-1</option>
<option>--Category child-1-2</option>
<option>--Category child-1-3</option>
<option>----Category child-1-3-1</option>
<option>----Category child-1-3-2</option>
<option>--Category child-1-4</option>
<option>--...</option>
<option>Category father-2</option>
</select>
Run Code Online (Sandbox Code Playgroud)
这是可能的?我试过它在'choice_list'中包含一个getTreeCatsArray方法中的数组生成:
protected function configureFormFields(FormMapper $formMapper)
{
$tree_cat_array = $this->em->getRepository('MyBundle:Category')->getTreeCatsArray();
$formMapper
->add('category', 'sonata_type_model', array(
'empty_value' => '',
'choice_list' => $tree_cat_array));
}
Run Code Online (Sandbox Code Playgroud)
这显示错误:
The option "choice_list" with value "Array" is expected to be of type "null", "Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceListInterface"
Run Code Online (Sandbox Code Playgroud)
我不确定是否必须使用字段类型'sonata_type_model'或'choice'
我正在使用SonataAdmin(和Symfony2)来管理我的实体.我在一个步骤和许多任务之间有一个oneToMany关系.由于一个步骤可以包含许多任务,因此当我创建一个步骤时,我希望能够创建许多任务,并且我希望将这些任务链接到此步骤.为此,我创建了所有正确的管理类(一个用于Task,一个用于Step).
这就是我做的那些导致我的问题.当我尝试创建一个Step时,我可以创建任务甚至重新排序它们,这很棒,并且全部由SonataAdminBundle完成.当我单击"保存"时,所有内容都保存在数据库中,但在数据库中,步骤的ID未在"任务"行中设置.因此,任务没有链接到步骤...
这是我的Step的管理类:
<?php
// src/Acme/DemoBundle/Admin/PostAdmin.php
namespace IMA\ProcessManagementBundle\Admin;
use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;
class StepAdmin extends Admin
{
// Fields to be shown on create/edit forms
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('name', 'text', array('label' => 'Nom de l\'étape'))
->add('tasks', 'sonata_type_collection', array(), array(
'edit' => 'inline',
'inline' => 'table',
'sortable' => 'positionNumber'
))
->add('positionNumber', 'integer', array('label' => 'Position'))
;
}
// Fields to be shown on filter forms
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('name')
;
} …Run Code Online (Sandbox Code Playgroud) 我正在使用Symfony 2.7和Sonata Admin Bundle来管理一些产品和产品图像.我使用了Sonata Admin Cookbook食谱:https://sonata-project.org/bundles/admin/master/doc/cookbook/recipe_file_uploads.html用于图像.
由于图片必须具有与之关联的产品ID,因此我想禁用Sonata管理信息中心和顶部工具栏中的"添加新图片"链接,因此任何上传的图片都会包含相关产品.实际上,唯一允许添加图像的地方是产品添加/编辑页面.
根据这里找到的一些答案,我试图删除这样的路线:Sonata Admin Dashboard:为每个实体配置操作
protected function configureRoutes(RouteCollection $collection)
{
$container = $this->getConfigurationPool()->getContainer();
if ($container->get('request')->get('_route') == 'sonata_admin_dashboard') {
$collection->remove('create');
}
}
Run Code Online (Sandbox Code Playgroud)
但是这个解决方案并不好,因为如果在我访问管理仪表板时初始化缓存,则路径会在任何地方被删除,但如果缓存在不同的页面上初始化,则路由将出现在所有页面上,包括仪表板,因为如果在显示链接时路径存在,Sonata Admin会在模板中验证.
所以,我需要存在的路由并删除链接.这可以使用配置完成,还是我必须重写模板?
我在奏鸣曲管理编辑表单中实现多对多关系时遇到问题,具有以下结构.
purchase (id, total_price, discount, created_at)
purchase_product (purchase_id, product_id, quantity)
product (id, title, desc, price, thumbnail, created_at)
Run Code Online (Sandbox Code Playgroud)
我见过很多线程,并尝试过其中列出的解决方案.我试过了
->add('products', 'sonata_type_model', array('by_reference' => false))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
No entity manager defined for class Doctrine\ORM\PersistentCollection
Run Code Online (Sandbox Code Playgroud)
然后,当我找不到解决这个问题的方法时,我切换到了
->add('products', 'sonata_type_collection', array(), array('edit' => 'inline', 'inline' => 'table')
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
INVALID MODE type : sonata_type_collection - mapping : 8
Run Code Online (Sandbox Code Playgroud)
我也无法弄清楚如何从purchase_product表中获取和显示数量.
任何指针和帮助都非常感谢.
我正在使用symfony2和sonata-admin包进行应用程序.
public function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('id')
->add('fromDate');
Run Code Online (Sandbox Code Playgroud)
它显示这样的时间
September 1, 2013 02:00
Run Code Online (Sandbox Code Playgroud)
所以我改变了
- ->add('fromDate');
+ ->add('fromDate',null,array('format' => 'yyyy-MM-dd HH:mm:ss'))
Run Code Online (Sandbox Code Playgroud)
但它仍然显示相同.
请给我如何使用格式进行时间显示?
我的实体上有一些不可变的属性来管理sonata-admin包.
我想在实体的编辑视图中显示它们,但不想提供任何改变它的机制(例如,值不应在输入字段内)
除了这个,我找不到任何东西:
$formMapper
->add('post', 'entity',
array(
'label' => 'Some post',
'attr' => array(
'readonly' => true,
'disabled' => true
),
'class' => 'Acme\DemoBundle\Entity\Post'
)
)
;
Run Code Online (Sandbox Code Playgroud)
我尝试过了有read_only,readonly,disabled等所有的东西.它看起来不错,它现在位于下拉列表中(因为它是一个实体),我无法修改它.
但我甚至不希望如此.我真的需要它作为文本(当前的一个).
特别是如果你使用具有softdeletable,timestampable的DoctrineExtensions,这很烦人,因为每次"保存"也会保存表单数据.
将类型更改为"text"而不是"entity"会将输入字段替换为下拉列表.那么,这里最好的方法是什么?
sonata-admin ×10
symfony ×10
php ×3
symfony-2.1 ×2
dashboard ×1
many-to-many ×1
roles ×1
sonata ×1
twig ×1