Как я могу подключить параметр String в Symfony 3.4?
У меня простой сервис, и я хочу подключить параметр url, указанный в parameters.yml:
namespace AppBundle\Service;
use Psr\Log\LoggerInterface;
class PythonService {
private $logger;
private $url;
/**
* @param LoggerInterface $logger
* @param String $url
*/
public function __construct(LoggerInterface $logger, String $url) {
$this->logger = $logger;
$this->url = $url;
}
}
Мой service.yml выглядит так:
AppBunde\Services\PythonService:
arguments: ['@logger', '%url%']
Но я получаю сообщение об ошибке:
Cannot autowire service "AppBundle\Service\PythonService": argument "$url" of method "__construct()" is type-hinted "string", you should configure its value explicitly.
Я пробовал также вручную указать параметры:
AnalyticsDashboardBunde\Services\PythonService:
arguments:
$logger: '@logger'
$url: '%session_memcached_host%'
Это дает мне следующую ошибку:
Invalid service "AppBundle\Services\PythonService": class "AppBundle\Services\PythonService" does not exist.
Как упоминалось в теперь удаленном ответе, просто измените Services на Service в исходном определении службы, и все должно быть в порядке. И правильно пишите AppBundle.






// services.yml
app.python_service:
class: AppBundle\Service\PythonService
arguments:
$logger: '@monolog.logger.request'
$url: 'link'
public: true
// in controller
//use container:
$pS = $this->container->get('app.python_service');
Использование контейнера не рекомендуется, вместо этого введите зависимости.
просто помог public: true. Спасибо
Нет. Это работает, но это неправильный способ. Это работает только потому, что Services были изменены на Service. И не вынимайте вещи из контейнера. Печально, что правильный ответ был удален неправильно.
Во-первых, у вас опечатка в AppBundle\Services\PythonService (Services <> Service).
Затем строка <> String. В php нет прописных букв.
Вы можете привязать аргумент к определенному параметру / услуге:
service.yml:
services:
_defaults:
bind:
$memcacheHostUri: '%session_memcached_host%'
Класс обслуживания: (имя переменной должно совпадать с указанным ^)
public function __construct(LoggerInterface $logger, string $memcacheHostUri)
Действие контроллера:
public function myAwesomeAction(PythonService $pythonService)
{
$pythonService->doPythonStuffs();
}
С помощью этого решения, если вы создаете другие службы, которым нужен memecacheHostUri, он также будет автоматически подключен к этим службам.
Ресурсы:
AnalyticsDashboardBunde,AppBundle, что правильно?