标签: symfony-sonata

使用sonata_type_admin嵌入式管理员停止SonataAdmin/Symfony2创建空对象

首先,我不确定这是Sonata问题还是Symfony2问题,这是我第一次使用Sf2表单来编辑关系.

这是问题所在:

我有两个课程,让我们称之为旧的最爱:CarWheel.Car与Wheel有一个可选的一对一关系(举个例子,就这么说吧......).我已经设置了SonataAdmin,CarAdmin其中包含一个嵌入WheelAdmin使用的类,sonata_type_admin并尝试创建一个Car而不输入任何Wheel数据.

但是,在提交时(在$ form-> bind()/ $ form-> submit()的某个地方,我可以跟踪)Symfony和/或Sonata实例化一个Wheel并试图保持它(其所有值为null) .由于Wheel具有一些非null约束,因此抛出DBALException,抱怨您无法使用null值来插入Wheel.

这很顽皮,我想阻止它发生.如果我没有输入Wheel的任何细节,我不希望幻影轮对我的代码和数据库造成威胁.我期望的是,如果我没有输入任何数据,就没有任何内容可以插入/保留,所以它不会被单独留下.但这不是正在发生的事情...... 任何想法如何将其驯服成合情合理的东西?


这是长版本,包含代码块和所有内容:

ORM定义首先:

# MyNS\MyBundle\Resources\Config\Doctrine\Car.orm.yml
MyNS\MyBundle\Entity\Car:
  type: entity
  repositoryClass: MyNS\MyBundle\Entity\Repositories\CarRepository
  table: test_cars
  id:
    id:
      type:                     integer
      generator:                { strategy: AUTO }
  fields:
    color:
      type:                     string
      length:                   50
    owner:
      type:                     string
      length:                   50
      nullable:                 true
  oneToOne:
    leftFrontWheel:
      targetEntity:             Wheel
      cascade:                  [ persist ]
      joinColumn:
        name:                   leftFrontWheelId
        referencedColumnName:   id


# MyNS\MyBundle\Resources\Config\Doctrine\Wheel.orm.yml
MyNS\MyBundle\Entity\Wheel:
  type: entity
  repositoryClass: MyNS\MyBundle\Entity\Repositories\WheelRepository
  table: test_wheels …
Run Code Online (Sandbox Code Playgroud)

symfony symfony-sonata sonata-admin symfony-2.3

15
推荐指数
1
解决办法
3002
查看次数

Sonata管理员捆绑订单

如何更改SonataAdminBundle中的默认实体顺序以进行列表操作?


回答:)将此添加到您的管理类

protected $datagridValues = array(
    '_page' => 1,
    '_sort_order' => 'DESC', // sort direction 
    '_sort_by' => 'id' // field name 
);
Run Code Online (Sandbox Code Playgroud)

symfony symfony-sonata sonata-admin sonata

14
推荐指数
2
解决办法
6882
查看次数

PHP致命错误:第47行的/var/www/znata.com/app/AppKernel.php中找不到类'Application\Sonata\MediaBundle\ApplicationSonataMediaBundle'

我按照这个文档来安装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)

你知道如何解决这个问题吗?

symfony symfony-sonata symfony-2.1 sonata-admin

13
推荐指数
3
解决办法
8231
查看次数

扩展Sonata用户包并添加新字段

我正在扩展Sonata用户包并在新用户实体中创建一些额外的字段.这些字段仅在用户下的Sonata管理区域内更新,因此不需要在编辑配置文件表单中提供这些字段.我无法通过Sonata用户管理器更新这些字段,并尝试了几种不同的方法在Application\Sonata\UserBundle中扩展/实现该类.有没有人遇到过这个,可以给我一个教程或一步一步的过程,以最简洁的方式来扩展新的用户实体?

php symfony symfony-sonata

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

Symfony2 Sonata Admin仅将属性显示为readyonly文本

我的实体上有一些不可变的属性来管理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"会将输入字段替换为下拉列表.那么,这里最好的方法是什么?

php symfony symfony-sonata sonata-admin

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

Sonata Admin:添加自定义触发器/操作以列出/编辑操作

我正在使用SonataAdminBundle我的应用程序中管理实体.该网站的管理员可以添加视频,其中一些首先需要由他们的扬声器批准.已经有一个授权系统正在运行 - 我有一个工作代码,它将生成一个特殊链接,并通知可以批准或拒绝视频的发言人,并自动通知管理员.

