Symfony 3.4 здесь.
После некоторых исследований я не думаю, что передача параметров классу / сервису через его конструктор всегда является хорошей идеей. Представьте, что вам нужно передать контроллеру / службе еще несколько параметров, чем 2 или 3. Что тогда? Было бы смешно передавать, скажем, до 10 параметров.
Вместо этого используйте ParameterBag
класс как зависимость при объявлении службы в yml, а затем используйте столько параметров, сколько захотите.
Конкретный пример, допустим, у вас есть почтовая служба, такая как PHPMailer, и вы хотите, чтобы параметры подключения PHPMailer были в paramters.yml
файле:
#parameters.yml
parameters:
mail_admin: abc@abc.abc
mail_host: mail.abc.com
mail_username: noreply@abc.com
mail_password: pass
mail_from: contact@abc.com
mail_from_name: contact@abc.com
mail_smtp_secure: 'ssl'
mail_port: 465
#services.yml
services:
app.php_mailer:
class: AppBundle\Services\PHPMailerService
arguments: ['@assetic.parameter_bag'] #here one could have other services to be injected
public: true
# AppBundle\Services\PHPMailerService.php
...
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
...
class PHPMailerService
{
private $parameterBag;
private $mailAdmin;
private $mailHost;
private $mailUsername;
private $mailPassword;
private $mailFrom;
private $mailFromName;
private $mailSMTPSecure;
private $mailPort;
}
public function __construct(ParameterBag $parameterBag)
{
$this->parameterBag = $parameterBag;
$this->mailAdmin = $this->parameterBag->get('mail_admin');
$this->mailHost = $this->parameterBag->get('mail_host');
$this->mailUsername = $this->parameterBag->get('mail_username');
$this->mailPassword = $this->parameterBag->get('mail_password');
$this->mailFrom = $this->parameterBag->get('mail_from');
$this->mailFromName = $this->parameterBag->get('mail_from_name');
$this->mailSMTPSecure = $this->parameterBag->get('mail_smtp_secure');
$this->mailPort = $this->parameterBag->get('mail_port');
}
public function sendEmail()
{
}
Я думаю, это лучший способ.