标签: sonata-admin

自定义表单域渲染

我想在sonata管理包中自定义编辑页面中表单字段的呈现, 以包含使用字段文本内容的applet.

我知道我必须configureFormFields在admin类中编辑该函数,但我需要知道3件事:

  • 提供字段表单模板的语法是什么
  • 放模板文件的位置(哪个目录)
  • 模板的外观如何.

forms symfony-2.1 sonata-admin

9
推荐指数
3
解决办法
1万
查看次数

Sonata Admin Bundle One-to-Many关系不保存外国ID

我将SonataAdminBunle与symfony 2.2结合使用时出现问题.我有一个Project实体和一个ProjectImage实体,并指定这两者之间的一对多关系,如下所示:

class Project
{
    /**
     * @ORM\OneToMany(targetEntity="ProjectImage", mappedBy="project", cascade={"all"}, orphanRemoval=true)
     */
    private $images;
}

class ProjectImage
{

    /**
     * @ORM\ManyToOne(targetEntity="Project", inversedBy="images")
     * @ORM\JoinColumn(name="project_id", referencedColumnName="id")
     */
    private $project;
}
Run Code Online (Sandbox Code Playgroud)

我已经配置了ProjectAdmin和ProjectImageAdmin:

class ProjectAdmin extends Admin
{
    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            ->add('title')
            ->add('website')
            ->add('description', 'textarea')
            ->add('year')
            ->add('tags')
            ->add('images', 'sonata_type_collection', array(
                            'by_reference' => false
            ), array(
                            'edit' => 'inline',
                            'inline' => 'table',
                            'sortable' => 'id',
            ))
            ;
    }
}

