{"id":18547802,"url":"https://github.com/neutron-pro/phpoo-exam","last_synced_at":"2025-05-15T07:34:28.328Z","repository":{"id":252706513,"uuid":"338624722","full_name":"Neutron-Pro/phpoo-exam","owner":"Neutron-Pro","description":null,"archived":false,"fork":false,"pushed_at":"2021-02-13T17:08:10.000Z","size":79,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-17T09:43:23.324Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Neutron-Pro.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-13T17:06:40.000Z","updated_at":"2021-02-13T17:08:13.000Z","dependencies_parsed_at":"2024-08-11T23:48:10.927Z","dependency_job_id":"7b1a698e-98ab-48b5-b54d-96113f830c4e","html_url":"https://github.com/Neutron-Pro/phpoo-exam","commit_stats":null,"previous_names":["neutron-pro/phpoo-exam"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Neutron-Pro%2Fphpoo-exam","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Neutron-Pro%2Fphpoo-exam/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Neutron-Pro%2Fphpoo-exam/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Neutron-Pro%2Fphpoo-exam/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Neutron-Pro","download_url":"https://codeload.github.com/Neutron-Pro/phpoo-exam/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254296634,"owners_count":22047316,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T20:31:40.682Z","updated_at":"2025-05-15T07:34:28.232Z","avatar_url":"https://github.com/Neutron-Pro.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Framework MVC par NeutronStars\n\n---\n\n## Installation du framework\n\n```sh\ngit clone https://github.com/Neutron-Pro/frameword-mvc.git mvc-neutronstars\n```\n\n## Configuration du framework\n\n- Copier le fichier `config-dist.php` dans le dossier `config` et coller le dans ce même dossier en le renommant `config.php`.\n```php\n// Changer la location si vous souhaitez déplacer le dossier des layouts.\ndefine('LAYOUTS', '../src/layouts');\n\n// Changer la location si vous souhaitez déplacer le dossier des vues.\ndefine('VIEWS', '../src/views');\n\n// Configuration de la base de donnée. (Ce n'est pas obligatoire si vous ne l'utilisez pas.)\n// Le framework utilise une base de donnée SQL.\ndefine('DB_HOST', '127.0.0.1');\ndefine('DB_PORT', 3306);\n\n// Le nom de votre base de donnée.\ndefine('DB_NAME', '');\n// Le nom de l'utilisateur.\ndefine('DB_USER', '');\n// Le mot de passe\ndefine('DB_PASSWORD', '');\n// Le jeu d'encodage des caractères.\ndefine('DB_CHARSET', 'utf8mb4');\n```\n\nPensez à bien démarrer votre serveur vers le dossier `public`.\n\n## Démarrer le serveur avec PHP\n\n```shell\n# Si votre console se trouve à la racine du projet:\nphp -S 127.0.0.1:8080 -t public/\n\n# Si votre console se trouve dans le dossier public:\nphp -S 127.0.0.1:8080\n```\n\n---\n\n## Les routes\n\nPour ajouter des nouvelles routes, allez dans le fichier `routes.php` qui se trouve dans le dossier `config`.\n\n```php\nuse NeutronStars\\Kernel;\n\nKernel::get()-\u003egetRouter()\n    -\u003eadd('home', [\n        'path'       =\u003e '/',\n        'controller' =\u003e 'App\\\\Controller\\\\HomeController#home'\n    ])\n    -\u003eadd('404', [\n        'path'       =\u003e '/404',\n        'controller' =\u003e 'App\\\\Controller\\\\ErrorController#call404'\n    ]);\n```\n\nLes routes sont ajoutées grâce à la méthode `add` de `Router`. Ensuite vous devez lui renseigner un nom et un tableau contenant des paramètres clef.\n\n```php\n$params = [\n    /* L'URL à entrer dans le navigateur. */\n    'path' =\u003e '/test',\n    /* \n        Le chemin vers le controller ou la route se rendra ainsi que la méthode à appeler se trouvant dans se même controller. \n        Pattern: Your\\\\Namespace\\\\YourClassController#yourMethod\n    */\n    'controller' =\u003e 'App\\\\Controller\\\\TestController#index'\n];\n// Ajouter votre route\n$router-\u003eadd('test', $params);\n```\n\nIl y a aussi la possibilité d'ajouter des routes enfants ainsi que des paramètres customisés.\n\n```php\n$params = [\n    'path' =\u003e '/parent',\n    'controller' =\u003e 'App\\\\Controller\\\\ParentController#index',\n    /* Ajouter un enfant à la route pour ajouter un chemin après le /test */\n    'children' =\u003e [\n        /* Pour les route enfant c'est exactement les mêmes paramètres que le parent. Juste qu'il prend un nom directement via la clef. */\n        'child' =\u003e [\n            /* Ceci donnera: /parent/children */\n            'path' =\u003e '/children',\n            /*  */\n            'controller' =\u003e 'App\\\\Controller\\\\ParentController#child'\n        ],\n        'child2' =\u003e [\n            /* \n              Pour ajouter une route avec un paramètre customisable, il vous faudra utiliser les accolades\n              Ceci donnera: /parent/test-101\n            */\n            'path' =\u003e '/{slug}-{id}',\n            'controller' =\u003e 'App\\\\Controller\\\\ParentController#child2',\n            /* Ensuite utilisez les paramètres pour indiquer via une regex, la règle à appliquer sur vos clefs dans le path. */\n            'params' =\u003e [\n                /* Le slug accepte tous les caractère de A à Z et de 0 à 9 sans faire attention à la case. */\n                'slug' =\u003e '/[a-zA-Z0-9]+/',\n                /* L'id accepte tous les caractères numérique. */\n                'id'   =\u003e '/[0-9]+/'\n            ],\n            /* Vous pouvez bien sur continuer à créer des enfants dans les enfants sans limite: */\n            'children' =\u003e [\n                'subChild' =\u003e [\n                    /* Ceci donnera: /parent/test-101/sub-child */\n                    'path' =\u003e '/sub-child',\n                    /* Ainsi de suite */\n                    ...\n                ]\n            ]\n        ]\n    ]\n];\n// Puis Ajouter votre route\n$router-\u003eadd('test', $params);\n```\n\n---\n\n## Les controllers\n\nLes controllers seront appelés à la suite d'une route. Elles permettront d'y ajouter la logique de votre page avant son rendu.\n\n```php\nnamespace App\\Controller;\nuse NeutronStars\\Controller\\Controller;\n\nclass ParentController extends Controller\n{\n  public function index(): void\n  {\n    // Ajouter toute la logique de votre page ici avant de faire le rendu.\n    // En cas d'erreur, il est possible de renvoyer la page 404 comme ceci:\n    $this-\u003epage404(); // Pas besoin d'ajouter un 'die' en dessous, le code sera automatiquement coupé.\n    \n    // Pour appeler le ficher de votre vue, procédez comme suit:\n    // Les points représentent la séparation de vos dossiers et l'extension ne doit pas être placé.\n    $this-\u003erender('app.parent.index');\n    // Après un rendu plus rien ne doit-être fait. Celui-ci doit toujours être la dernière chose à faire.\n    \n    // Si vous avez des variables à envoyer à votre vue:\n    $this-\u003erender('app.parent.index', [\n        'message' =\u003e 'Mon super message'\n    ]);\n    \n    // Le layout par défaut est l'index mais si jamais vous avec un autre layout à placer, vous pourrez toujours l'appliquer en fin de paramètre:\n    $this-\u003erender('app.parent.index', [], 'app.layout.index');\n  }\n  \n  /* Si vous avez spécifié des paramètres customisable à vos routes, pensez à les récupérer dans le bon ordre en paramètre de méthode */\n  private function child2($slug, $id): void\n  {\n    // Vous pouvez utiliser la méthode compact de php pour envoyez vos variables à votre vue.\n    $this-\u003erender('app.parent.child', compact($slug, $id), 'app.layout.index');\n  }\n}\n```\n\n---\n\n## Les layouts et les vues\n\nLe layout est la partie qui est le plus courant de votre code HTML, Elle contiendra votre `head`, `body`, `header` et `footer`.\nIl ne faudra pas oublier d'ajouter le `echo $view;` à l'endroit ou vous souhaitez que le rendu de votre vue se place.\n\n```php\n\u003c?php //Le layout est une page php placé dans votre dossier de layout. (Renseigné dans votre config) ?\u003e\n\u003c!doctype html\u003e\n\u003chtml lang=\"fr\"\u003e\n    \u003chead\u003e\n        \u003cmeta charset=\"UTF-8\"\u003e\n        \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n        \u003cmeta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\"\u003e\n        \u003ctitle\u003eMon super framework MVC\u003c/title\u003e\n        \u003c!-- Vos ressources 'link, script, ...' --\u003e\n    \u003c/head\u003e\n    \u003cbody\u003e\n        \u003cheader\u003e\n            \u003c!-- Votre menu --\u003e\n        \u003c/header\u003e\n        \u003c!-- Coller le rendu de vos vues. --\u003e\n        \u003c?= $view ?\u003e\n        \u003cfooter\u003e\n            \u0026copy; 2021 - Framework MVC, NeutronStars \u0026 Co\n        \u003c/footer\u003e\n    \u003c/body\u003e\n\u003c/html\u003e\n```\n\nLes vues est la partie la plus dense de votre site, c'est l'affichage qui change constamment d'une route à l'autre.\n\n```php\n\u003c?php //La vue est une page php placé dans votre dossier de vue. (Renseigné dans votre config) ?\u003e\n\u003cmain\u003e\n    \u003c!-- Pour utiliser les paramètres injectés à votre vue: --\u003e\n    \u003ch1\u003e\u003c?=$message?\u003e\u003c/h1\u003e\n    \n    \u003c!-- Pour générer une de vos routes --\u003e\n    \u003c!-- Il faut utiliser la méthode get de $router et placer le nom de votre route --\u003e\n    \u003ca href=\"\u003c?= $router-\u003eget('parent') ?\u003e\"\u003eLe Parent\u003c/a\u003e\n    \n    \u003c!-- Si vous avez besoin de récupérer une route enfant à votre parent, il suffit de mettre les noms séparer par des points. --\u003e\n    \u003ca href=\"\u003c?= $router-\u003eget('parent.child.subChild') ?\u003e\"\u003eL'enfant\u003c/a\u003e\n    \n    \u003c!-- Si vous avez besoin de récupérer une route qui comporte des paramètres customisable: --\u003e\n    \u003ca href=\"\u003c?= $router-\u003eget('parent.child2', ['slug' =\u003e 'test', 'id' =\u003e '101']) ?\u003e\"\u003eL'enfant custom\u003c/a\u003e\n\u003c/main\u003e\n```\n\n---\n\n## Les models\n\nLes models vous permettent de gérer vos requêtes SQL en dehors de vos controllers.\n\n```php\nnamespace App\\Model;\nuse NeutronStars\\Model\\Model;\n\nclass UserModel extends Model\n{\n  public function __construct()\n  {\n    // Spécifier le nom de la table SQL que gérera ce model\n    parent::__construct('users');\n  }\n  \n  // Ajouter des requêtes à votre model\n  public function insert($email, $password): void\n  {\n    $this-\u003ecreateQuery()\n         -\u003einsertInto('email,password', '?,?')\n         -\u003esetParameters([$email, $password])\n         -\u003eexecute();\n  }\n  \n  public function userByEmail($email): ?Object\n  {\n    return $this-\u003ecreateQuery()\n                -\u003eselect('*')-\u003ewhere('email=?')\n                -\u003esetParameters([$email])\n                -\u003egetResult();\n  }\n}\n```\n\nPour utiliser votre model dans vos controller, vous devez simplement l'initialiser\n\n```php\nnamespace App\\Controller;\nuse NeutronStars\\Controller\\Controller;\nuse App\\Model\\UserModel;\n\nclass UserController extends Controller\n{\n  private UserModel $userModel;\n  \n  public function __construct() {\n    $this-\u003euserModel = new UserModel();\n  }\n  \n  public function index(){\n    // Pour récupérer tous les utilisateurs enregistrés dans la base de donnée\n    $users = $this-\u003euserModel-\u003eall();\n  }\n  \n  public function user($id){\n    // Pour récupérer tous un utilisateur enregistré dans la base de donnée\n    $user = $this-\u003euserModel-\u003efindById($id);\n  }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneutron-pro%2Fphpoo-exam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneutron-pro%2Fphpoo-exam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneutron-pro%2Fphpoo-exam/lists"}