Le moyen le plus rapide de créer des sites Web simples à l'aide de PHP!
Installation
À propos de Velox
Architecture
Configurer
Classes
Fonctions
Commandes
Thèmes
Extension de velox
MVC
Modèles
Authentification
Changelog
Documentation
Si vous aimez ce projet et que vous souhaitez soutenir son développement, le donner un serait apprécié!

Découvrez la démo ou jouez avec le REP .
Avez-vous envie de lire? Consultez l'API complète sur le site Web de la documentation sur marwanalsoltany.github.io/velox .
composer create-project marwanalsoltany/velox my-velox-app Remarque: vous devrez peut-être ajouter le --stability=dev en fonction de la version / branche. Vous pouvez également ajouter un drapeau --no-dev pour ne pas installer de dépendances de développement.
git clone https://github.com/MarwanAlsoltany/velox.git my-velox-appFait: si vous ne souhaitez pas utiliser d'autres packages tiers. L'installation de Velox à l'aide de GIT est suffisante.
Téléchargez Velox en tant que .zip ou .tar.gz et extraire-le dans le répertoire des racines Web de votre serveur.
Conseils: Si vous souhaitez tester Velox rapidement et que vous n'avez pas de serveur Web disponible, utilisez la méthode d'installation et exécutez php bin/app-serve à l'intérieur du répertoire Velox. Cette commande fera tourner un serveur Web de développement sur localhost:8000 (notez que vous devez avoir au moins installé PHP sur votre système).
Velox est un micro-trame léger qui fait de la création d'un site Web simple utilisant PHP Joyful. Il vous aide à créer des sites Web à l'épreuve des futurs plus rapidement et plus efficacement. Il fournit des composants qui facilitent le processus de création d'un site Web à l'aide de PHP. Velox n'a pas de dépendances, le package Velox et tout ce dont il a besoin est inclus dans le projet lui-même. Tout ce que Velox fournit est un moyen de travailler avec Config , passer des données , enregistrer les itinéraires , interagir avec la base de données , rendre les vues , gérer les exceptions , le code automatique et résoudre les actifs. Il fournit la vue et les parties du contrôleur d'un motif de conception MVC . En regardant de v1.3.0 , Velox fournit également la partie du modèle , ce qui en fait un cadre MVC entièrement en vedette et à partir de v1.4.0 , il est également expédié avec un système d'authentification simple. Velox peut également être utilisé comme générateur de sites statique si tout ce dont vous avez besoin, ce sont des fichiers HTML à la fin.
Velox a été créé pour résoudre un problème spécifique, c'est un moyen de créer un site Web entre dynamique et statique, un moyen de créer un site Web simple avec quelques pages sans être obligé d'utiliser un cadre ou un CMS qui vient avec une tonne de choses qui ne seront jamais utilisées, il est léger, minimal et droit au point.
Il n'est pas recommandé d'utiliser Velox si vous avez un projet intermédiaire, vous feriez mieux d'utiliser un cadre bien établi. Velox n'est pas une initiative pour réinventer la roue, vous pouvez considérer Velox comme un kit de démarrage pour les petits projets.
Velox a un cas d'utilisation très spécial, des sites Web simples, et voici des sites Web vraiment simples. L'avantage est que vous n'avez pas de choses dont vous n'avez pas besoin. La comparaison de Velox à Laravel ou Symfony est sans importance, car ces cadres jouent dans une zone totalement différente, il vaut également la peine de mentionner que Velox est beaucoup plus simple que Lumen ou Slim.
| Annuaire | Description |
|---|---|
bootstrap | C'est là que Velox amorce l'application. Normalement, vous n'avez normalement rien à changer dans ce répertoire, sauf si vous souhaitez étendre la fonctionnalité Velox au-delà des choses de base. |
bin | C'est là que les exécutables PHP sont placés. Vous pouvez ajouter librement le vôtre ou supprimer l'intégralité du répertoire. |
app | C'est là que votre propre logique backend sera placée. Vous travaillerez principalement ici pour la partie backend de votre application. |
classes | C'est là que les fichiers source Velox en direct. Vous ne devriez rien toucher ici à moins que vous ne vouliez faire votre propre version de Velox. |
functions | C'est là que toutes les fonctions chargées dans l'application en direct. Vous pouvez ajouter librement le vôtre ou supprimer l'intégralité du répertoire. |
includes | C'est là que tous les fichiers qui devraient être préchargés seront placés. Vous pouvez ajouter librement le vôtre ou supprimer l'intégralité du répertoire. |
themes | C'est là que tous vos thèmes de frontend seront placés. Vous travaillerez principalement ici pour la partie frontale de votre application. |
config | C'est là que tous les fichiers de configuration vivront. Tous les fichiers ici seront accessibles à l'aide de la classe Config lors de l'exécution. |
storage | C'est là que Velox écrira des caches et des journaux. Vous pouvez également utiliser ce répertoire pour stocker des actifs à l'échelle de l'installation. |
public | C'est là que vous devez mettre votre index.php avec un lien symbolique pour les actifs statiques ( assets/ répertoire par exemple) pour une sécurité maximale. Vous pouvez supprimer librement ce répertoire si vous le souhaitez. |
vendor | C'est là que vos dépendances de compositeur seront placées. Vous pouvez supprimer librement ce répertoire si vous ne souhaitez pas utiliser le compositeur. |
Conseils: la plupart des fichiers répertoriés dans ces répertoires sont documentés. Jetez un coup d'œil à travers eux pour en savoir plus sur Velox.
Le point d'entrée pour une application Velox est l' index.php , ici vous devez exiger le bootstrap/autoload.php , enregistrer certains itinéraires avec leurs gestionnaires à l'aide de la Router::class et démarrer le routeur. C'est tout ce dont vous avez besoin pour avoir une application Velox fonctionnelle.
<?php
require ' bootstrap/autoload.php ' ;
Router:: handle ( ' / ' , function () {
return View:: render ( ' home ' , [ ' title ' => ' Home ' ]);
});
Router:: start (); De plus, vous pouvez ajouter Middlewares à l'aide de Router::middleware() et / ou de configuration des gestionnaires pour les réponses 404 et 405 en utilisant la valeur de configuration {global.errorPages.CODE} .
Alternativement, vous pouvez extraire la "partie d'enregistrement des routes" dans son propre fichier et informer Vellox en utilisant bootstrap/additional.php . À partir de v1.2.0 Velox le fait par défaut, le fichier includes/routes/web.php est l'endroit où vous devez enregistrer vos itinéraires. Le routeur commencera également automatiquement s'il n'est pas démarré explicitement.
Remarque: Pour que Velox fonctionne correctement et en toute sécurité, vous devez rediriger toutes les demandes vers le point d'entrée de l'application ( index.php ) et bloquer toutes les demandes vers d'autres fichiers PHP sur le serveur (jetez un œil à .htaccess.dist pour commencer avec Apache).
Le tableau suivant répertorie tous les fichiers de configuration qui sont livrés avec Velox.
| Fichier de configuration | Description |
|---|---|
global.php | Ce fichier de configuration contient certaines variables globales utilisées par presque toutes les classes (configuration à l'échelle de l'application). |
router.php | Ce fichier de configuration peut être utilisé pour remplacer Router::class . |
session.php | Ce fichier de configuration contient la configuration de session, il est utilisé par la Session::class . |
database.php | Ce fichier de configuration contient des informations d'identification de base de données, elle est utilisée par la Database::class . |
auth.php | Ce fichier de configuration contient une configuration d'authentification, il est utilisé par la Auth::class . |
theme.php | Ce fichier de configuration peut être utilisé pour modifier / étendre la configuration du thème. |
view.php | Ce fichier de configuration peut être utilisé pour personnaliser tout sur les vues. Il est utilisé par la View::class . |
data.php | Ce fichier de configuration peut être utilisé pour fournir toutes les données arbitraires, qui seront ensuite injectées dans la Data::class . |
cli.php | Ce fichier de configuration peut être utilisé pour activer / désactiver les commandes ou modifier leurs arguments. |
FAIT: Vous pouvez également ajouter librement vos propres fichiers de configuration, tout ce que vous avez à faire est de créer un nouveau fichier sous /config et d'ajouter votre configuration. Velox connaîtra ce fichier et le chargera dans l'application. Vous pouvez accéder à votre configuration via Config::get('filename.whateverKeyYouWrote') .
Les classes Velox sont divisées en quatre espaces de noms:
MAKSVeloxMAKSVeloxBackendMAKSVeloxFrontendMAKSVeloxHelperLe tableau suivant répertorie toutes les classes disponibles avec leur description:
| Classe | Description |
|---|---|
VeloxApp | Une classe qui sert de contenant de service de base pour Velox. |
BackendEvent | Une classe qui offre des fonctionnalités de traitement des événements simples (répartition et écoute). |
BackendConfig | Une classe qui charge tout à partir du répertoire /config et en fait un tableau accessible via un point de point. |
BackendRouter | Une classe qui sert de routeur et un point d'entrée pour l'application. |
BackendGlobals | Une classe qui sert d'abstraction / wrapper pour travailler avec des superglobals. |
BackendSession | Une classe qui offre une interface simple pour travailler avec les sessions. |
BackendController | Une classe abstraite qui sert de contrôleur de base qui peut être étendue pour fabriquer des gestionnaires du routeur. |
BackendDatabase | Une classe qui représente la base de données et gère les opérations de base de données. |
BackendModel | Une classe abstraite qui sert de modèle de base qui peut être étendu pour créer des modèles personnalisés. |
BackendAuth | Une classe qui sert de système d'authentification pour les utilisateurs. |
FrontendData | Une classe qui sert de sac / magasin de données abstrait accessible via la note de point. |
FrontendView | Une classe qui rend les fichiers affichés (dispositions, pages et partiels) avec la possibilité d'inclure des fichiers supplémentaires, de diviser le contenu de la page en sections et des vues rendues en cache. |
FrontendHTML | Une classe qui sert d'interface fluide pour écrire HTML en PHP. Il aide également à créer des éléments HTML à la volée. |
FrontendPath | Une classe qui sert de résolveur de chemin pour différents chemins / URL de l'application. |
HelperDumper | Une classe qui déverse les variables et l'exception dans un formatage agréable. |
HelperMisc | Une classe qui sert de titulaire pour diverses fonctions d'utilité diverses. |
Remarque: c'est tout ce que le package Velox fournit hors de la boîte.
FAIT: L' App , Event , Config , Router , Globals , Session , Database , Auth , Data , View , HTML , les classes Path sont aliasées sur l'espace de noms racine pour la facilité d'utilisation.
Les fonctions Vellox sont divisées en ces fichiers:
helpers.php : C'est là que les fonctions d'assistance pour les classes Velox en direct, ce sont principalement des fonctions qui renvoient une instance de classe ou alias une méthode.html.php : C'est là que les fonctions d'assistance HTML vivent, ce ne sont rien d'autre que des alias pour les fonctions PHP les plus utilisées avec HTML.Le tableau suivant répertorie toutes les fonctions disponibles et à quelle classe / groupe ils appartiennent:
| Classe / groupe | Fonction (s) |
|---|---|
App::class | app() ,abort() ,terminate() |
Event::class | event() |
Config::class | config() |
Router::class | router() ,handle() ,redirect() ,forward() |
Database::class | database() |
Globals::class | globals() |
Session::class | session() ,flash() ,csrf() |
Auth::class | auth() |
View::class | view() ,render() ,render_layout() ,render_page() ,render_partial() ,section_push() ,section_reset() ,section_start() ,section_end() ,section_yield() ,include_file() |
Data::class | data() ,data_has() ,data_get() ,data_set() |
HTML::class | html() |
Path::class | path() ,app_path_current() ,app_url_current() ,app_path() ,app_url() ,theme_path() ,theme_url() ,assets_path() ,assets_url() |
Dumper::class | dd() ,dump() ,dump_exception() |
| Aideurs HTML | he() , hd() , hse() , hsd() , st() , nb() |
FAIT: Vous pouvez également ajouter librement vos propres fonctions, tout ce que vous avez à faire est de créer un nouveau fichier sous /functions et d'y ajouter vos fonctions. Velox connaîtra ce fichier et le chargera dans l'application.
Velox est livré avec des commandes pratiques que vous pouvez utiliser pour effectuer des tâches répétitives. Vous pouvez exécuter ces commandes à l'aide du php bin/{command-name} .
Le tableau suivant répertorie toutes les commandes disponibles avec leur description.
| Commande | Description |
|---|---|
app-serve | Cette commande démarre un serveur de développement. |
app-mirror | Cette commande reflète l'application dans le répertoire /public . |
config-cache | Cette commande cache la configuration actuelle. |
config-dump | Cette commande vide la configuration actuelle avec la mise en surbrillance de la syntaxe. |
cache-clear | Cette commande efface les caches. |
Vous pouvez personnaliser ces commandes à l'aide du fichier config/cli.php . Ici, vous pouvez les activer / les désactiver ou leur fournir différents arguments.
Si vous souhaitez rendre toutes ces commandes accessibles via une seule interface. Consultez mon autre mélange de colis, qui le fera pour vous et encore plus.
Velox est construit autour de l'idée des thèmes , un thème est divisé en quatre répertoires:
assets/ répertoire est l'endroit où tous vos actifs statiques associés à ce thème seront placés.layouts/ répertoires sont l'endroit où vous définissez vos dispositions. Une disposition en terminologie Velox est le cadrage extérieur d'une page Web.pages/ répertoires sont l'endroit où vous mettez le contenu spécifique à chaque page, la page sera ensuite emballée avec une disposition de votre choix et enfin être rendu. Une page en terminologie Velox est le contenu réel d'une page Web.partials/ répertoires sont l'endroit où vous mettez toutes vos pièces réutilisables du thème, qui seront ensuite utilisées dans vos dispositions, pages ou autres partiels. Un bon exemple pour les partiels pourrait être: les composants , les incluses et les éléments de contenu . Vous pouvez personnaliser le comportement des thèmes à l'aide du fichier config/theme.php . Ici, vous pouvez définir le thème actif avec la clé active . Les thèmes peuvent hériter les uns des autres en définissant les parents avec la touche parent . Vous pouvez également modifier la structure du répertoire de thème si vous souhaitez utiliser la clé paths . D'autres configurations (mise en cache par exemple) qui méritent d'être jetées à voir avec les thèmes peuvent être trouvées dans le fichier config/view.php .
Conseil: Vous pouvez jeter un œil au thème velox fourni pour voir comment toutes les choses fonctionnent ensemble dans la pratique.
themes/velox/layouts/main.phtmlthemes/velox/pages/home.phtmlthemes/velox/partials/text-image.phtml Pour ajouter vos propres classes, utilisez l' app/ répertoire, c'est là que vous devez mettre votre propre logique commerciale. Notez que vous devez suivre PSR-4 pour que Velox charge vos cours. Voir app/Controller/DefaultController.php , pour obtenir une idée.
Voici une liste de certains fichiers importants que vous devez considérer lorsque vous travaillez avec Velox:
autoload/additional.php .config/data.php .includes/routes/web.php (à partir de v1.2.0 ).includes/events/system.php (à partir de v1.2.0 ). <?php
namespace App Model ;
use MAKS Velox Backend Model ;
class Person extends Model
{
protected static ? string $ table = ' persons ' ;
protected static ? array $ columns = [ ' id ' , ' first_name ' , ' last_name ' , ' age ' , ...];
protected static ? string $ primaryKey = ' id ' ;
public static function schema (): string
{
// return SQL to create the table
}
} <?php
use App Model Person ;
// creating/manipulating models
$ person = new Person (); // set attributes later via setters or public assignment.
$ person = new Person([ ' first_name ' => $ value , . . . ]); // set attributes in constructor
$ person -> get ( ' first_name ' ); // get an attribute
$ person -> set ( ' last_name ' , $ value ); // set an attribute
$ person -> getFirstName (); // case will be changed to 'snake_case' automatically.
$ person -> setLastName ( $ value ); // case will be changed to 'snake_case' automatically.
$ person -> firstName ; // case will be changed to 'snake_case' automatically.
$ person -> lastName = $ value ; // case will be changed to 'snake_case' automatically.
$ attributes = $ person -> getAttributes (); // returns all attributes.
$ person -> save (); // persists the model in the database.
$ person -> update ([ ' first_name ' => $ value ]); // updates the model and save changes in the database.
$ person -> delete (); // deletes the model from the database.
Person:: create ( $ attributes ); // creates a new model instance, call save() on the instance to save it in the database.
Person:: destroy ( $ id ); // destroys a model and deletes it from the database.
// fetching models
$ count = Person:: count (); // returns the number of models in the database.
$ person = Person:: first ();
$ person = Person:: last ();
$ person = Person:: one ([ ' first_name ' => ' John ' ]);
$ persons = Person:: all ([ ' last_name ' => ' Doe ' ], $ order , $ offset , $ limit );
$ person = Person:: find ( $ id ); // $id is the primary key of the model.
$ persons = Person::find( ' first_name ' , ' John ' , ' last_name ' , ' Doe ' . . .); // or
$ persons = Person:: find ([ ' first_name ' => ' John ' , ' last_name ' => ' Doe ' ]);
$ persons = Person:: findByFirstName ( ' John ' ); // fetches using an attribute, case will be changed to 'snake_case' automatically.
$ persons = Person:: where ( ' first_name ' , ' = ' , $ value ); // fetches using a where clause condition.
$ persons = Person:: where ( ' last_name ' , ' LIKE ' , ' %Doe ' , [[ ' AND ' , ' age ' , ' > ' , 27 ], ...], ' age DESC ' , $ limit , $ offset );
$ persons = Person:: fetch ( ' SELECT * FROM @table WHERE `first_name` = ? ' , [ $ value ]); // fetch using raw SQL query. <?php
namespace App Controller ;
use MAKS Velox Backend Controller ;
use App Model Person ;
class PersonsController extends Controller
{
public function indexAction ()
{
$ persons = Person:: all ();
return $ this -> view -> render ( ' persons/index ' , [
' title ' => ' Persons ' ,
' persons ' => $ persons
]);
}
// other CRUD actions ...
/**
* Persons search action.
*
* @route("/persons/search", {GET})
*/
public function searchAction ()
{
// ...
}
/**
* Persons middleware.
*
* @route("/persons/*", {GET, POST})
*/
public function personsMiddleware ()
{
// ...
}
} FAIT: Les opérations CRUD (à savoir: index , create , store , show , edit , update , destroy ) sont enregistrées et configurées par défaut. Pour enregistrer automatiquement vos propres itinéraires, utilisez l'annotation @route("<path>", {<http-verb>, ...}) . Voir Controller::registerRoutes() DocBlock pour en savoir plus.
FAIT: Pour rendre le modèle disponible sous forme de propriété pour le contrôleur ( $this->model ), utilisez Controller::associateModel() . Voir Controller::associateModel() DocBlock pour en savoir plus.
Conseil: Si en mode de production, en tant que raccourci, lançant une exception avec un code correspondant {global.errorPages.CODE} la valeur de configuration rendra la page d'erreur correspondante. Par exemple, lors du lancement d' new Exception('Not found', 404) Formez le contrôleur, la page d'erreur 404 configurée sera rendue et sera transmise le message d'exception. Si la page n'est pas configurée, la page d'erreur 500 sera plutôt rendue en tant que repli.
Velox n'a aucun moyen de valider les données. Consultez mon autre package Mighty, qui le fera pour vous et encore plus.
{# theme/pages/persons/index.phtml #}
{! @extends 'theme/pages/persons/base' !}
{! @block content !}
{! @super !}
< h1 > {{ $title } } </ h1 >
{! @if ( isset ( $persons ) && count ( $persons ) ) !}
< ul >
{! @foreach ( $persons as $person ) !}
< li > {{ $person -> firsName } } {{ $person -> lastName } } </ li >
{! @endforeach !}
</ ul >
{! @endif !}
{! @endblock !} Conseils: consultez le modèle Person et le PersonsController pour voir un exemple réaliste.
Velox est livré avec son propre moteur de modèles. Ce moteur de modèles est très intuitif et facile à s'entendre, si vous avez de l'expérience avec un autre moteur de modèles, l'apprentissage qu'il serait une question de minutes. Notez que l'utilisation de ce moteur de modèles est facultative. Vous pouvez simplement utiliser PHP brut dans vos vues.
La table suivante répertorie toutes les balises disponibles et ce qu'elles font:
| Étiqueter | Description |
|---|---|
{! @extends 'path/to/template' !} | Étendre un modèle, les blocs de ce modèle seront hérités. |
{! @include 'path/to/file' !} | Inclure un fichier, cela sera rendu avant l'inclusion (Impossible d'accéder aux variables de contexte). |
{! @embed 'path/to/file' !} | Incorporer un fichier, cela sera inclus tel quel (peut accéder aux variables de contexte). |
{! @block name !}{! @endblock !} | Créez un bloc pour envelopper du code. |
{! @super !} | Utilisez-le à l'intérieur d'un bloc dans un modèle étendu pour hériter du contenu du bloc parent. |
{! @block(name) !} | Imprimez un bloc. Doit être appelé au moins une fois pour rendre un bloc. |
{! @foreach ($vars as $var) !}{! @endforeach !} | Structures de contrôle (boucles, IF Instructions, ...). Toutes les structures de contrôle PHP sont disponibles ( if , else , elseif , do , while , for , foreach , continue , switch , break , return , require , include ) avec la même syntaxe mais simplement préfixé avec un @ symbole si une structure de contrôle est le premier mot de la balise. |
{! $var = '' !} | Affectations variables. Le contenu peut être une variable ou toute expression PHP valide. |
{{ $var }} | Imprimez une variable. Le contenu peut être une variable ou toute expression PHP qui peut être jetée en une chaîne. |
{{{ $var }}} | Imprimez une variable sans échapper. Le contenu peut être une variable ou toute expression PHP qui peut être jetée en une chaîne. |
{# This is a comment #} | Commentez quelque chose. Ce sera un commentaire PHP (ne sera pas disponible en HTML final). |
Conseil: jetez un œil aux persons visionnées des personnes sur PersonsController dans le thème Vellox pour un exemple réaliste.
À partir de v1.4.0 Velox est expédié avec un simple système d'authentification intégré. Ce système est très simple et facile à utiliser.
<?php
use MAKS Velox Backend Auth ;
// instantiate the Auth class
$ auth = new Auth (); // or Auth::instance();
// register a new user
$ status = $ auth -> register ( ' username ' , ' password ' );
// unregister a user
$ status = $ auth -> unregister ( ' username ' );
// log in a user
$ status = $ auth -> login ( ' username ' , ' password ' );
// log out a user
$ auth -> logout ();
// authenticate a user model
Auth:: authenticate ( $ user );
// check if there is a logged in user
$ status = Auth:: check ();
// retrieve the current authenticated user
$ user = Auth:: user ();
// add HTTP basic auth
Auth:: basic ([ ' username ' => ' password ' ]); Conseils: consultez le UsersController pour voir un exemple réaliste.
Velox est un projet open-source sous licence en vertu de la licence du MIT .
Copyright (C) 2021 Marwan al-Soltany. Tous droits réservés.