我在Symfony中有一个实现接口的类.我需要有$ para请求POST params.这是我的功能:
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($ username)兼容
我如何获得请求参数?这个类是从登录调用的,我需要它发送的密码才能使用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"]]
joe42.. 6
除了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'); } // ... }
Sufiyan Male.. 6
use Symfony\Component\HttpFoundation\RequestStack; class NewService { protected $request; public function setRequest(RequestStack $request_stack) { $this->request = $request_stack->getCurrentRequest(); } }
在配置文件中
services: new.service: class: Acme\DemoBundle\NewService calls: - [setRequest, [@request_stack]]
参考:http: //symfony.com/blog/new-in-symfony-2-4-the-request-stack