2013-03-26 34 views
13

Tôi đang thêm một dòng lệnh mới. Tôi muốn có quyền truy cập vào giá trị của tham số (parameters.yml) trong Lớp của tôi.Tham số truy cập từ Command Class

Tôi đọc rằng tôi nên thêm lớp này làm dịch vụ để có quyền truy cập vào tham số. Vì vậy,

//config.yml

imports: 
- { resource: services.yml } 

//services.yml

services: 
    less_css_compiler: 
    class: MyVendor\MyBundle\Command\ThemeCommand 
    arguments: [%less_compiler%] 

//parameters.yml

parameters: 
    less_compiler:  WinLess.exe 

người ta nói rằng normaly lập luận là trong nhà xây dựng của lớp học nhưng nếu tôi làm điều này:

public function __construct($less_compiler) { 
    $this->less_compiler = $less_compiler; 
} 

Tôi có cảnh báo cho biết đối số đầu tiên bị thiếu. Trong lớp mẹ chỉ huy có một tên như là đối số sau đó độc đáo của các nhà xây dựng nhưng mặc dù tôi viết:

public function __construct($name, $less_compiler) { 
} 

Nó không thay đổi bất cứ điều gì ..

Khả năng khác là để gọi cho dịch vụ bên trong lớp học của tôi :

$service = $this->getContainer()->get('less_css_compiler'); 

Nhưng làm thế nào để tôi có được đối số?

Cảm ơn bạn

Trả lời

23

cách đơn giản, chúng ta hãy mở rộng lệnh ContainerAwareCommand

$this->getContainer()->getParameter('parameter_name'); 

hoặc

Bạn nên tạo lớp dịch vụ riêng biệt

$service = $this->getContainer()->get('less_css_compiler'); 

//services.yml

services: 
    less_css_compiler: 
    class: MyVendor\MyBundle\Service\LessCompiler 
    arguments: [%less_compiler%] 

Trong lớp dịch vụ, tạo constructor như trên mà bạn đề cập

public function __construct($less_compiler) { 
    $this->less_compiler = $less_compiler; 
} 

Gọi dịch vụ từ lớp lệnh.

Thats it.

Lý do: Bạn đang tự tạo lớp lệnh làm dịch vụ, trình điều khiển lớp lệnh bit sẽ yêu cầu tên lệnh làm đối số đầu tiên.

+2

là nó thực sự sạch sẽ để tạo ra một dịch vụ chỉ để có quyền truy cập vào một tham số trong parameters.yml ... có thể có một cách khác sau đó nhưng bằng cách sử dụng một dịch vụ? – mlwacosmos

+2

tất nhiên là có, $ this-> getContainer() -> getParameter ('tên tham số'); – Venu

Các vấn đề liên quan