The Clean Way - 2018+, Symfony 3.4+
Sejak 2017 dan Symfony 3.3 + 3.4 ada banyak cara yang lebih bersih - mudah diatur dan digunakan.
Alih-alih menggunakan container dan service / parameter locator anti-pattern, Anda bisa meneruskan parameter ke kelas melalui konstruktornya . Jangan khawatir, ini bukan pekerjaan yang menuntut waktu, melainkan pengaturan sekali & lupakan pendekatan.
Bagaimana cara mengaturnya dalam 2 langkah?
1. app/config/services.yml
# config.yml
# config.yml
parameters:
api_pass: 'secret_password'
api_user: 'my_name'
services:
_defaults:
autowire: true
bind:
$apiPass: '%api_pass%'
$apiUser: '%api_user%'
App\:
resource: ..
2. Apa saja Controller
<?php declare(strict_types=1);
final class ApiController extends SymfonyController
{
/**
* @var string
*/
private $apiPass;
/**
* @var string
*/
private $apiUser;
public function __construct(string $apiPass, string $apiUser)
{
$this->apiPass = $apiPass;
$this->apiUser = $apiUser;
}
public function registerAction(): void
{
var_dump($this->apiPass); // "secret_password"
var_dump($this->apiUser); // "my_name"
}
}
Upgrade Instan Siap!
Jika Anda menggunakan pendekatan yang lebih lama, Anda dapat mengotomatiskannya dengan Rektor .
Baca lebih banyak
Ini disebut pendekatan konstruktor melalui layanan locator .
Untuk membaca lebih lanjut tentang ini, periksa posting saya Cara Mendapatkan Parameter di Symfony Controller the Clean Way .
(Sudah diuji dan saya tetap memperbaruinya untuk versi utama Symfony baru (5, 6 ...)).
get
metode dalam pengontrol menggunakan wadah juga, tetapi hanya bisa mendapatkan layanan dari wadah, bukan parameter. Anda perlugetParameter
mendapatkan parameter.