【问题标题】:Add constraints in upload image : SonataMediaBundle在上传图片中添加约束:SonataMediaBundle
【发布时间】:2014-09-06 21:13:57
【问题描述】:

如何添加限制来上传图片,例如:最大尺寸,错误信息,sonata_media 的配置中没有。

非常感谢。

【问题讨论】:

    标签: symfony symfony-sonata sonata-media-bundle


    【解决方案1】:

    首先,您将根据链接使用 CompilerPassInterface 组件覆盖 SonataMediaBundle 的 MediaAdmin 类:

    Overriding the part of bundle

    假设你在 AcmeDemoBundle 中:

          <?php
    
           namespace Acme\DemoBundle\DependencyInjection;
    
           use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
           use Symfony\Component\DependencyInjection\ContainerBuilder;
    
           class OverrideServiceCompilerPass implements CompilerPassInterface
           {
             public function process(ContainerBuilder $container)
             {
                $definition1 = $container->getDefinition('sonata.media.admin.media');
                $definition1->setClass('Acme\DemoBundle\Admin\MediaAdmin');
    
    
              }
          }
    

    其次,您将根据链接激活您的 CompilerPassInterface

    how to activate CompilerPassInterface

      <?php
    
      namespace Acme\DemoBundle;
    
      use Symfony\Component\HttpKernel\Bundle\Bundle;
      use Symfony\Component\DependencyInjection\ContainerBuilder;
    
      use Acme\DemoBundle\DependencyInjection\OverrideServiceCompilerPass;
    
      class AcmeDemoBundle extends Bundle
       {
       public function build(ContainerBuilder $container)
       {
        parent::build($container);
    
        $container->addCompilerPass(new OverrideServiceCompilerPass());
        }
      }
    

    在第三个也是最后一个中,您将根据链接覆盖 sonatamediabundleMediaAdmin 类: p>

    INLINE VALIDATION¶(19.3 USING THE ADMIN CLASS¶)

            <?php
    
            namespace Acme\DemoBundle\Admin;
    
            use Sonata\AdminBundle\Admin\Admin;
            use Sonata\AdminBundle\Form\FormMapper;
            use Sonata\AdminBundle\Datagrid\DatagridMapper;
            use Sonata\AdminBundle\Datagrid\ListMapper;
            use Sonata\MediaBundle\Provider\Pool;
            use Sonata\AdminBundle\Route\RouteCollection;
            use Sonata\MediaBundle\Admin\BaseMediaAdmin as BaseAdmin;
            use Sonata\MediaBundle\Form\DataTransformer\ProviderDataTransformer;
            use Sonata\AdminBundle\Validator\ErrorElement;
    
            class MediaAdmin extends BaseAdmin
             {
                // add this method
                public function validate(ErrorElement $errorElement, $object)
                {
                $errorElement
                  ->with('name')
                    ->assertMaxLength(array('limit' => 32))
                  ->end()
                  ->with('description')
                      ->assertNotNull(array())
                       ->assertLength(array('min' => 2,
                                     'max' => 50))
                  ->end()
    
                  // remaining field here
                       ;
                 }
             }
    

    现在您可以验证位于

    中的 SonataMediaBundle 的 Media 类的剩余字段
          Sonata\MediaBundle\Model\Media
    

    这一切都超出了需求..

    【讨论】:

    • 我不太明白,请问您有代码示例。谢谢!
    【解决方案2】:

    我最近在我的项目中遇到了这个问题。这是我的小技巧(symfony 2.3):

    use Symfony\Component\Validator\ExecutionContextInterface;
    
    /**
     * @ORM\Entity(repositoryClass="CMS\RequestBundle\Repository\RequestVideoRepository")
     * @ORM\Table(name="request")
     * @Assert\Callback(methods={"isMediaSizeValid"})
     *
     */
    class RequestVideo
    {
    

    财产

    /**
     * @ORM\OneToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Media",cascade={"persist"})
     */
    protected $file;
    

    验证方法

    /**
     * @param ExecutionContextInterface $context
     */
    public function isMediaSizeValid(ExecutionContextInterface $context)
    {
        if($this->getFile() && $this->getFile()->getSize() > 5242880){
            $context->addViolationAt('file', 'File is too big. Please upload file less than 5MB', array(), null);
        }
    }
    

    有点脏,但我没有找到任何东西来解决这个问题。我希望有人会提出比这更好的解决方案。

    【讨论】:

      猜你喜欢
      • 2012-07-16
      • 1970-01-01
      • 2012-03-18
      • 1970-01-01
      • 2014-08-23
      • 2017-04-20
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      相关资源
      最近更新 更多