一旦用户经过身份验证,他们的凭证通常存储在会话中。这意味着会话结束时它们将被记录,并必须提供它们的登录细节及下次它们要访问的应用程序。你可以允许用户选择登录停留的时间比使用 cookie 会话持续的时间长,这可以通过使用 remember_me 防火墙选项来实现:YAML:# app/config/security.ymlfirewalls: default: # ...
Symfony 的安全系统可以通过活动目录或开放授权服务器像数据库一样从任何地方加载安全用户。这篇文章将告诉你如何通过一个 Doctrine entity 从数据库加载用户信息。前言在开始之前,您应该检查 FOSUserBundle。这个外部包允许您从数据库加载用户信息(就像你会在这里学到的)并为您提供内置路径和控制器用于一些事务,比如登录、注册和忘记密码。
如果您是某种数据库的用户并需要一个登录表单,那么您应该考虑使用 FOSUserBundle,它可以帮助您建立您的 User 对象并提供了多路由和控制器用于常见任务,如登录,注册,忘记密码。本节中,您将构建一个传统的登录表单。当然,当用户登录时,您可以像数据库一样在任何地方加载用户信息。详见 B) Configuring how Users are Loaded。
默认的采集参数不一定要匹配路由路径中的占位符。事实上,你可以使用默认数组来指定额外的参数,这些变量可以作为参数传递给控制器: YAML:# app/config/routing.ymlblog: path: /blog/{page} defaults: _controller: AppBundle:Blog:index page: 1 title: "Hello world!"XML:<!-- app/config/routing.xml -->
这个指导书的目的是演示如何将有尾部反斜线的 URL 重定向为相同的不包含尾部反斜线的 URL。首先创建一个控制器,将匹配任意包含尾部反斜线的 URL,删除尾随的反斜线(如果有查询参数的话请保持),并重定向到一个 301 恢复状态码的新的网址:// src/AppBundle/Controller/RedirectingController.phpnamespace AppBundle\Controller;
什么是一个自定义路由加载器自定义路由装载程序使你能够根据某些约定或模式生成路由。在这种情况下,一个很好的例子是在 FOSRestBundle 的使用中路由是基于控制器中的动作方法的名称产生的。一个自定义路由加载器不会使你的软件不需要手动修改路由配置(例如 app/config/routing.yml)就注入路径。
有时你会发现将你的路由的一部分变成全局可配置的是非常有用的。例如,如果你建立一个国际化的网站,你可能会开始在一个或两个地方。你肯定会想你的路由添加一个要求来防止用户匹配到其它地区而不是你支持的区域。 你可以要求你的 _locale 硬编码在你所有的路径中,但是一个更好的解决方案在你的路由配置中使用一个可配置的服务容器参数: YAML:# app/config/routing.
一个请求的 HTTP 方法是可以查看是否匹配路由的请求中的一种。这种方法使在 “Routing” 这本书中路由那一章节的使用了 GET 和 POST 示例来介绍的。你也可以像这样使用其它 HTTP 动作。例如,如果你有一个博客文章条目,那么你可以使用相同的网址路径通过匹配 GET, PUT 和 DELETE 来显示它,改变它和删除它。
有时,一个 URL 网址需要重定向到另一个 URL 网址。你可以通过创建一个新的唯一任务是重定向的控制器动作来实现它,但使用的 FrameworkBundle 的 RedirectController 会更容易。 你可以使用网页名称(如 homepage )来重定向到一个特定的路径(例如 /about )或一个特定的路由。
有时,您需要包含一个 / 参数来组成 URL 。例如,采取经典的 /hello/{username} 路径。默认情况下,/hello/Fabien 将匹配该条路径而不是 /hello/Fabien/Kris 。这是因为 Symfony 使用这个字符作为路径各部分之间的分隔符。 本指南包括如何修改路径使 /hello/Fabien/Kris 匹配 /hello/{username},且此时 {username} 等于 Fabien/Kris。
有时,你想保护一些路径,确保它们总是通过 HTTPS 协议访问。路由组件允许你有计划的执行 URI 模式: YAML:secure: path: /secure defaults: { _controller: AppBundle:Main:secure } schemes: [https]XML:<?xml version="1.0" encoding="UTF-8" ?><routes xmlns="http://symfony.com/schema/routing" xmlns:xsi="http://www.w3.
在 Symfony 2.1 之前,本地设置被存储在被称为 _locale 的会话的属性中。从 2.1 版本开始,它储存在 Request 里,这意味着在一次用户请求中它不是“粘性的(sticky)”,在本文中,您将学习如何让用户的本地设置“粘性(sticky)”,一旦设定,相同的本地设置将被用于所有后续请求。
每个请求都有一个“格式”(如 HTML,JSON),这是用来确定在响应中返回什么类型的内容。事实上,请求格式,可以通过 [getRequestFormat()](http://api.symfony.com/2.7/Symfony/Component/HttpFoundation/Request.html#getRequestFormat()) 来看到的,是用于设置在响应对象中内容类型头的 MIME 类型的。
当你部署应用程序时,你可能将其部署在一个负载平衡器(如 AWS 弹性负载平衡器)或反向代理(如 Varnish 缓存)之后。 在大多数情况下,这不会在 Symfony 中造成任何问题。但是,当一个请求通过一个代理时,必须保证要求发送的信息使用标准 Forwarded 头或非标准的特殊 X-Forwarded-* 头。
大多数时候,分析器信息的访问和分析是基于 Web 的可视化的。当然,你也可以利用分析器服务提供的方法以编程方式检索分析信息。 当响应对象是可用的,使用 [loadProfileFromResponse() 方法](http://api.symfony.com/2.7/Symfony/Component/HttpKernel/Profiler/Profiler.html#loadProfileFromResponse())获得其相关分析器权限: // ...
默认情况下,配置文件将收集的数据存储在缓存目录的文件中。你可以通过 dsn ,用户名,密码和有效时间的选项来控制存储。例如,下面的配置使用 MySQL 作为分析器的生命周期为一小时的存储方式: YAML:# app/config/config.ymlframework: profiler: dsn: "mysql:host=localhost;
默认情况下,分析器只在开发环境中被启用。但可以想象的是作为一个开发商想要看到分析器即使是在产品中。另一种情况可能是,仅当一个管理员登录时,你想要启用分析器。你可以通过使用匹配器在这些情况下实现分析器的启用。 使用内置的匹配Symfony 提供了一个内置的匹配器用来匹配路径和 IPS 。例如,如果你需要仅当 168.0.0.
Symfony 的分析器将数据采集功能委托给数据收集器。Symfony 在默认上捆绑了一些数据收集器,但是你可以很容易地按照自己的需求创建自定义的收集器。
Symfony 框架将日志消息组织到频道当中。默认情况下,这里有几个频道,包括 doctrine, event, security, request 和其他的一些。频道被印在了日志消息之中并且也能够被用来指导不同的频道到不同的地方、文件。 默认情况下,Symfony 记录每一条进入单一文件的消息(不管频道是什么)。
有时候你的日志充满了不想看到的 404 HTTP 错误,举例来说,当攻击者扫描你的应用的一些知名的应用程序路径时(例如 /phpmyadmin)。当使用 fingers_crossed handler 时,你可以基于一个在 MonologBundle 配置中正常的解释来拒绝记录这些日志: YAML: # app/config/config.ymlmonolog: handlers: main: # ...
关注时代Java