Ceci est une ancienne révision du document !
Premier projet Phalcon
-- Création
A partir de votre IDE, créer un nouveau projet PHP, en prenant soin de spécifier un dossier appartenant à la racine du serveur web (htdocs ou www).
-- Structure des fichiers
Créer l'arborescence suivante :
firstPhalcon/
app/
controllers/
models/
views/
public/
css/
img/
js/
-- URLs et sécurité
L’accès direct aux dossiers différents de public sera interdit. On utilise le mod-rewrite de apache (qu'il faut éventuellement activer dans http.conf), et on établit la réécriture d'url via les fichiers htaccess suivants :
Toutes les URLs sont redirigées vers le dossier public (les autres dossiers sont inaccessibles, donc public est le root de l'application)
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
</IfModule>
Le second fichier htaccess indique que pour les fichiers existants de public, il n'y a pas de réécriture. Pour tous les autres, c'est le fichier index.php qui gère est qui est le point d'entrée de l'application.
AddDefaultCharset UTF-8
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
</IfModule>
-- Mise en place de MVC
Créer le fichier index.php dans public :
<?php
try {
//Enregistrement d'un autoloader pour premettre l'inclusion auto des fichiers de classe
$loader = new \Phalcon\Loader();
$loader->registerDirs(array(
'../app/controllers/',
'../app/models/'
))->register();
//DI est le service responsable de l'injection de dépendance des services Phalcon utilisés
$di = new Phalcon\DI\FactoryDefault();
//Configuration des vues
$di->set('view', function(){
$view = new \Phalcon\Mvc\View();
$view->setViewsDir('../app/views/');
return $view;
});
//Configuration de l'URL de base
$di->set('url', function(){
$url = new \Phalcon\Mvc\Url();
$url->setBaseUri('/firstPhalcon/');
return $url;
});
//Interception de la requête pour routage et dispatching
$application = new \Phalcon\Mvc\Application($di);
echo $application->handle()->getContent();
} catch(\Phalcon\Exception $e) {
echo "PhalconException: ", $e->getMessage();
}
L'architecture MVC est déjà mise en place et prête à fonctionner (en quelques 10 lignes).
-- Premier contrôleur
Dans app/controllers, créer le fichier IndexController.php :
<?php
class IndexController extends \Phalcon\Mvc\Controller{
public function indexAction()
{
echo "<h1>Hello world !</h1>";
}
}
Ce contrôleur devient le contrôleur par défaut pour les requêtes vers les URLs:
- /
- /index
-- Première vue
Créer la vue app/views/index/index.phtml, qui sera appelée automatiquement par le contrôleur IndexController :
<?php
echo "<h1>Hello world !</h1>";
echo Phalcon\Tag::linkTo("inscription","Inscrivez-vous...");
L'appel de la méthode linkTo sur la classe Tag insère un lien hypertexte pointant vers le contrôleur InscriptionController qui n'existe pas encore.
Tester la page, et cliquer sur le lien :
Résultat du click sur Inscrivez-vous :
-- Premier formulaire
Créer le contrôleur manquant : app/controllers/InscriptionController.php :
<?php
class InscriptionController extends \Phalcon\Mvc\Controller
{
public function indexAction()
{
}
}
Créer le formulaire app/views/inscription/index.phtml :
<?php use Phalcon\Tag; ?>
<h2>Inscription</h2>
<?php echo Tag::form("inscription/enregistrement"); ?>
<p>
<label for="nom">Nom : </label>
<?php echo Tag::textField(array("nom","required")) ?>
</p>
<p>
<label for="email">Email : </label>
<?php echo Tag::emailField("email") ?>
</p>
<p>
<?php echo Tag::submitButton("Enregistrement") ?>
</p>
</form>
La validation HTML par défaut est bien présente :
Mais la validation du formulaire correctement renseigné signale l'absence de l'action enregistrement du contrôleur InscriptionController.
PhalconException: Action 'enregistrement' was not found on handler 'inscription'
-- Premier modèle
-- Création de la base
Créer la base de données Mysql firstPhalconDb.
Créer la table users :
CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `nom` varchar(70) NOT NULL, `email` varchar(70) NOT NULL, PRIMARY KEY (`id`) );
-- Création d'un modèle
<?php
class Users extends \Phalcon\Mvc\Model{
}
-- Connexion à la base
...
$di = new Phalcon\DI\FactoryDefault();
//Configuration du service database
$di->set('db', function(){
return new \Phalcon\Db\Adapter\Pdo\Mysql(array(
"host" => "localhost",
"username" => "root",
"password" => "",
"dbname" => "firstPhalconDb"
));
});
...
-- Validation du formulaire et enregistrement
Ajouter la méthode suivante dans InscriptionController, correspondant à l'url : inscription/enregistrement
<?php
class InscriptionController extends \Phalcon\Mvc\Controller
{
public function indexAction(){
}
public function enregistrementAction(){
$user = new Users();
//Enregistrement et vérification des erreurs
$success = $user->save($this->request->getPost(), array('nom', 'email'));
if ($success) {
echo "Merci de votre enregistrement !";
} else {
echo "Erreurs lors de l'enregistrement : ";
foreach ($user->getMessages() as $message) {
echo $message->getMessage(), "<br/>";
}
}
$this->view->disable();
}
}
Liste des utilisateurs
En utilisant la méthode find() de la classe Model :