注意:这是Symfony官方博客中的最新系列“Meet the bundle” 中的第一篇,本系列专注于挖掘社区中一些不太知名的好用bundles。
Annotations一直是开发者热衷于讨论的话题之一。一些开发者认为使用annotation是一个不好的实践,百害无一利,而另外一些却很喜欢在程序中使用,来减少“样板代码”的数量。
一般来说,Symfony对这种争论不偏不倚:你不喜欢annotation就别用。但你要是喜欢,Symfony通过SensioFrameworkExtraBundle支持并提供了几个非常有用的annotation。
本文介绍ControllerExtraBundle,它对controller提供了更多annotations,用来处理一些常见任务。其中之一是Pagination
,它允许你创建和注入分页对象:
1 2 3 4 5 6 7 8 9 10 | use Doctrine\ORM\Tools\Pagination\Paginator;
use Mmoreram\ControllerExtraBundle\Annotation\Paginator as CreatePaginator;
/**
* @CreatePaginator(class = "AppBundle:Product")
*/
public function listAction(Paginator $paginator)
{
// ...
} |
这个annotation定义了很多配置选项:每页显示条目数、默认页数、用于结果集排序的属性、结果集的过滤条件等。
另一个有用的annotationj Form
,它可以创建基于type class或type service id的Symfony表单,如下例如示:
1 2 3 4 5 6 7 8 9 10 | use Mmoreram\ControllerExtraBundle\Annotation\Form as CreateForm;
use Symfony\Component\Form\Form;
/**
* @CreateForm(class = "user_type", name = "user")
*/
public function registerAction(Form $user)
{
// ...
} |
这个annotation甚至能与Symfony的@ParamConverter
相结合,创建一个基于前例entity的表单对象:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Component\Form\Form;
use Mmoreram\ControllerExtraBundle\Annotation\Form as CreateForm;
use AppBundle\Entity\User;
/**
* @Route(path = "/user/{id}", name = "user_view")
*
* @ParamConverter("user", class="AppBundle:User")
* @CreateForm(class = "user_type", entity = "user", name = "form")
*/
public function viewAction(User $user, Form $form)
{
} |
参考该bunlde的文档以掌握更多annotations:@Entity
、@ObjectManager
、@Flush
、@JsonResponse
、@Log
、@Get
和@Post
。
关于作者
ControllerExtraBundle是由Marc Morera开发的,他是来自西班牙巴塞罗纳的Symfony老兵。除了是Symfony Barcelona小组的组长之外,他还是Elcodi的首席架构师,这是用Symfony组件开发的电商平台。
我们在寻找下一个bundle
你有任何尚未在社区叫响的Symfony有用bundle的线索吗?发送邮件至:javier.eguiluz@sensiolabs.com