Unterstütze uns mit einem WerbeClick!

Symfony 3.4 Tutorial :: Teil 3 statische Seiten

Vorwort

Es lohnt sich immer im Vorfeld einen Blick in den Befehlsumfang des Symfony-Frameworks zu werfen. Das erreicht man in dem man das Kommando
php bin/console
aufruft. Es werden dann alle Befehle aufgelistet!

 

Jedes Kommando kann wiederum mit dem help Parameter zusätzlich inspiziert werden.

 

# php bin/console help generate:controller
Usage:
  generate:controller [options]
Options:
      --controller=CONTROLLER            The name of the controller to create
      --route-format=ROUTE-FORMAT        The format that is used for the routing (yml, xml, php, annotation) [default: "annotation"]
      --template-format=TEMPLATE-FORMAT  The format that is used for templating (twig, php) [default: "twig"]
      --actions=ACTIONS                  The actions in the controller (multiple values allowed)
  -h, --help                             Display this help message
  -q, --quiet                            Do not output any message
  -V, --version                          Display this application version
      --ansi                             Force ANSI output
      --no-ansi                          Disable ANSI output
  -n, --no-interaction                   Do not ask any interactive question
  -e, --env=ENV                          The environment name [default: "dev"]
      --no-debug                         Switches off debug mode
  -v|vv|vvv, --verbose                   Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Help:
  The generate:controller command helps you generates new controllers
  inside bundles.
  
  By default, the command interacts with the developer to tweak the generation.
  Any passed option will be used as a default value for the interaction
  (--controller is the only one needed if you follow the conventions):
  
  php bin/console generate:controller --controller=AcmeBlogBundle:Post
  
  If you want to disable any user interaction, use --no-interaction
  but don't forget to pass all needed options:
  
  php bin/console generate:controller --controller=AcmeBlogBundle:Post --no-interaction
  
  Every generated file is based on a template. There are default templates but they can
  be overridden by placing custom templates in one of the following locations, by order of priority:
  
  BUNDLE_PATH/Resources/SensioGeneratorBundle/skeleton/controller
  APP_PATH/Resources/SensioGeneratorBundle/skeleton/controller
  
  You can check https://github.com/sensio/SensioGeneratorBundle/tree/master/Resources/skeleton
  in order to know the file structure of the skeleton

 

 

1. Controller anlegen


Für die statischen Seiten "Page1 und Page2" legen wir eine gemeinsame Controller-Klasse an.
Diese Controller-Klasse muss dem entsprechenden Bundle zugeordnet werden!

In unserem Fall ist dies lediglich das bereits erstellte Bundle AppBundle.

 

# php bin/console generate:controller --no-interaction --controller=AppBundle:Articles

 

Man kann das ganze auch interaktiv generieren lassen, indem man die Option --no-interaction weglässt.

Jedoch kann es hierbei möglicherweise zu falsch generierten Pfaden führen, da vermutlich nich alles angepasst wurde.

Da standardmäßig aber alles was wir benötigen, kann ruhig darauf verzichtet werden.

 

Es wurde jetzt eine neue Datei mit Namen "ArticlesController.php" im Ordner src/AppBundle/Controller erstellt.

symfony controller

In diese Datei fügen wir jetzt die Action für unsere erste Page ein:

 

 

<?php

namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;

class ArticlesController extends Controller
{

    public function page1Action()
    {
        return $this->render('',
            array(
                // ...
            )
        );
    }
}

 

 

2. View anlegen

 

Analog zu der Action "page1Action" soll es jetzt eine View geben.
Hierzu erstellen wir im Verzeichnis src/AppBundle einen Unterordner "Resources", darin einen Ordner "views" und zum Schluss darin einen Ordner mit dem Namen "Articles".
Darin legen wir eine Twig-Template Datei mit dem Namen "page1.html.twig" an!

 

symfony twig view

Der Inhalt der Page1 kann innerhalb des body Blocks beliebig hinzugefügt werden. 
Wichtig ist hierbei die Angabe: {% extends "base.html.twig" %} die dem Template sagt von welchem Layout sie erben soll!

 

{# page1.html.twig #}

{% extends "base.html.twig" %}

{% block title %}Page 1{% endblock %}

{% block body %}
    <h2>Page 1</h2>
    Ein bisschen Blindtext kann nicht schaden ...
{% endblock %}

 

3. Route und Template für die Page1 definieren

 

Die Verbindung von einem Controller zu der View wird über die sogenannten Routes im Symfony-Framework geregelt. Da wir "annotations" gewählt haben, können wir jetzt die Routes über der Action-Methode angeben!

 

    /**
     * @Route("/page1", name="page1")
     * @return Response
     */
    public function page1Action()
    {
        return $this->render('@App/Articles/page1.html.twig',
            array(
                // ...
            )
        );
    }

 

Über die URL http://testprojekt.localhost/app_dev.php/page1 kann die neue Seite jetzt getestet werden.

page1 preview 

 

Für die zweite Seite (Page2) kann man jetzt die Schritte wiederholen. Hierzu einfach eine weitere Action und ein Twig-Template analog anlegen!

Der gesamte Controller:

 

<?php

namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;

class ArticlesController extends Controller
{
    /**
     * @Route("/page1", name="page1")
     * @return Response
     */
    public function page1Action()
    {
        return $this->render('@App/Articles/page1.html.twig',
            array(
                // ...
            )
        );
    }

    /**
     * @Route("/page2", name="page2")
     * @return Response
     */
    public function page2Action()
    {
        return $this->render('@App/Articles/page2.html.twig',
            array(
                // ...
            )
        );
    }
}

 

 

Die zweite Seite (page2)

 

{# page2.html.twig #}
{% extends "base.html.twig" %}
{% block title %}Page 2{% endblock %}
{% block body %}
<h2>Page 2</h2>
    Dies ist unsere zweite Seite ...
{% endblock %}


 

Die URL für die zweite Seite lautet dann: http://testprojekt.localhost/app_dev.php/page2

 

>> Weiter zu Teil 4

Unterstütze uns mit einem Werbeclick!

Über uns

Wir sind ein agiles Team von Programmierern und haben uns auf Erweiterungen (extensions) für eine Vielzahl von Systemen spezialisiert. Unsere besondere Stärke ist das entwickeln von Erweiterungen für Shop-Systeme basierend auf dem Magento Framework oder die Entwicklung an Web-Anwendungen mit dem Symfony Framework. Eine weitere Stärke ist die Erweiterung von Content Management Systemen wie beispielsweise Wordpress, Typo3, Drupal und Joomla. Das entwickeln von Apps für Android, Windows und Apple OS Systemen ist selbstverständlich!