我怎样才能添加约束上传的图像,例如:最大尺寸,错误消息,没有关于在sonata_media的配置事情。
非常感谢你。
我怎样才能添加约束上传的图像,例如:最大尺寸,错误消息,没有关于在sonata_media的配置事情。
非常感谢你。
首先,你将使用CompilerPassInterface组件覆盖SonataMediaBundle的MediaAdmin类为每个链接:
重写束的部分
supose你在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按链接:
如何激活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());
}
}
并在第三和最后你将覆盖MediaAdmin类sonatamediabundle按照链接:
INLINEVALIDATION¶(19.3使用管理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传媒类remaing领域
Sonata\MediaBundle\Model\Media
这是上述所有需求..
最近,我得到了我的项目这一问题。 还有就是我的小黑客(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);
}
}
有点脏,但我没有找到任何排序了这一点。 我希望有人会建议的解决方案比这更好的。