我想自定义我的管理部分,因此ask for authorization视频旁边会有一个按钮.我可以在list action(/admin/acme/videos/list)或右边nav(/admin/acme/videos/x/edit/)中的某个编辑操作中使用它

这样做的最佳方法是什么?文档对块自定义说的很少,但我发现这个例子可能是我正在寻找的东西,但我无法弄清楚如何使用它.

一个选项是使用preUpdate钩子,并为编辑操作添加一个复选框,但按钮会更好.

php symfony symfony-sonata sonata-admin

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

IntlDateFormatter :: format():datefmt_format:获取数组或整数时间戳值或DateTime对象(SonataSanBox)

我安装了SonataAdmin Bundle.一切正常,但是当我从仪表板添加任何用户时,它会抛出一个警告:

警告:IntlDateFormatter :: format():datefmt_format:在C:\ wamp\www\sonata-sandbox\vendor\symfony\symfony\src\Symfony\Component\Form \中获取数组或整数时间戳值或DateTime对象第260行的Extension\Core\Type\DateType.php

php intl symfony-sonata sonata-admin symfony-2.3

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

将自定义Sonata页面路由添加到导航栏

我已经创建了一个自定义的Sonata页面

简单的路线

medapp_adminStreamCommands:
    path:     /admin/stream
    defaults: { _controller: MedAppBundle:VideoChat/VideoChat:adminStreamCommands }
Run Code Online (Sandbox Code Playgroud)

返回管理池的控制器

  public function adminStreamCommandsAction(Request $request)
    {

        return $this->render('@MedApp/AdminSonata/Stream/stream_commands.html.twig', array(
            'admin_pool' => $this->get('sonata.admin.pool')));
    }
Run Code Online (Sandbox Code Playgroud)

普通视图模板

{% extends '@MedApp/AdminSonata/standard_layout.html.twig' %}

{% block content %}
foobar
{% endblock content 
Run Code Online (Sandbox Code Playgroud)

这是有效的,我可以在我的网站上访问它/admin/foo,我得到一个页面,其中包含Sonata管理模板和我的'foobar'内容.

我的问题是,如何在不修改默认模板的情况下将此路线添加到左侧和顶部导航栏?这是因为左侧菜单由KNP菜单呈现:

{% block side_bar_nav %}
    {% if app.user and is_granted('ROLE_SONATA_ADMIN') %}
        {{ knp_menu_render('sonata_admin_sidebar', {template: admin_pool.getTemplate('knp_menu_template')}) }}
    {% endif %}
{% endblock side_bar_nav %}
Run Code Online (Sandbox Code Playgroud)

我不知何故需要添加我的新页面以通过此菜单呈现.

通常,页面是通过服务添加的,但这些页面是在实体之上构建的:

servicename:
     class: Bundle\Class
     arguments: [~, Bundle\Entity\Entityname, ~]
     tags:
         - { name: sonata.admin, manager_type: orm, group: admin, …
Run Code Online (Sandbox Code Playgroud)

php symfony symfony-sonata sonata-admin

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

在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
查看次数

FOSRestbundle,JMS Serializer和SonataMediaBundle返回图像的公共URL

我正在尝试通过FOSRestBundle和JMS Serializer将带有ManyToOne链接的JSON对象('Module')返回到Sonata\MediaBundle\Entity.我应该怎么做呢?

这是我做过的黑客攻击,但不认为这是最好的做法.

class Module
{
    ...
    /**
     * @var Application\Sonata\MediaBundle\Entity\Media
     *
     * @ORM\ManyToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Media",  inversedBy="module")
     * @ORM\JoinColumn(name="hero_image_id", referencedColumnName="id")
     * @JMS\Expose()
     */
    private $heroImage;
    ...
}

class Media extends BaseMedia
{
   ...
   /**
     * A Quick hack not the best method.
     *
     * @JMS\VirtualProperty
     * @JMS\SerializedName("url")
     *
     * @return string
     */
    public function getUrlMethod()
    {
        global $kernel;

        $imageProvider = $kernel->getContainer()->get('sonata.media.provider.image');

        return $imageProvider->generatePublicUrl($this, 'reference');
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑 感谢Tautrimas Pajarskas和他提到的帖子.这是班级.

<?php
namespace AXO\APIBundle\Listener\Serialization;

use JMS\DiExtraBundle\Annotation\Service;
use JMS\DiExtraBundle\Annotation\Tag;
use JMS\DiExtraBundle\Annotation\Inject;
use JMS\DiExtraBundle\Annotation\InjectParams; …
Run Code Online (Sandbox Code Playgroud)

jms symfony-sonata jmsserializerbundle

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