Szukaj…


Wprowadzenie

Kontroler w Symfony to wywołanie PHP (funkcja, metoda na obiekcie lub zamknięcie), które odbiera żądanie HTTP i zwraca odpowiedź HTTP. Odpowiedź HTTP może zawierać wszystko: stronę HTML, ciąg JSON, plik do pobrania itp.

Aby powiedzieć Symfony, który kontroler powinien obsłużyć określone żądanie, musisz skonfigurować trasę .

Składnia

  • $ this-> generateUrl ('route_name', ['placeholder' => 'value']); // generuje adres URL trasy route_name trasy z symbolem zastępczym
  • $ this-> render ('template.html.twig'); // renderuje szablon Twig i zwraca obiekt Response
  • $ this-> render ('template.html.twig', ['parameter' => $ value]); // renderuje szablon Twig z parametrem
  • throw $ this-> createNotFoundException ('Message'); // zgłasza NotFoundHttpException, który spowoduje, że Symfony zwróci odpowiedź 404

Uwagi

Kontrolery powinny być małe i koncentrować się na obsłudze żądań HTTP: rzeczywista logika biznesowa aplikacji powinna być delegowana do różnych części aplikacji, na przykład modelu domeny.

Prosta klasa kontrolera

// 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>'
        );
    }
}

Renderowanie szablonu Twig

Przez większość czasu będziesz chciał renderować odpowiedzi HTML z szablonu zamiast kodować HTML w kontrolerze. Ponadto szablony nie będą statyczne, ale będą zawierać symbole zastępcze danych aplikacji. Domyślnie Symfony jest wyposażony w Twig, potężny język szablonów.

Aby użyć Twig w kontrolerze, rozszerz podstawową klasę Controller Symfony:

// 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]);
    }
}

Utwórz szablon Twig (znajdujący się w app/Resources/views/hello-world.html.twig ):

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

Twig automatycznie zastąpi symbol zastępczy {{ text }} wartością parametru text przekazanego przez kontroler. Spowoduje to wyświetlenie następujących danych wyjściowych HTML:

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

Zwracanie strony 404 (nie znaleziono)

Czasami chcesz zwrócić odpowiedź 404 (Nie znaleziono), ponieważ żądany zasób nie istnieje. Symfony pozwala ci to zrobić, NotFoundHttpException .

Podstawowy kontroler Symfony ujawnia metodę createNotFoundException , która tworzy dla ciebie wyjątek:

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(...);
}

Korzystanie z danych z obiektu Request

Jeśli potrzebujesz uzyskać dostęp do obiektu Request (na przykład, aby odczytać parametry zapytania, odczytać nagłówek HTTP lub przetworzyć przesłany plik), możesz otrzymać żądanie jako argument metody, dodając argument wskazujący na typ:

use Symfony\Component\HttpFoundation\Request;

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

    // ...
}

Symfony rozpozna podpowiedź dotyczącą typu i doda argument żądania do wywołania kontrolera.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow