Я не думаю, что доступ к параметрам из сервиса - лучший выбор.Я бы посоветовал вам определить свой параметр в разделе «bind» файла service.yaml следующим образом:
services:
_defaults:
autowire: true
autoconfigure: true
public: false
# Bind all arguments requested by multiple services (auto-wiring)
bind:
$yourParameter: '%your.parameter%'
Поместите параметр в этот раздел bind, чтобы добавить его как службу во все другие службы.(включая контроллеры).
Затем в ваших контроллерах и во всех других службах вы можете сделать что-то вроде этого:
class RandomController extends Controller
{
private $yourParameter;
public function __construct(string $yourParameter)
{
$this->yourParameter = $yourParameter;
}
...
Я ответил на ваш вопрос о параметрах ввода.Теперь, если вы хотите использовать его в аннотации вашего маршрута, я бы протестировал что-то вроде этого.
/**
* @Route("/api/{apiVersion}/the/rest/of/your/route", name="route_name", defaults={"apiVersion"="%yourParameter%"})
*/
public function yourAction()
{}
Я не тестировал это последнее решение.Не знаю, работает ли он с Symfony 4. Если нет, то, возможно, попробуйте положить% $ yourParameter% (с '$').Расскажите мне об этом.
Редактировать:
Или даже лучше для вашей ситуации (я предполагаю, что вы используете маршрутизацию аннотаций): я полагаю, ваш параметр важен только для / api / partвашего приложения.Затем вы можете определить в своем файле config / route / annotations.yaml все ваши контроллеры, относящиеся к вашему API.Я предлагаю что-то вроде этого.
controllers:
path: /api/{apiVersion}
resource: ../../src/Controller/Api
type: annotation
defaults:
apiVersion : '%your.parameter%'
# And maybe add also requirements like this
requirements:
apiVersion: 'v0|v1|v2'
Где все ваши контроллеры API находятся в папке src / Controller / Api.Следовательно, это решение позволяет определить эту конфигурацию только один раз.