2012-04-09 34 views
11

Tôi muốn tạo một đối số duy nhất có tên là đối số/tùy chọn cho lệnh symfony. Và muốn symfony để phân biệt những 3 lựa chọn:đối số giao diện symfony2

  • my:command, có nghĩa là một cái gì đó giống như my:command --arg=null
  • my:command --arg, có nghĩa my:command --arg=defalutValue
  • my:command --arg=someValue, đó là hoàn toàn rõ ràng.

I.e. Tôi muốn hai chế độ làm việc cho mã theo lệnh đó: mặc định một và không mặc định với đối số bổ sung, và rằng arg nên có giá trị mặc định.

Tôi hiểu rằng tôi có thể tạo 2 arg, nhưng tôi đang tìm giải pháp một-arg-to-rule-them-all.

Có thể thực hiện điều đó bằng các lớp dựng sẵn hoặc tôi có nên tạo các lớp tùy chỉnh không? Nếu giải pháp chỉ có sẵn với các lớp tùy chỉnh, hãy cho tôi biết, bắt đầu từ đâu (tức là "tạo lớp con của ..." hoặc "cài đặt nhóm có tên ..."), vì tôi không quen thuộc với kiến ​​trúc của Symfony2.

Trả lời

16

Có thể:

->addOption('arg', 'a', InputOption::VALUE_NONE) 
  • tôi: command =>$input->getOption('arg') //false
  • tôi: lệnh --arg =>$input->getOption('arg') //true
  • tôi: lệnh --arg = 5 =>$input->getOption('arg') //5
+5

Đúng nếu tôi sai, đây là lần đầu tiên tôi sử dụng phương pháp này, nhưng tôi nghĩ rằng để có được kết quả này, bạn phải sử dụng InputOption :: VALUE_OPTIONAL làm đối số thứ ba. – manu

+1

Thật vậy với InputOption :: VALUE_NONE bạn nhận được một ngoại lệ thời gian chạy: Tùy chọn không chấp nhận một giá trị. –

+0

Với 'InputOption :: VALUE_NONE', chúng tôi nhận được ngoại lệ nếu các tùy chọn nhận được giá trị – smarber

-3

Symfony2 có thành phần bảng điều khiển có thể được sử dụng riêng. Bạn có thể xem tài liệu here. Ví dụ, bạn có thể kiểm tra implementations của SensioGeneratorBundle.

+0

Tôi đã đọc tài liệu và thấy không có cách nào để tạo ra này cây chiều tùy chọn/đối số. Và tôi không cần phải sử dụng thành phần này một cách riêng biệt. Tôi cần một cách để giải quyết hoặc phê chuẩn, điều này không thể giải quyết được. – kirilloid

1

Câu trả lời bằng corvax không đúng và không hoạt động. Tính đến hôm nay, bạn không thể đạt được điều này.

Nó thậm chí còn được nêu trong tài liệu Bảng điều khiển: Using Command Options.

Xem thêm những vấn đề trên GitHub:

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