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).
Créer l'arborescence suivante :
firstPhalcon/ app/ controllers/ models/ views/ public/ css/ img/ js/
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>
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).
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:
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 :
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'
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`) );
<?php class Users extends \Phalcon\Mvc\Model{ }
... $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" )); }); ...
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(); } }
En utilisant la méthode find() de la classe Model :