2012-01-31 15 views
10

Jestem nowy w symfony2. Zacząłem od kilku tutoriali, a następnie zacząłem budować SYMBLOG. Zrozumiałem to i jestem w stanie dodać lub zmienić funkcjonalność. Mam trochę zamieszania w obiegu pracy, mam na myśli to, jak pliki współdziałają, aby wyrenderować stronę lub wytworzyć wynik. Czy ktoś może wyjaśnić mi szczegółowo od samego początku, jak ten przepływ przebiega w symfony2. począwszy od żądania użytkownika, użytkownik wprowadza adres URL, aż wyniki symfony2 będą wyświetlane. proszę podać routing.yml w przepływie. ?Workflow with Symfony2?

Odpowiedz

21

Powinieneś sprawdzić ten link. Symfony - the big picture

Wyjaśnia szczegółowo wszystkie kroki związane z wprowadzeniem adresu URL w przeglądarce do renderowania strony.

Zasadniczo wszystkie żądania trafiają do kontrolera przedniego. Jego zadaniem jest kierowanie żądań do odpowiedniego kodu kontrolera. Robi to za pomocą tras zdefiniowanych w pliku app/config/routing.yml. Kontrolery zdefiniowane w src/<BundleName>/Controller/<name> wykonują pewną logikę biznesową, na przykład pobierają dane z Modelu (repozytorium) i wysyłają te informacje do widoku (szablony). Widoki są po prostu kodem HTML. Symfony używa mechanizmu szablonowego o nazwie Twig. Zamiast zawierać <?php ... ?> bloków w kodzie HTML, Symfony przekazuje dane z kontrolera i może być z łatwością użyty wewnątrz widoku w blokach Twig {% %} lub {{ }}.

Mówiąc najprościej, jest tu workflow:

  1. Przeglądarka wysyła żądanie
  2. Zapytanie otrzymał w kontrolerze frontowym web/app_dev.php lub web/app.php
  3. Front Controller sprawdza trasy zdefiniowane w app/config/routing.yml i wysyła żądanie do odpowiedniego kontrolera zdefiniowanego w src/<BundleName>/Controller/<controller_name>
  4. Kontroler przygotowuje zawartość potrzebną w HT ML (przykład - kwerendy bazy danych z src/<BundleName>/Repository) i wysyła informacje do widzenia - src/Resources/views/<twig file name>
  5. Widok tworzy kod HTML i wysyła go z powrotem do kontrolera
  6. Kontroler tworzy odpowiedź HTTP i wysyła go z powrotem do przeglądarki

są rzeczy takie jak aPP/AppKernel które wchodzą w między ale ja go pominąć.

Oto użyteczne fragmenty z linku podanego powyżej:

URL:

http://localhost/Symfony/web/app_dev.php/demo/hello/Fabien 

Co tu się dzieje? Przeanalizujmy URL: app_dev.php: To jest kontroler frontowy. Jest to unikalny punkt wejścia aplikacji i odpowiada na wszystkie żądania użytkowników; /demo/hello/Fabien: Jest to wirtualna ścieżka do zasobu, do którego użytkownik chce uzyskać dostęp. Twoim obowiązkiem jako programisty jest napisanie kodu odwzorowującego żądanie użytkownika (/ demo/hello/Fabien) do zasobu z nim powiązanego (strona HTML Hello Fabien!).

Routing:

trasy Symfony2 wniosek do kodu, który obsługuje go, starając się dopasować żądany adres URL wobec niektórych skonfigurowanych wzorców. Domyślnie te wzorce (zwane trasami) są zdefiniowane w pliku konfiguracyjnym app/config/routing.yml. Gdy jesteś w środowisku programisty - wskazanym przez app_ dev front kontroler - również plik konfiguracyjny app/config/routing_dev.yml. W wersji standardowej, trasy do tych stron „demo” są umieszczone w tym pliku:

_welcome: 
pattern:/
defaults: { _controller: AcmeDemoBundle:Welcome:index } 

Kontroler:

Symfony2 wybiera kontroler na podstawie wartości _controller z routingiem konfiguracja: AcmeDemoBundle: Welcome: index. Ten ciąg jest kontrolerem nazwa logiczna, i odwołuje się do metody indexAction z klasy Acme \ DemoBundle \ Controller \ WelcomeController:

class WelcomeController extends Controller 
{ 
    public function indexAction() 
    { 
     return $this->render('AcmeDemoBundle:Welcome:index.html.twig'); 
    } 
} 

Widok:

Kontroler renderuje SRC/Acme/DemoBundle/Resources/views/Demo/szablon hello.html.twig

{% extends "AcmeDemoBundle::layout.html.twig" %} 

{% block title "Hello " ~ name %} 

{% block content %} 
    <h1>Hello {{ name }}!</h1> 
{% endblock %} 

Możesz również sprawdzić Symfony2 architecture