在Symfony程序中,controller利用控制器基类而能够通过getUser()
快捷方法得到代表着当前用户的对象:
1 2 3 4 5 6 7 8 9 10 | use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class DefaultController extends Controller
{
public function indexAction()
{
$user = $this->getUser();
// ...
}
} |
以前,你还可以通过getRequest()
快捷方法得到当前的request对象,但在Symfony 2.4中被弱化了,改以Request
类型提示(type-hint):
1 2 3 4 5 6 7 | use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
class DefaultController extends Controller
{
public function indexAction(Request $request) { ... }
} |
在Symfony 3.2中,我们添加了一个全新的User解析器(user resolver),它可以在任何控制器中通过类型提示直接得到当前用户,并且我们决定弱化Controller::getUser()
快捷方法,在Symfony 4.0中它将被移除:
1 2 3 4 5 6 7 8 9 10 11 12 13 | use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\User\UserInterface;
class DefaultController extends Controller
{
// when the user is mandatory (e.g. behind a firewall)
// 防火墙下的任意用户到来时
public function fooAction(UserInterface $user) { ... }
// when the user is optional (e.g. can be anonymous)
// 用户可选时(可不登录,token为anonymous)
public function barAction(UserInterface $user = null) { ... }
} |
这个功能是通过argument resolver extension参数解析器扩展机制来实现的,该机制从Symfony 3.1起被引入,允许对控制器的参数注册你自己的value resolvers。