Symfony:从服务访问$ _POST变量而不进行范围请求

时间:2015-08-24 15:32:41

标签: php symfony service

我需要从服务访问$ _POST变量,我不想将request作为参数传递,因为我认为这会迫使我在服务中使用scope: request并且我很糟糕来自此范围的过去的记忆,因为这会强制每个请求一个服务实例,而不是每个应用程序一个实例。

问题是$ _POST可以正常工作,但是因为symfony最佳实践建议避免使用php原语,我问是否有更好的方法(在服务中避免使用scope: request

2 个答案:

答案 0 :(得分:1)

如果您使用的是2.4+,则可以使用request_stack,请参阅here

你会像...一样使用它。

services.yml

your.service:
    class: FQCN\To\Your\Service
    arguments:
        - @request_stack

FQCN \至\您\服务

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;

class Service
{
    /**
     * @var RequestStack
     */
    private $requestStack;

    /**
     * @var Request
     */
    private $request;

    public function __construct(RequestStack $requestStack)
    {
        $this->requestStack = $requestStack;
    }

    public function yourCall()
    {
        $param = $this->getRequest()->request->get('your-post-parameter');

        //...
    }

    /**
     * Get current request object
     *
     * @return Request
     */
    private function getRequest()
    {
        if (null === $this->request) {
            $this->request = $this->requestStack->getCurrentRequest();
        }

        return $this->request;
    }
}

答案 1 :(得分:0)

我没有看到像下面这样做的任何问题,这是我前段时间做的。你没有注入整个请求。

<强> CONTROLLER

public function searchByGetAction(Request $request)
{
    //.......

    $results = $this->productSearchService->findWithSimpleArray(
        $request->query
    );

    //.......
}

public function searchByPostAction(Request $request)
{
    //.......

    $results = $this->productSearchService->findkWithNestedArray(
        json_decode($request->getContent(), true)
    );

    //.......
}

<强>服务

public function findWithSimpleArray(ParameterBag $searchParameters)
{
    $name = $searchParameters->get('name');
    $surname = $searchParameters->get('surname');

    //.......
}

public function findWithNestedArray($searchParameters = [])
{
    $name = isset($searchParameters['name']) ? $searchParameters['name'] : null;
    $surname = isset($searchParameters['surname']) ? $searchParameters['surname'] : null;

    //.......
}