
MVPHP est un framework simple et facilement piratable pour développer des applications Web PHP minimalement viables. De nombreux cadres PHP ont une courbe d'apprentissage abrupte et ont profondément abstraité leur fonctionnalité. MVPHP est conçu pour garder les choses simples, faciles et plus proches du PHP pur. Il fournit également une implémentation simple et personnalisable de bootstrap pour que vous commencez à créer un frontal sans trop de tracas.
Ce qu'il inclut:
Ce que ce n'est pas:
MVPHP n'est pas un cadre PHP robuste et bien testé comme Laravel, Symfony, Zend, etc. Ce cadre est destiné à développer rapidement des applications Web PHP de preuve de concept avec des frais généraux minimaux, peu d'opinions et beaucoup de flexibilité. Utilisez-le à vos risques et périls! Veuillez créer un problème si vous rencontrez un bogue ou si vous avez des suggestions.
composer install dans la racine du projet.npm install -g gulp-cli pour installer à l'échelle mondiale la Gulp CLInpm install dans la racine du projet pour installer les outils dont nous avons besoin pour créer les fichiers frontaux.gulp pour construire les fichiers frontaux.public .L'idée de base derrière ce cadre est de commencer par une classe simple qui gérera toutes les fonctionnalités de base.
app.php est le fichier bootstrap qui charge d'abord nos paramètres config.php , puis instancie notre classe principale en créant l'objet $app . Un objet $auth est également créé pour toutes les fonctionnalités liées à l'authentification. Nous indiquons une propriété de notre objet principal ( $app->auth ) pour référence à $auth afin de garder les choses simples et de la rendre accessible dans le cadre de $app .
$ app = new MVPHP (); Presque tout ce que nous faisons utilisera cet objet $app .
app.php nécessite également le fichier routes.php dans le répertoire racine, où nous définirons nos itinéraires initiaux. Vous verrez plusieurs exemples de travail dans ce fichier.
Il existe plusieurs façons de définir un itinéraire et ce qu'il devrait faire:
$ app -> route ( ' /example ' , function () use ( $ app ) {
// Do stuff here
}); Une fermeture est une fonction anonyme qui s'exécutera lorsque la demande URI correspond à l'itinéraire. Pour que les méthodes de notre classe MVPHP principale soient accessibles à l'intérieur de cette fonction anonyme, nous spécifions à use ($app) . Cela importera la variable $app dans la portée variable de la fonction anonyme.
$ app -> route ( ' /example/{id} ' , function ( $ params ) use ( $ app ) {
echo $ params [ ' id ' ];
});Vous pouvez indiquer des paramètres variables dans un URI avec des supports. Ils sont identifiés dans un tableau associatif avec la clé étant le nom défini dans l'itinéraire et la valeur étant la valeur réelle fournie dans l'URI de la demande.
$ app -> route ( ' /example/{id:int} ' , function ( $ params ) use ( $ app ) {
echo $ params [ ' id ' ];
});Vous pouvez également définir des contraintes pour faire correspondre les paramètres URI en utilisant un côlon suivi du type de contraintes. Laisser de côté la valeur de contrainte sera par défaut à la contrainte "String".
Options de contrainte:
Exemples d'expression régulière:
Toute expression qui fonctionne avec la fonction preg_match de PHP fonctionnera ici. Cet outil est utile pour tester les expressions avant de les implémenter.
// This example requires the ID value to be a 5 digit number
$ app -> route ( ' /example/{id:regex=^[0-9]{5}$} ' , function ( $ params ) use ( $ app ) {
echo $ params [ ' id ' ];
});
// This example requires the ID to be lower or uppercase letters between 1-10 characters long
$ app -> route ( ' /example/{id:regex=^[a-zA-Z]{1,10}$} ' , function ( $ params ) use ( $ app ) {
echo $ params [ ' id ' ];
}); $ app -> route ( ' /example ' ); Parfois, votre application aura beaucoup de routes et vous préférez les organiser en fichiers séparés que les avoir tous dans le fichier routes.php .
Si vous enregistrez un itinéraire comme celui-ci, MVPHP recherchera un fichier corrélé avec le même nom dans le répertoire controllers . Dans l'exemple ci-dessus, un itinéraire enregistré vers /example recherchera un fichier example.php dans le répertoire des contrôleurs et l'exigera.
Maintenant, vous pouvez enregistrer plus de routes liées aux points de terminaison /example dans le fichier example.php . Par exemple, votre fichier controllers/example.php pourrait ressembler à ceci:
// Reiterate this route and do something with it this time
$ app -> route ( ' /example ' , function () use ( $ app ) {
// Do stuff
});
// Register any other related route endpoints here
$ app -> route ( ' /example/stuff ' , function () use ( $ app ) {
// Do stuff
});Si vous souhaitez utiliser un fichier spécifique avec un nom différent, spécifiez-le simplement comme deuxième paramètre:
$ app -> route ( ' /example ' , ' myfile ' ); Cela essaiera d'exiger controllers/myfile.php .
Le concept des itinéraires, des contrôleurs et des modèles est très vaguement défini dans ce cadre. Nous évitons d'utiliser un tas de classes différentes pour des raisons de simplicité. Un contrôleur, dans le contexte de ce cadre, devrait simplement être un endroit pour médier entre les demandes et les fonctionnalités a défini le modèle.
Regardez les fichiers du répertoire controllers pour des exemples.
Nous pouvons tester différentes méthodes de demande en utilisant la méthode action :
$ app -> route ( ' /example ' , function () use ( $ app ){
if ( $ app -> action ( ' post ' ) ) {
// Do stuff on POST
} elseif ( $ app -> action ( ' get ' ) ) {
// Do stuff on GET
}
}); Les modèles de vue sont stockés dans le répertoire views . Nous pouvons appeler une vue (généralement à partir d'un contrôleur) comme ceci:
$ app -> view ( ' my-template ' ); Cela cherche simplement my-template.php dans le dossier des vues et nécessite le fichier. Si nous avons des variables dans le fichier de modèle, nous devons les transmettre dans la méthode de vue comme ceci:
$ my_var1 = ' Stuff I want to echo in the template. ' ;
$ app -> view ( ' my-template ' , [
' my_var1 ' => $ my_var1
]); Maintenant, $my_var1 sera accessible dans le fichier de modèle de vue.
Nous ne nous soucions pas d'un moteur de modèles (car PHP est intrinsèquement un langage de modèles). Accédez simplement aux varialbes de votre HTML comme ceci:
< p > < ?=$my_var1;? > </ p >Déclarations conditionnelles:
< ?php if ( isset($my_var1) ):? >
< p > < ?=$my_var1;? > </ p >
< ?php endif;? >Vous avez l'idée. Templage PHP pur et simple.
Par défaut, le frontal utilise Bootstrap. Vous pouvez trouver tous les fichiers source dans le répertoire frontend . Les instructions pour construire les fichiers source à partir du dossier frontend sont définies dans le fichier gulpfile.js dans la racine du projet.
Lorsque vous exécutez gulp pour la première fois dans la racine du projet, les fichiers SCSS et JavaScript ont été combinés, minifiés, copiés dans le dossier public . Les fichiers Vendor JS et CSS que nous utilisons (jQuery, bootstrap, etc.) sont également copiés dans le dossier public .
Avant de modifier les fichiers SCSS et JavaScript dans le répertoire frontend , vous pouvez exécuter gulp watch dans la racine du projet. Gulp surveillera toutes les modifications que vous enregistrez dans les fichiers et les enregistrerez au fur et à mesure.
La classe models/Documents.php fournit une méthode pour écrire un fichier PDF à partir d'une source HTML. Cette classe utilise wkhtmltopdf et peut vous obliger à installer ces dépendances avant qu'elle ne fonctionne:
sudo apt-get install xfonts-base xfonts-75dpi urw-fonts
Plus de fonctionnalités liées au PDF et à d'autres "documents" seront ajoutées à l'avenir.
Approfondir les autres méthodes d'utilité disponibles en regardant le fichier models/MVPHP.php , qui contient notre classe principale. Plus seront ajoutés à l'avenir!