Bonjour tout le monde, j'ai créé un petit framework MVC et j'aimerais avoir vos avis, suggestions pour celui ci .
Le lien github : https://github.com/hugopb82/S-MVC
Merci par avance. Hugo
Je te conseille de pousser un peut plus les routes, pouvoir avec des routes customisée ou l'on peut definir des paramètres dans l'url (un peut comme le router laravel) et des routes nommés qui permettent de faire des url propres un peut imageiner une fonction dans les vues $url->route('nomDeLaRoute')
Des url :p, c'est vrais que c’était mal dit des routes nommé dans le config et un fonction qui genere les url en fonction dans les vues ;)
Merci pour vos réponses. Je vais regarder pour le routing mais je pense que je le laisserai en option car le but du framwork est d'être ultra simple, voir minimaliste. Après c'est vrai que des urls plus propres ça serait bien. Je vais me renseigner pour composer. J'ai un peu avancé aussi en local mais j'ai pas encore mis à jour le code sur GitHub. Je vois tout ça demain.
Hugo
Salut, je viens de mettre à jour le code et la doc. J'ai ajouté :
Je vais m'y interresser dès que possible. Pourquoi j'ai fait quelque chose de pas propre ?
Salut, j'ai ajouté le support de composer et je suis actuellement en train de bosser sur un router. Si vous avez encore des idées d'améliorations je suis preneur!
Hugo
Salut Hugo
J'ai testé ton framework et franchement il est pas mal.
J'aurais aimé qu'au niveau des routeurs s'il etait possible d'intégré un système genre :
Si l'url vaut : /age/10
// Qu'on puis faire pointer l'url vers le controller ou vers une fonction anonyme comme sur **laravel** mais un peu pousser.
// 1 - Par exemple vers le controller AgeController sa donnerai sa :
Router::get('age' , '/age/:age', 'Age:index')
->regex('age', '\d+') // control si la variable age est un entier
->condition('age >= 0 and age <= 120') // control que la variable age est compris entre 0 & 120.
// 2 - Par un exemple vers une fonction anonyme sa donnerai sa :
Router::get('age' , '/age/:age')
->regex('age', '\d+') // control si la variable age est un entier
->condition('age >= 0 and age <= 120') // control que la variable age est compris entre 0 & 120.
->setAction(function($age)
{
echo $age;
}); // action appeler lorsque la route est verifié.
Ok je vais essayer de m'y mettre dès demain mais ça m'a l'air quand même complexe :)
Je te remercie pour ton retour positif, ça fait toujours plaisir!
Hugo
Salut, je n'ai pas encore eu le temps de bosser sur le router par contre j'ai réglé certains trucs :
Salut, j'ai enfin créer le router (merci @balbert). J'ai mis le code à jour sur github (j'ai aussi fait quelques changements au niveau de l'architecture) et donc on peut maintenant déclarer des routes du type :
Router::get('/', 'index#index()');
Router::get('/view/{int:id}', 'post#view(:id)', '$id > 0');
Router::any('/example/{all:text}', function($text){
echo $text;
});
Voila, il doit encore il y avoir quelques bugs donc si vous en trouvez n'hésitez pas à me contacter.
Hugo
Bonjour @hugopb82,
Je suis entraint de tester ton framework, le routing repond parfaitemnt à mes attentes.
Concernant les bugs :
dans le ton bootstrap.php à la ligne 45 lorsque t'appelles la methode d'un controller t'utilises ->
45 : call_user_method_array($this->_method, $controller, $this->_params);
Alors que c'est deprecié, tu peux le remplacer par :
45 : call_user_func_array([$controller, $this->_method] , $this->_params);
Il serait aussi parfait que t'utilises l'autoloader de composer.
Un petit truc qui serait aussi parfait à ajouté au niveau du routing faire un fichier
router.xml qui contiendra les règles il te suffira de le valider avec un fichier xsd et c'est bon (Comme sur Struts 2 en java :) ).
<routes>
<route name="accueil">
<route-url>/index/{int:variable}</route-url>
<route-action>index#index(:variable)</route-action>
</route>
</routes>
Si tu utilises phpstorm t'as pas besoin de savoir comment fonction le xsd, puis que tu peux le générer.
Vu que t'as déjà fait une classe qui gere le routing, il te suffira de lire le fichier xml et appeler les fonctions correspondante.
Pour la lecture du fichier tu peux utilisés la class SimpleXMLElement.
Bonne continuation.
Merci pour ces réponses, je m'y penche dès que possible. J'ai juste une question : utiliser l'autoloader de composer est-il indipensable ??? Parce que mes autoloaders fonctionnent bien et que le jour ou composer deviendra obselète il faudra retaper tout le code
Ton autoloader est super, mais c'est tout simplement pour respecter la norme :).
Je viens de voir un petit bug au niveau du routing @Hugo.
J'ai crée une route :
Router::get('/page/{int:page}', 'administration#page(:page)')
Lorsque je veux acceder à /page/1 tout fonctionne parfaitement mais si j'essaie d'acceder à /page/1?url=facebook
Sa m'affiche Error.
Je pense que sa vient de ton .htaccess.
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Tu peux remplacer ton .htaccess par
RewriteRule ^(.+)$ index.php [QSA,L]
Puis dans App.php à la ligne 20 et remplacer $url par =>
$exp = explode(dirname($_SERVER['PHP_SELF']), $_SERVER['REDIRECT_URL'],2);
$url_array = explode('/', $exp[0]);
$url = count($exp) > 1 ? $exp[1] : end($url_array);
C'est bon j'ai réglé le bug du router (même si je pense que du refactoring ferait du bien...), je passe à composer dès que possible (demain je pense). Après je m'occuperait de la partie Lib du projet parce qu'un framwork sans support natif des bases de données ça craint un peu ^^
Une question : tu sais comment on fait pour que mon répertoire Lib pointe vers un autre dépôt Github???
Bonjour tout le monde, je me suis remis à développer mon "mini-framework" et j'ai amélioré pas mal de choses :
<?php
require('../App.php');
$app = new App();
$app->Router->get('/', 'index@index');
$app->boot();
Voilà, si vous avez des questions ou des suggestions n'hésitez pas!
Hugo