2015-01-09 13 views
5

Tôi có một ứng dụng bảng điều khiển đơn giản bằng cách sử dụng thành phần bảng điều khiển Symfony.Gọi lệnh Bàn điều khiển Symfony trong một lệnh khác và tắt đầu ra

Tôi có hai lệnh (ví dụ: cmdOnecmdTwo) có thể được gọi độc lập dễ dàng.

$ myApp.php cmdOne 
$ myApp.php cmdTwo 

Cả hai lệnh đều có lượng đầu ra đáng kể, tôi có thể dễ dàng tắt tiếng bằng cách phát hành tùy chọn -q.

Bây giờ, tôi muốn cmdOne gọi số cmdTwo tuy nhiên tôi muốn cmdTwo để yên lặng. Tôi không cố gắng làm bất cứ điều gì điên rồ, nhưng tôi đang cố gắng để có được bất cứ nơi nào, mặc dù đọc qua các tài liệu.

Dưới đây là mẫu mã của tôi cho đến nay (đoạn này sẽ được chứa trong cmdOne->execute()):

$command = $this->getApplication()->find('cmdTwo'); 

$input = new ArrayInput(array(
    'command' => 'cmdTwo', 
    '-q' => true 
)); 

$returnCode = $command->run($input, $output); 

này chạy tốt, như trong thực thi lệnh mã, nhưng có đầu ra trên giao diện điều khiển (tạo ra bởi cmdTwo) mà Tôi muốn không hiển thị.

Không xác định được tùy chọn -q vì tùy chọn "đã đặt trước" (tức là không được tạo bởi nhà phát triển) hoặc tôi thiếu điều gì đó hiển nhiên?

Trả lời

6

Thay vì đi qua cùng $output dụ (một trong đó kết quả đầu ra để điều khiển hiện tại của bạn) tạo ra một thể hiện của NullOutput

$returnCode = $command->run($input, new \Symfony\Component\Console\Output\NullOutput); 

Về cơ bản nó là một hố đen - nó chấp nhận sản lượng và âm thầm rơi nó.

+1

Đánh bại tôi với nó, +1! – bishop

+0

@cerebriform: mất hơn 2 phút so với thời gian bắt đầu chậm của phpstorm và lập lại một dự án (để tìm ra tên lớp chính xác) ;-P – zerkms

+0

Tuyệt vời! Điều đó làm việc một điều trị, cảm ơn bạn (và những người khác); bây giờ đây là một quả bóng đường cong: Nếu 'cmdTwo' thất bại là có một cách hợp lý để bắt đầu ra? Tại thời điểm này, nếu chạy trực tiếp nó chỉ là lỗi trực tiếp đến bàn điều khiển - tôi có nên trả lại mã thoát cụ thể cho một số lỗi nhất định và sau đó xử lý chúng trong 'cmdOne' không? Hoặc là một câu hỏi SO khác hoàn toàn ... – HelloPablo

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