Ошибка Symfony 4: неиспользуемая привязка «$ProjectDir» в службе

#php #symfony

#php #symfony

Вопрос:

При обновлении с Symfony 3.4 до 4.1, когда я использую php bin / console, я получил следующую ошибку.
Я хочу принимать параметры в виде ссылки на URL.
В чем причина?
https://symfony.com/blog/new-in-symfony-4-1-getting-container-parameters-as-a-service

Код ошибки

 Unused binding "$projectDir" in service "common.parameterService". 
 

config/services.yaml

 parameters:
    parameter_name: XXX

services:
    _defaults:
        autowire: false
        autoconfigure: false
        public: false
        bind:
            $projectDir: '%kernel.project_dir%'

    common.parameterService:
        class:  AppBundleModelServiceParameterService
        arguments:  [ "@service_container" ]

 

AppBundle/Model/Service/ParameterService.php

 use SymfonyComponentDependencyInjectionParameterBagParameterBagInterface;
use AppBundleModelServiceBaseService;

/**
 * 
 */
class ParameterService extends BaseService
{
    private $params;

    public function __construct(ParameterBagInterface $params)
    {
        $this->params = $params;
    }
    /**
     *
     * @param string 
     * @return mixed
     */
    public function getParameter()
    {
        return $this->params->get('parameter_name');
    }
 

Комментарии:

1. Функция автоматического подключения с autowire: false помощью ?

2. @scottie320 — Это попытка заменить существующий устаревший класс параметров? Если это так, то я боюсь, что вы идете по неверному пути. В классах, которые в настоящее время содержат вызовы Parameters::getParameter , вы захотите ввести любые параметры или службы, которые им нужны.

3. @SubCore Это верно. Из старого Symfony, который я обновляю, поэтому я не думаю, что мне нужна функция autowire.

4. @Cerad Ты прав. Означает ли это, что вы можете получить ее, установив параметры в Parameters :: getParameter ?

5. Пожалуйста, не вводите service_container :). При автоматическом подключении все зависимости будут введены автоматически

Ответ №1:

Это означает, что вы объявили это:

     bind:
        $projectDir: '%kernel.project_dir%'
 

но не ввели $projectDir ни в ParameterService , ни в какие-либо другие службы в этом файле.

Вы можете удалить эти две строки:

     bind:
        $projectDir: '%kernel.project_dir%'
 

Комментарии:

1. спасибо за ваш ответ. Конечно, если вы удалите bind, ошибка исчезнет. Однако то, чего я хочу добиться, — это получить параметры. Правильно ли устанавливать $ ProjectDir в Service? Я пробовал, но это не работает.