Outils pour utilisateurs

Outils du site


technique:guide:dev-appli-gestion

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

technique:guide:dev-appli-gestion [2017/10/04 21:44]
admin créée
technique:guide:dev-appli-gestion [2017/10/04 21:56] (Version actuelle)
admin
Ligne 1: Ligne 1:
 ====== Développement de l'​appli de gestion ====== ====== Développement de l'​appli de gestion ======
 +===== Généralités =====
 +L'​application est écrite en PHP, avec le FrameWork [[https://​cakephp.org/​|CakePHP]] version 3. Il a pas mal de documentation et une communauté française [[http://​www.cakephp-fr.org/​|ici]].
  
 +Ce framework n'est pas aussi répandu que Symphony ou d'​autres,​ en revanche il est très efficace pur faire les 80% premier pourcent d'une application. Il sait générer une appli web qui permet de modifier le contenu d'une base de données simplement à partir du schéma de la base et de conventions de nommage.
 +
 +===== Les conventions de Cake pour la BDD =====
 +
 +  * nom de table : pluriel lowercase, exemple : ''​adherents''​
 +  * clé primaire : ''​id''​
 +  * clé étrangère : <​nom_table_singulier>​_id,​ exemple : ''​adherent_id''​
 +
 +Cake c'est déployable avec un outil qui s'​appelle Composer (un package manager PHP).
 +
 +L'​outil de génération de CRUD s'​appelle Bake  (//to bake a cake//, logique)
 +
 +===== Liens utiles =====
 +
 +  * Faire un thème pour bake (en français)
 +    * [[http://​book.cakephp.org/​3.0/​en/​bake/​development.html#​creating-a-bake-theme]]
 +  * Rendre bake moins con avec les ENUM MySql
 +    * [[http://​www.dereuromark.de/​2010/​06/​24/​static-enums-or-semihardcoded-attributes/​]] (indices tout en bas de page)
 +    * [[http://​www.slideshare.net/​josezap1/​advanced-querying-with-cakephp-3]] ( diapo 9 )
 +  * Validation de formulaire, tous les types de validation supporté par défaut dans Cake
 +    * [[http://​api.cakephp.org/​3.0/​class-Cake.Validation.Validation.html]]
 +    * et pour en créer : [[http://​book.cakephp.org/​3.0/​en/​core-libraries/​validation.html#​creating-validators]]
 +  * Cheat sheet (Feuille mémo / de triche)
 +    * [[http://​cake3.codaxis.com/​]]
 +
 +
 +===== Liens de choses qui pourraient être intégrés =====
 +
 +  * ''​addBehavior('​Timestamp'​)''​ et ''​addBehavior('​Logging'​)''​
 +    * [[http://​book.cakephp.org/​3.0/​en/​orm/​table-objects.html#​basic-usage]]
 +  * Format de dates
 +    * ''​$article->​created->​format(DATE_RFC850)''​
 +  * Champ de recherche
 +    * [[http://​book.cakephp.org/​3.0/​en/​orm/​retrieving-data-and-resultsets.html#​finding-key-value-pairs]]
 +    * [[http://​book.cakephp.org/​3.0/​en/​orm/​retrieving-data-and-resultsets.html#​dynamic-finders]]
 +  * soft deletion pour par mal d'​objets
 +    * [[http://​book.cakephp.org/​3.0/​en/​orm/​query-builder.html#​passing-conditions-to-contain]]
 +  * debug requêtes
 +    * [[http://​book.cakephp.org/​3.0/​en/​orm/​retrieving-data-and-resultsets.html#​debugging-queries-and-resultsets]]
 +  * Bonne doc pour faire des requêtes avec l'ORM de Cake
 +    * [[https://​github.com/​lorenzo/​cakephp3-examples/​raw/​master/​slides.pdf]]
 +
 +
 +===== Liste de plugins à envisager =====
 +
 +[[https://​github.com/​FriendsOfCake/​awesome-cakephp]]
 +
 +  * Geolocation
 +    * [[http://​stackoverflow.com/​questions/​32307780/​getting-gps-mobile-location-data-in-cakephp-3]]
 +    * [[https://​github.com/​dereuromark/​cakephp-geo/​blob/​master/​tests/​TestCase/​Model/​Behavior/​GeocoderBehaviorTest.php]]
 +  * Images (photos des fiches d'​adhesions)
 +    * [[https://​github.com/​josbeir/​image]]
 +    * [[https://​github.com/​davidyell/​CakePHP3-Proffer/​blob/​master/​docs/​configuration.md]]
 +  * Search
 +    * [[https://​github.com/​FriendsOfCake/​search]]
 +    * [[https://​github.com/​CakeDC/​search/​blob/​master/​Docs/​Documentation/​Examples.md]]
 +
 +
 +===== Quelques exemples glanés dans la doc pour les validations =====
 +<code php>
 +namespace App\Model\Table;​
 +
 +use Cake\ORM\Table;​
 +use Cake\ORM\RulesChecker;​
 +use Cake\ORM\Rule\IsUnique;​
 +
 +class ArticlesTable extends Table
 +{
 +    public function initialize(array $config)
 +    {
 +        $this->​primaryKey('​my_id'​);​
 +        $this->​addBehavior('​Timestamp',​ [
 +            '​events'​ => [
 +                '​Model.beforeSave'​ => [
 +                    '​created_at'​ => '​new',​
 +                    '​modified_at'​ => '​always'​
 +                ]
 +            ]
 +        ]);
 +    }
 +
 +    public function validationDefault(Validator $validator)
 +    {
 +        $validator
 +            ->​requirePresence('​title',​ '​create'​)
 +            ->​notEmpty('​title'​);​
 +
 +        $validator
 +            ->​allowEmpty('​link'​)
 +            ->​add('​link',​ '​valid-url',​ ['​rule'​ => '​url'​]);​
 +
 +        $validator
 +            ->​add('​title',​ '​notEmpty',​ [
 +                '​rule'​ => '​notEmpty',​
 +                '​message'​ => __('​You need to provide a title'​),​
 +            ])
 +            ->​add('​body',​ '​notEmpty',​ [
 +                '​rule'​ => '​notEmpty',​
 +                '​message'​ => __('A body is required'​)
 +            ]);
 +
 +        $validator->​add('​email',​ '​valid',​ [
 +            '​rule'​ => '​email',​
 +            '​message'​ => '​Invalid email'
 +        ]);
 +
 +        $validator
 +            ->​add('​role',​ '​validRole',​ [
 +                '​rule'​ => '​isValidRole',​
 +                '​message'​ => __('​You need to provide a valid role'​),​
 +                '​provider'​ => '​table',​
 +            ]);
 +        return $validator;
 +    }
 +
 +    public function isValidRole($value,​ array $context)
 +    {
 +        return in_array($value,​ ['​admin',​ '​editor',​ '​author'​],​ true);
 +    }
 +
 +    public function buildRules(RulesChecker $rules)
 +    {
 +        // Add a rule that is applied for create and update operations
 +        $rules->​add($rules->​isUnique(['​email'​]));​
 +
 +
 +        $rules->​add(function ($entity, $options) {
 +            // Return a boolean to indicate pass/​failure
 +        }, '​ruleName'​);​
 +    ​
 +        // Add a rule for create.
 +        $rules->​addCreate(function ($entity, $options) {
 +            // Return a boolean to indicate pass/​failure
 +        }, '​ruleName'​);​
 +    ​
 +        // Add a rule for update
 +        $rules->​addUpdate(function ($entity, $options) {
 +            // Return a boolean to indicate pass/​failure
 +        }, '​ruleName'​);​
 +    ​
 +        // Add a rule for the deleting.
 +        $rules->​addDelete(function ($entity, $options) {
 +            // Return a boolean to indicate pass/​failure
 +        }, '​ruleName'​);​
 +    ​
 +        return $rules;
 +    }
 +}
 +</​code>​
technique/guide/dev-appli-gestion.1507146279.txt.gz · Dernière modification: 2017/10/04 21:44 par admin