Gọi bộ điều khiển khác trong Symfony. Hướng dẫn từng bước với các ví dụ

Trong Symfony, bạn có thể gọi một bộ điều khiển khác bằng cách sử dụng phương thức forward() được cung cấp bởi lớp cơ sở Bộ điều khiển. Phương thức forward() nhận hai đối số. đầu tiên là bộ điều khiển bạn muốn gọi và thứ hai là phương thức hành động trong bộ điều khiển đó

ví dụ 1. Trong bộ điều khiển có tên là "DefaultController", bạn có thể gọi một bộ điều khiển khác có tên là "OtherController" và hành động "index" của nó như thế này

return $this->forward('App\Controller\OtherController::index');

ví dụ 2. Trong bộ điều khiển có tên là "DefaultController", bạn có thể gọi một bộ điều khiển khác có tên là "OtherController" và hành động "hiển thị" của nó bằng cách chuyển một mảng tham số làm đối số thứ hai như thế này

return $this->forward('App\Controller\OtherController::show', array('id' => $id));

Ghi chú. Các bộ điều khiển phải nằm trong thư mục bộ điều khiển trong thư mục src và phương thức hành động phải ở chế độ công khai

Cách symfony gọi bộ điều khiển khác với Ví dụ
// OtherController::fancy($name, $color) will be executed
public function myAction($name)
{
    $response = $this->forward(
    	'App\Controller\OtherController::fancy',
    	array(
      		'name'  => $name,
        	'color' => 'green',
    	)
    );
    // .. further modify the response or return it directly
    return $response;
}

Làm cách nào để phục vụ lớp như một dịch vụ trong Symfony?

Cách đúng đắn trong Symfony nếu phục vụ lớp như một dịch vụ. Chuyển đến tệp dịch vụ của bạn trong app/config/services. yml và thêm phần sau vào đó, đảm bảo rằng bạn đang thêm bộ điều khiển mà bạn cần phân phát. Bây giờ trong một bộ điều khiển khác cần các dịch vụ của bộ điều khiển này, chúng ta có thể gọi bằng lệnh này

Làm cách nào để chặn đầu ra của lệnh Symfony?

Nếu bạn muốn chặn đầu ra của lệnh đã thực thi, hãy chuyển NullOutput làm đối số thứ hai cho $command->run (). Lưu ý rằng tất cả các lệnh sẽ chạy trong cùng một quy trình và một số lệnh tích hợp của Symfony có thể không hoạt động tốt theo cách này

Tôi có thể gọi chức năng của bộ điều khiển từ bộ điều khiển khác không?

Bạn không bao giờ nên (AFAIK) gọi chức năng của bộ điều khiển từ bộ điều khiển khác. Có vẻ như mã bộ điều khiển của bạn nên được chia sẻ và đây là dịch vụ dành cho. Vì vậy, hãy tạo một cái và sử dụng nó như Mert gợi ý. Vì các dịch vụ Symfony hiện ở chế độ riêng tư theo mặc định, nên việc chỉ thêm bộ điều khiển mà bạn muốn sẽ dễ dàng hơn

MVC có phải là mối quan tâm trong Symfony không?

miễn là Symfony có những thứ như " { { render (bộ điều khiển (. )) }}"" MVC không phải là vấn đề đáng lo ngại Nếu bạn không muốn định nghĩa lớp là một dịch vụ, vì tôi cảm thấy đó không phải là một cách thực hành tốt và @Qoop đã trích dẫn Fabien nói như vậy, bạn có thể

Làm cách nào để gọi bộ điều khiển từ lệnh Symfony?

Nếu hành động của bạn yêu cầu một yêu cầu thì. $request = Symfony\Thành phần\HttpFoundation\Request. createFromGlobals();

Làm thế nào để bạn gọi một bộ điều khiển khác từ một bộ điều khiển khác?

Cách gọi một chức năng của bộ điều khiển trong một bộ điều khiển khác trong. .
ví dụ 1. PostController. php. sử dụng Ứng dụng\Http\Controllers\OtherController; . .
ví dụ 2. PostController. php. lớp PostController mở rộng Bộ điều khiển. .
ví dụ 3. PostController. php. lớp PostController mở rộng Bộ điều khiển

Bộ điều khiển trong Symfony là gì?

Trong Symfony, bộ điều khiển thường là phương thức lớp được sử dụng để chấp nhận yêu cầu và trả về đối tượng Phản hồi . Khi được ánh xạ bằng một URL, bộ điều khiển có thể truy cập được và có thể xem phản hồi của nó. Để tạo điều kiện thuận lợi cho việc phát triển các bộ điều khiển, Symfony cung cấp một AbstractController.