수색…
소개
Symfony의 컨트롤러는 HTTP 요청을 받고 HTTP 응답을 반환하는 PHP 호출 가능 함수 (함수, 객체의 메서드 또는 클로저)입니다. HTTP 응답에는 HTML 페이지, JSON 문자열, 파일 다운로드 등이 포함될 수 있습니다.
통사론
- $ 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는 타입 힌트를 인식하고 요청 인자를 컨트롤러 호출에 추가합니다.