मैं एक similar issue था, लेकिन Symfony 3. का उपयोग कर जबकि पिछले जवाब में करने के लिए नहीं मिल पाया, यह थोड़ा पता लगाने के लिए वास्तव में एक request_stack
का प्रयोग करेंगे scope: request
के रूप में एक ही बात को प्राप्त करने के मुश्किल था।
इस सवाल के मामले में, यह कुछ इस तरह दिखेगा:
services.yml config
services:
myservice:
class: My\MyBundle\MyService
arguments:
- '@request_stack'
- '@router'
और MyService कक्षा
<?php
namespace My\MyBundle;
use Symfony\Component\Routing\RequestContext;
class MyService {
private $requestStack;
private $router;
public function __construct($requestStack, $router) {
$this->requestStack = $requestStack;
$this->router = $router;
}
public doThing() {
$context = new RequestContext();
$context->fromRequest($this->requestStack->getCurrentRequest());
$this->router->setContext($context);
// of course, the die is an example
die($this->router->generate('BackoffUserBundle.Profile.edit'));
}
}
नोट: प्रवेश RequestStack में कन्स्ट्रक्टर advised against है क्योंकि अनुरोध को संभालने से पहले संभावित रूप से इसे एक्सेस करने का प्रयास किया जा सकता है कर्नेल द्वारा। इसलिए अनुरोध ऑब्जेक्ट से अनुरोध ऑब्जेक्ट लाने का प्रयास करते समय यह शून्य हो सकता है।
क्या आप कोड को पेस्ट कर सकते हैं जहां आप यूआरएल उत्पन्न करते हैं? –
यदि आप अपनी साइट को http: // test/app_dev.php' के माध्यम से एक्सेस करते हैं, तो लिंक app_dev.php के साथ होंगे। 'Http: // test' के लिए वे app_dev.php के बिना होंगे ... – meze
@ क्यूबा: मैंने अपना प्रश्न संपादित कर लिया है। –