我在 Symfony 中有一个实现接口的类。我需要 $request 才能有 POST 参数。这是我的功能:
class WebserviceUserProvider implements UserProviderInterface
{
public function loadUserByUsername($username)
{
$salt = "";
$roles = "";
// make a call to your webservice here
.....
}
...
}
我不能这样做:
public function loadUserByUsername($username, Request $request)
因为我需要实现该接口,并且出现此错误:
FatalErrorException:编译错误:声明
Actas\Gestion\UserBundle\Security\User\WebserviceUserProvider::loadUserByUsername()
必须兼容
Symfony\Component\Security\Core\User\UserProviderInterface::loadUserByUsername($用户名)
如何获取请求参数?这个类是从登录中调用的,我需要它发送的密码才能使用 WebService 来验证用户身份。
预先非常感谢您!
这是我的 Bundle 中的 services.xml:
# src/Actas/Gestion/UserBundle/Resources/config/services.yml
parameters:
webservice_user_provider.class: Actas\Gestion\UserBundle\Security\User\WebserviceUserProvider
services:
webservice_user_provider:
class: "%webservice_user_provider.class%"
scope: container
calls:
- [setServiceContainer , ["@service_container"]]
除了 Czechnology 的答案之外,您还可以使用 setter 方法注入请求。在 services.yml 中添加:
my_service:
class: Acme\DemoBundle\Service\WebserviceUserProvider
scope: request
calls:
- [setRequest , ["@request"]]
然后像这样声明你的类:
use Symfony\Component\HttpFoundation\Request;
class WebserviceUserProvider implements UserProviderInterface {
private $request;
public function setRequest( Request $request ) {
$this->request = $request;
}
// ...
}
如果您遇到范围扩大问题,您还可以尝试注入服务容器并从中获取请求。在服务中声明您的服务如下:
my_service:
class: Acme\DemoBundle\Service\WebserviceUserProvider
calls:
- [setRequest , ["@service_container"]]
现在只需使用容器来获取请求:
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Request;
class WebserviceUserProvider implements UserProviderInterface {
private $request;
public function setRequest( ContainerInterface $container ) {
$this->request = $container->get('request');
}
// ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)