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

23 réponses


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')

une fonction dans les vues $url->route('nomDeLaRoute')

Des routes dans les vues ? Oo

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 ;)

Le projet n'utilise pas Composer (tuto) ?

hugopb82
Auteur

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

hugopb82
Auteur

Salut, je viens de mettre à jour le code et la doc. J'ai ajouté :

  • Une classe Config pour pouvoir gérer tout ce qui est identifiant de base de donnée, nom du site...
  • Un dossier Lib/ qui gère les librairies externes avec un autoloader
    Voilà, je vais voir maintenant pour un router mais j'ai cru comprendre que c'était assez lourd en terme de performances donc si vous avez des conseils je suis preneur!
    Hugo

Tu aurais du regarder à Composer avant de créer ce dossier Lib...

hugopb82
Auteur

Je vais m'y interresser dès que possible. Pourquoi j'ai fait quelque chose de pas propre ?

Disons que c'est devenu la norme pour tout ce qui est dépendance et autoloading...

hugopb82
Auteur

J'ai dû louper un chapitre, je vais regarder tout ça. Merci!

hugopb82
Auteur

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é.
hugopb82
Auteur

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

Parfait

Fait signe dès que t'integres de nouvelles fonctionnalités.

hugopb82
Auteur

Salut, je n'ai pas encore eu le temps de bosser sur le router par contre j'ai réglé certains trucs :

  • Les dossiers dans Public ne sont plus affichés pour l'utilisateur. (On peut accéder à un fichier mais pas lister un dossier)
  • J'ai ajouté la possibilité d'écrire la config au format .ini
  • Je dois régler quelques problèmes apparement avec composer, je pense que dans la soirée ça sera fait!
    Voilà...
hugopb82
Auteur

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 file voir sa tout de suite :)

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.

hugopb82
Auteur

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);
hugopb82
Auteur

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???

hugopb82
Auteur

Bonjour tout le monde, je me suis remis à développer mon "mini-framework" et j'ai amélioré pas mal de choses :

  • Support de composer (au choix)
  • Nouveau router plus performant
  • Support des routes en XML
  • Simplification du code dans la page d'index (dans App/Public/index.php). Exemple de code :
    <?php
    require('../App.php');
    $app = new App();
    $app->Router->get('/', 'index@index');
    $app->boot();
  • J'ai réécrit le wiki et je pense qu'il est plus clair

Voilà, si vous avez des questions ou des suggestions n'hésitez pas!

Hugo