Symfony 3.4 тут.
Після деяких досліджень, я не вважаю, що передача параметрів до класу / сервісу через його конструктор, завжди є гарною ідеєю. Уявіть, якщо вам потрібно передати контролеру / службі кілька параметрів більше, ніж 2 або 3. Що тоді? Було б смішно передавати, скажімо, до 10 параметрів.
Натомість використовуйте ParameterBag
клас як залежність при оголошенні служби в yml, а потім використовуйте скільки завгодно параметрів.
На конкретному прикладі, припустимо, у вас є служба поштової розсилки, наприклад, PHPMailer, і ви хочете, щоб у paramters.yml
файлі були параметри підключення PHPMailer :
#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()
{
}
Я думаю, що це кращий спосіб.