수색…


소개

Symfony의 컨트롤러는 HTTP 요청을 받고 HTTP 응답을 반환하는 PHP 호출 가능 함수 (함수, 객체의 메서드 또는 클로저)입니다. HTTP 응답에는 HTML 페이지, JSON 문자열, 파일 다운로드 등이 포함될 수 있습니다.

Symfony에게 어느 컨트롤러가 어떤 요청을 처리해야하는지 알려면 , 경로설정 해야 합니다 .

통사론

  • $ this-> generateUrl ( 'route_name', [ '자리 표시 자 =>'값 ']); // 자리 표시자를 사용하여 route_name 대한 URL을 생성합니다.
  • $ this-> render ( 'template.html.twig'); // Twig 템플릿을 렌더링하고 Response 객체를 반환합니다.
  • $ this-> render ( 'template.html.twig', [ 'parameter'=> $ value]); // 매개 변수가있는 Twig 템플릿을 렌더링합니다.
  • $ this-> createNotFoundException ( 'Message');을 throw하십시오. // NotFoundHttpException을 throw하여 Symfony가 404 응답을 반환하도록합니다.

비고

컨트롤러는 작고 HTTP 요청 처리에 중점을 두어야합니다. 응용 프로그램의 실제 비즈니스 논리는 응용 프로그램의 다른 부분 (예 : 도메인 모델)에 위임되어야합니다.

간단한 컨트롤러 클래스

// src/AppBundle/Controller/HelloWorldController.php
namespace AppBundle\Controller;

use Symfony\Component\HttpFoundation\Response;

class HelloWorldController
{
    public function helloWorldAction()
    {
        return new Response(
            '<html><body>Hello World!</body></html>'
        );
    }
}

나뭇 가지 템플릿 렌더링

대부분의 경우 컨트롤러에서 HTML을 하드 코딩하는 대신 템플릿에서 HTML 응답을 렌더링하려고합니다. 또한 템플릿은 정적이 아니지만 응용 프로그램 데이터의 자리 표시자를 포함합니다. 기본적으로 Symfony는 강력한 템플릿 언어 인 Twig를 제공합니다.

컨트롤러에서 Twig를 사용하려면 Symfony의 기본 Controller 클래스를 확장하십시오.

// src/AppBundle/Controller/HelloWorldController.php
namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

class HelloWorldController extends Controller
{
    public function helloWorldAction()
    {
        $text = 'Hello World!';

        return $this->render('hello-world.html.twig', ['text' => $text]);
    }
}

Twig 템플릿을 만듭니다 ( app/Resources/views/hello-world.html.twig ).

<html><body>{{ text }}</body></html>

나뭇 가지는 자동으로 {{ text }} 자리 표시자를 컨트롤러가 전달한 text 매개 변수의 값으로 바꿉니다. 이렇게하면 다음 HTML 출력이 렌더링됩니다.

<html><body>Hello World!</body></html>

404 (찾을 수 없음) 페이지 반환

때때로 요청 된 자원이 없기 때문에 404 (찾을 수 없음) 응답을 리턴하려고합니다. Symfony는 NotFoundHttpException 을 던짐으로써 그렇게 할 수 있습니다.

Symfony 기본 컨트롤러는 당신을 위해 예외를 생성하는 createNotFoundException 메소드를 공개합니다 :

public function indexAction()
{
    // retrieve the object from database
    $product = ...;

    if (!$product) {
        throw $this->createNotFoundException('The product does not exist');
    }

    // continue with the normal flow if no exception is thrown
    return $this->render(...);
}

요청 객체의 데이터 사용

Request 객체에 액세스해야하는 경우 (예 : 쿼리 매개 변수를 읽거나, HTTP 헤더를 읽거나 업로드 된 파일을 처리하기 위해) 유형 힌팅 된 인수를 추가하여 메소드 인수로 요청을 수신 할 수 있습니다.

use Symfony\Component\HttpFoundation\Request;

public function indexAction(Request $request)
{
    $queryParam = $request->query->get('param');

    // ...
}

Symfony는 타입 힌트를 인식하고 요청 인자를 컨트롤러 호출에 추가합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow