Symfony 2.7包括了无数代码的优化和改进。大量的微调只为提升你的每日生产力。本文就介绍七个虽小但却好用的调整。
增加了getParameter()控制器快捷方法 ¶
从容器中取得一个参数值,在controller中可能是一个困扰Symfony初学者的常见问题。通常你会使用get()
方法但却什么也得不到,然后你尝试使用一个并不存在的getParameter()
方法。好在,Symfony 2.7添加了这个getParameter()
快捷方式。
译注:shortcut是指从controller里直接用$this->来使用的方法,本站译为快捷方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class DefaultController extends Controller
{
public function indexAction()
{
// Symfony 2.6
$value = $this->container->getParameter('param_name');
// Symfony 2.7
$value = $this->getParameter('param_name');
// ...
}
} |
增加了Symfony版本状态的反馈 ¶
谁会去运行一个过期的Symfony却预期得到新版本中的强力功能呢?幸运的时,从Symfony 2.7开始,想运行过期版本的Symfony变得困难起来。因为web除错工具条新添了一个可视反馈,专门用于你的Symfony版本状态:
在分析结果页显示HTTP状态码 ¶
有时你想要找到存在Symfony的debug分析器里的特定请求信息是很困难的。但在Symfony 2.7中这就容易了,多亏了request表格中的一个新列,用于显示HTTP状态码。
请注意,如果你要把profiler中的信息存到数据库中的话,比如MySQL或SQLite,你必须去除现有表格,或者手动添加一个status_code新列。
在路由条件中添加了对容器参数的支持 ¶
Symfony 2.7中正式支持了在路由条件的表达式中使用容器参数。只需把参数用%
套起来,Symfony就会在表达式被执行之前,把参数替换成对应的值。
1 2 3 4 5 | # app/config/routing.yml
contact:
path: /contact
defaults: { _controller: AcmeDemoBundle:Main:contact }
condition: "request.headers.get('User-Agent') matches '%allowed_user_agents%'" |
注意这个轻度破坏极端条件下的向下兼容。如果你在表达式中像这样使用了取模操作符:foo%bar%2
,Symfony 2.6会解析成$foo % bar % 2
,但Symfony 2.7则是把%bar%
先替换成bar
容器参数所对应的值,否则这种写法会在参数不存在时导致错误。
移除lint命令换成lint: namespace ¶
过去我们已经移除了所有的Symfony除错命令并统一为debug:
namespace的格式,以便更好地根据功能来组织命令。Symfony 2.7同样对lint命令进行了整合,以便发现YAML文件和Twig模板中的错误:
1 2 3 4 5 6 7 | # Symfony 2.6
$ php app/console yaml:lint ...
$ php app/console twig:lint ...
# Symfony 2.7 (the old command names also work)
$ php app/console lint:yaml ...
$ php app/console lint:twig ... |
看起来这似乎是微不足道的改变,但把debug:
和lint:
下面的除错命令“集群化”,能令框架保持一致性,这始终是好的。
增加了对linting多个twig模板的支持 ¶
在Symfony 2.7中你可以传递任意个模板/或目录到lint:twig
命令中:
1 2 3 4 5 6 7 8 9 10 | # Symfony 2.6 (one template or one directory)
$ php app/console lint:twig app/Resources/views/base.html.twig
1/1 valid files
$ php app/console lint:twig app/Resources/views/blog/
4/4 valid files
# Symfony 2.7 (any number of files and/or directories)
$ php app/console lint:twig app/Resources/views/base.html.twig app/Resources/views/blog/
5/5 valid files |
自动重启内置web服务器 ¶
在开发程序时使用php内置的web server正变得愈来愈普遍。你可能自Symfony 2.2以来使用了server:run
命令。但是从Symfony 2.6起你还可以使用server:start
、server:status
和server:stop
命令。
唯一的欠点是:server:start
需要pcntl
扩展才能运行。在Symfony 2.7中,如果你运行server:start
,将不再需要pcntl
扩展,框架将自动执行server:run
命令。