Con đường sạch - 2018+, Symfony 3.4+
Kể từ năm 2017 và Symfony 3.3 + 3.4 có nhiều cách dễ dàng hơn - dễ cài đặt và sử dụng.
Thay vì sử dụng mô hình chống định vị bộ chứa và dịch vụ / tham số, bạn có thể truyền tham số cho lớp thông qua hàm tạo của nó . Đừng lo lắng, đó không phải là công việc đòi hỏi thời gian, mà là thiết lập một lần và quên phương pháp tiếp cận.
Làm thế nào để thiết lập nó trong 2 bước?
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. Bất kỳ 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"
}
}
Nâng cấp ngay lập tức!
Trong trường hợp bạn sử dụng phương pháp cũ hơn, bạn có thể tự động hóa nó với Rector .
Đọc thêm
Điều này được gọi là tiêm xây dựng trên phương pháp tiếp cận dịch vụ định vị .
Để đọc thêm về điều này, hãy kiểm tra bài đăng của tôi Cách lấy tham số trong Trình điều khiển Symfony theo cách sạch .
(Nó đã được thử nghiệm và tôi giữ cho nó được cập nhật cho phiên bản chính Symfony mới (5, 6 ...)).
get
phương thức trong bộ điều khiển cũng sử dụng bộ chứa, nhưng nó chỉ có thể nhận các dịch vụ từ một bộ chứa, không phải các tham số. Bạn cầngetParameter
lấy thông số.