class ProjectImageAdmin extends Admin
{
    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            ->add('file', …
Run Code Online (Sandbox Code Playgroud)

symfony sonata-admin

9
推荐指数
2
解决办法
2万
查看次数

在Sonata Admin Entity的show模板中添加自定义表单

我想在Sonata Admin show模板中生成一个小表单.到目前为止,我所做的是在自定义CRUD中为从Sonata的默认CRUD扩展的特定实体(顺序)创建函数;

public function approveOrderAction($id = null)
{
    $request = $this->getRequest();

    $id = $request->get($this->admin->getIdParameter());
    $order = $this->admin->getObject($id);

    $approveForm = $this->createFormBuilder($order)
        ->add('reqSecondApprover', 'checkbox', array('label' => 'Require second Approval', 'required' => false))
        ->add('secondApprover', 'choice', array('choices' => Crud::getWhatever(array('Developer')), 'required' => false))
        ->getForm();

    $approveForm->handleRequest($request);

    if ($approveForm->isSubmitted() && $approveForm->isValid()) {
        $secondApproval = $request->request->get('form');
        $approval = $approveForm->getData();

        if (isset($secondApproval['reqSecondApprover'])) {
            $order->setStatus(PmodOrder::STATUS_PARTLY_APPROVED);
        } else {
            $order->setStatus(PmodOrder::STATUS_APPROVED);
            $order->setSecondApprover(null);
        }   

        $em->persist($approval);
        $em->flush();

        return new RedirectResponse($this->admin->generateUrl('show'));
    }

    return $this->render('AppBundle:PmodOrder:order_approve.html.twig', array(
        'order' => $order,
        'form' => $approveForm->createView(),
    ));
}
Run Code Online (Sandbox Code Playgroud)

在我的orderAdmin我有 …

symfony symfony-sonata sonata-admin sonata

9
推荐指数
1
解决办法
1347
查看次数

SonataAdminBundle中的自定义操作

在这个页面上,我找到了如何为自定义操作添加路由.

protected function configureRoutes(RouteCollection $collection) {
    $collection->add('ispremium', $this->getRouterIdParameter().'/ispremium'); 
}
Run Code Online (Sandbox Code Playgroud)

之后,我在Admin类中添加自定义操作:

protected function configureListFields(ListMapper $listMapper)
{
    $listMapper
        ->addIdentifier('id')
        ->add('code', null, array('label' => 'Code'))
        ->add('_action', 'actions', array( 
            'actions' => array(  
                'ispremium' => array(
                    'template' => 'AppMyBundleBundle:Admin:ispremium.html.twig'
                )
            )
        ))
    ;
}
Run Code Online (Sandbox Code Playgroud)

它生成的URL如下:

/app_dev.php/admin/mobispot/discodes/discode/300876/ispremium
Run Code Online (Sandbox Code Playgroud)

我的链接模板:

<a href="{{ admin.generateObjectUrl('ispremium', object) }}">Link</a>
Run Code Online (Sandbox Code Playgroud)

我不知道如何解决这个问题:

  1. 如何为该路由传递定义自定义控制器?现在我有一个错误:

    方法"Sonata\AdminBundle\Controller\CRUDController :: ispremiumAction"不存在.

  2. 我可以使用generateUrl方法更改生成的网址吗?

php symfony symfony-sonata sonata-admin

8
推荐指数
1
解决办法
1万
查看次数

当sonata_type_admin调用时,如何在Sonata的Admin类中获取底层对象?

因此,在Sonata Admin的编辑操作中,我试图根据创建编辑上下文显示不同的表单字段.

也许有些背景先..

我有一个Gallery实体和一个与OneToOne绑定的CoverPhoto实体.

画廊:

/**
 * @ORM\OneToOne(targetEntity="CoverImage", mappedBy="gallery", cascade={"all"}, orphanRemoval=true)
 **/
private $cover;
Run Code Online (Sandbox Code Playgroud)

封面图片:

/**
 * @ORM\OneToOne(targetEntity="Gallery", inversedBy="cover")
 **/
private $gallery; 
Run Code Online (Sandbox Code Playgroud)

这是相应的GalleryAdmin类:

class GalleriesAdmin extends Admin
{
    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
                -> add('name', null, array('label' => 'Nazwa'))
                -> add('category', 'sonata_type_model', array('label' => 'Kategoria'), array('subject' => $this -> getSubject()))
                -> add('cover', 'sonata_type_admin', array('label' => 'Ok?adka'))
                -> add('images', 'sonata_type_collection', array('by_reference' => false, 'label' => 'Powi?zane zdj?cia'), array(
                    'edit' => 'inline',
                    'sortable' => false, …
Run Code Online (Sandbox Code Playgroud)

symfony symfony-sonata sonata-admin

8
推荐指数
2
解决办法
1万
查看次数

Softdeletable行为并真正删除实体

我正在使用带有StofDoctrineExtensionsBundle的DoctrineExtensions来获取软删除行为.

它在我的应用程序的前端非常有效.

在后端我需要"硬"删除实体的选项.

我在管理员控制器中禁用了过滤器(我使用SonataAdmin):

$filters = $this->getModelManager()->getEntityManager($this->getClass())->getFilters();

if (array_key_exists('softdeleteable', $filters->getEnabledFilters())) {
    $filters->disable('softdeleteable');
}
Run Code Online (Sandbox Code Playgroud)

这工作(软删除的实体显示在列表中),但当我尝试删除它时,实体再次被软删除.我怎么能强行"硬"删除?

soft-delete symfony doctrine-orm symfony-2.1 sonata-admin

8
推荐指数
2
解决办法
3792
查看次数

Sonata Admin与文件上传的一对多关系(appendFormFieldElement)

我目前正面临着SonataAdminBundle的挑战,一对多的关系和文件上传.我有一个实体叫Client,一个叫ExchangeFile.一个人Client可以有几个ExchangeFile,所以我们在这里有一对多的关系.我正在使用VichUploaderBundle进行文件上传.

这是Client班级:

/**
 * @ORM\Table(name="client")
 * @ORM\Entity()
 * @ORM\HasLifecycleCallbacks
 */
class Client extends BaseUser
{    
    // SNIP

    /**
     * @ORM\OneToMany(targetEntity="ExchangeFile", mappedBy="client", orphanRemoval=true, cascade={"persist", "remove"})
     */
    protected $exchangeFiles;

    // SNIP
}
Run Code Online (Sandbox Code Playgroud)

这是ExchangeFile班级:

/**
 * @ORM\Table(name="exchange_file")
 * @ORM\Entity
 * @Vich\Uploadable
 */
class ExchangeFile
{
    // SNIP

    /**
     * @Assert\File(
     *     maxSize="20M"
     * )
     * @Vich\UploadableField(mapping="exchange_file", fileNameProperty="fileName")
     */
    protected $file;

    /**
     * @ORM\Column(name="file_name", type="string", nullable=true)
     */
    protected $fileName;

    /** …
Run Code Online (Sandbox Code Playgroud)

php symfony symfony-sonata sonata-admin

8
推荐指数
1
解决办法
6450
查看次数

如何在sonata admin Admin Controller中设置flash消息

我正在寻找一种在sonata管理包的管理控制器中设置flash消息的方法,它们允许在CRUDController中设置flash消息

$this->get('session')->setFlash('sonata_flash_error', 'flash_batch_merge_error');
Run Code Online (Sandbox Code Playgroud)

但不在管理控制器中,

这是我的管理员控制器

use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Route\RouteCollection;

class ConfigAdmin extends Admin
{

protected function configureFormFields(FormMapper $formMapper)
{   

    $formMapper
        ->with('System Settings')
            ->add('Name','text', array('label' => "Configuration Name"))
            ->add('Language', 'choice', array(
                'label' => 'System Language',
                'choices' => array(0 => 'English', 1 => 'Swedish'),
                'preferred_choices' => array(0),
                ))
            ->add('commonmail','text', array('label' => "Common e-Mail"))
            ->add('dateformat','text', array('label' => "Date format"))
            ->add('currencyformat','text', array('label' => "Currency format"))
        ->end()
}

public function postUpdate($object) {

      // here i need to perform some …
Run Code Online (Sandbox Code Playgroud)

php admin symfony flash-message sonata-admin

8
推荐指数
2
解决办法
1万
查看次数

Symfony2:SonataAdminBundle - 如何在管理类中获取表示当前用户的对象?

我使用sonata-admin包.我在PageEntity中与用户(FOSUserBundle)有关系.我想保存创建或更改页面的当前用户.

我的猜测是获取admin类的postUpdate和postPersist方法中的用户对象,并且此对象在setUser方法中传输.

但是如何实现呢?

在google的小组中,我看到了

    public function setSecurityContext($securityContext) {
        $this->securityContext = $securityContext;
    }

    public function getSecurityContext() {
        return $this->securityContext;
    }

    public function prePersist($article) {
        $user = $this->getSecurityContext()->getToken()->getUser();

        $appunto->setOperatore($user->getUsername());
    }
Run Code Online (Sandbox Code Playgroud)

但这不起作用

symfony fosuserbundle sonata-admin

8
推荐指数
2
解决办法
1万
查看次数

在没有SonataUserBundle的Sonata中删除每个用户角色的特定路由

我在Symfony 3中使用了SonataAdminBundle.因为我使用Symfony 3,我仍然无法使用SonataUserBundle.所以我只使用带有FOSUserBundle的SonataAdminBundle.

现在我试图实现的是隐藏每个角色的特定路线.例如,我只有三个角色;

  • 超级管理员
  • 管理员
  • 另一个角色

超级管理员拥有管理员拥有的所有角色,管理员拥有所有第三个角色,第三个显然拥有ROLE_USER.超级管理员应该能够创建新用户并为他分配角色.超级管理员还应该能够更改用户的密码.用户应该能够更改自己帐户的密码.最后,超级管理员应该更改自己的角色和创建新用户的其他角色.

如何在不使用SonataUserBundle的情况下实现此目的.为了删除路线部分我试过这样的事情:

protected function configureRoutes(RouteCollection $collection)
{
    $securityContext = $this->getConfigurationPool()->getContainer()->get('security.authorization_checker');

    if (!$securityContext->isGranted('ROLE_SUPER_ADMIN')) {
        $collection->remove('create');
        $collection->remove('edit');
    }
}
Run Code Online (Sandbox Code Playgroud)

但我想有更好的解决方案.我完全了解有关安全性官方文档,但我对此感到困惑,这是否意味着我必须对我security.yml文件中所有不同管理员的每个角色进行硬编码?没有SonataUserBundle,这甚至可以工作吗?我不想为ACL添加额外的数据库表.

有人可以帮助和/或提供一个很好的例子吗?我会非常感激的.

php symfony sonata-admin sonata-user-bundle

8
推荐指数
1
解决办法
1241
查看次数