Objectifs de cette séance :
GET
(+ URL)Ressource Web : objet d’une requête
Exemple : page, document vidéo, formulaire, …
La vue représente un état d’une application interactive, pour l’utilisateur
Patron de conception M V C (Modèle, Vues, Contrôleur)
Modèle déjà vu avec Doctrine.
Page Web = représentation d’une vue de l’application (affichable dans une navigateur)
Visualisation d’une page contenant différentes ressources
Hypertexte : proviennent pas toutes du même serveur HTTP (requêtes supplémentaires)
Dans ce cours, principalement 1ère option (application Web « classique »)
HyperText Markup Language
Arbre sections, sous-section (plan document textuel), visible :
<body>
<h1>...</h1>
<h2>...</h2>
<p>...</p>
<h1>...</h1>
</body>
mise en forme « par défaut » par navigateur
<div>...</div>
<span>...</span>
<article>
<aside>
<details>
<figcaption>
<figure>
<footer>
<header>
<main>
<mark>
<nav>
<section>
<summary>
<time>
<header> | |
<nav> | |
<aside> | <section> |
<article> | |
<footer> |
Listes à puces :
<ul>
<li> ... </li>
<li> ... </li>
</ul>
Lien vers une autre ressource :
<a href="/todo/42">Coder en HTML</a>
Soumission de données pour les applications : génère des requêtes HTTP vers des ressources.
-> séances suivantes
Pomper le code source dans le navigateur
Ctrl U
!
« affichage » d’HTML sur la sortie standard du programme
echo "<html>...</html>";
ou
print("<html>...</html>");
Résultat souhaité (liste à puces) :
<!DOCTYPE html>
<html>
<head>
<title>Ma page</title>
</head>
<body>
<ul id="navigation">
<li><a href="products/">Produits</a></li>
<li><a href="company/">Société</a></li>
<li><a href="shop/">Boutique</a></li>
</ul>
<h1>Ma page</h1>
Salut le monde
</body>
</html>
Motif à répéter :
<li>
<a href="{{ href }}">
{{ caption }}
</a>
</li>
array(
array('href' => 'products/', 'caption' => 'Produits'),
array('href' => 'company/', 'caption' => 'Société'),
array('href' => 'shop/', 'caption' => 'Boutique')
);
<!DOCTYPE html>
<html>
<head>
<title>Ma page</title>
</head>
<body>
<ul id="navigation">
{% for item in navigation %}
<li><a href="{{ item.href }}">{{ item.caption }}</a></li>
{% endfor %}
</ul>
<h1>Ma page</h1>
{{ a_variable }}
</body>
</html>
array(
'navigation' => array(
array('href' => 'products/', 'caption' => 'Produits'),
array('href' => 'company/', 'caption' => 'Société'),
array('href' => 'shop/', 'caption' => 'Boutique')
),
'a_variable' => "Salut le monde"
);
<!DOCTYPE html>
<html>
<head>
<title>Ma page</title>
</head>
<body>
<ul id="navigation">
<li><a href="products/">Produits</a></li>
<li><a href="company/">Société</a></li>
<li><a href="shop/">Boutique</a></li>
</ul>
<h1>Ma page</h1>
Salut le monde
</body>
</html>
{{ var }}
{% ... %}
: for i in
, if
, block
…{# ... #}
Différent de <!-- ... -->
(commentaire HTML)<?php
require_once("../lib/Twig/Autoloader.php" );
Twig_Autoloader::register();
$loader = new Twig_Loader_Filesystem('../templates/');
$twig = new Twig_Environment($loader);
$data = array('navigation' => array(
array('href' => 'products/', 'caption' => 'Produits'),
array('href' => 'company/', 'caption' => 'Société'),
array('href' => 'shop/', 'caption' => 'Boutique')
),
'a_variable' => "Salut le monde");
echo $twig->render('home.html.twig', $data);
base.html.twig
<!DOCTYPE html>
<html>
<head>
{% block head %}
<link rel="stylesheet" href="style.css" />
<title>{% block title %}{% endblock %}</title>
{% endblock %}
</head>
<body>
<div id="content">
{% block content %}{% endblock %}
</div>
<div id="footer">
{% block footer %}
© Copyright 2016 by ...</a>.
{% endblock %}
</div>
</body>
</html>
accueil.html.twig
{% extends "base.html.twig" %}
{% block title %}Accueil{% endblock %}
{% block content %}
<h1>Accueil</h1>
<p class="important">
Bienvenue sur ma page géniale
</p>
{% endblock %}
Twig s’interface avec le modèle Doctrine => moins de code à écrire en PHP \o/
Inconvénient : pas mal de syntaxes différentes
dump()
En PHP :
$var = [
'a simple string' => "in an array of 5 elements",
'a float' => 1.0,
'an integer' => 1,
'a boolean' => true,
'an empty array' => [],
];
dump($var);
En Twig :
{% dump var %}
Attention :
{% dump todos %} {% for todo in todos %} {# the contents of this variable are displayed on the web page #} {{ dump(todo) }} <a href="/todo/{{ todo.id }}">{{ todo.title }}</a> {% endfor %}
Lire les messages d’erreurs !
[X]
HTTP (GET)[X]
PHP[X]
Doctrine[X]
Routeur Symfony[X]
HTML[X]
TwigTout ce qu’il faut pour un site Web dynamique en lecture seule :-)