Laravel la Création de la Dynamique des Itinéraires pour les contrôleurs de base de données Mysql
J'ai le tableau suivant: group_pages dans mysql base de données avec le nom de la page nom de l'itinéraire :
id name route
--------------------
0 About about
1 Contact contact
2 Blog blog
ce que je suis en train de faire est de créer la dynamique des itinéraires dans mon : routes.php ?
Où si je vais par exemple: /about
il ira à AboutController.php
( qui va être créé dynamiquement) est-ce possible? est-il possible de créer une dynamique de fichier de contrôleur?
Je suis en train de créer des pages dynamiques routes que des liens vers un contrôleur de
exemple je veux générer dynamiquement dans mon routes.php
Route::controller('about', 'AboutController');
Route::controller('contact', 'ContactController');
Route::controller('blog', 'BlogController');
- mais pourquoi? Vous devez écrire du contrôleur pour faire le travail de toute façon, alors pourquoi ne voulez-Vous pas juste écrire des routes dans le code, au lieu de l'augmentation de la charge de travail sur les db? Qu'entendez-Vous par "créé dynamiquement" contrôleur?
- eh bien, je suis en train de créer des pages dynamiques ? où dans l'admin, je peux ajouter ces pages - nom , j'ai besoin de le faire afin que je puisse attribuer aux utilisateurs la permission d'accéder à la page, ils peuvent voir lorsqu'ils se connectent
- est-il loin d'ajouter dynamiquement des personnes , ou je dois aller dans mon routes.php et d'ajouter ces contrôleurs, un par un?
- Mais toutes ces pages vont être juste avec un peu de contenu(texte, images) pas de forme et des trucs?
- c'est quoi faire de ce dur , c'est un mélange de texte, de contenu et de forme, etc par exemple, si l'utilisateur est connecté et qu'il va à l' /sujet ( si il en a la permission ), il pourrait alors accéder à toutes les pages sous le répertoire /que /a propos de/index /sujet/page2 etc..
- je pensais donc créer dynamiquement un contrôleur pour chaque page , de cette façon /about aura AboutController et je vais aller là-bas et ajouter des méthodes différentes pour chaque page 🙂
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas la bonne façon de créer des pages dynamiques au lieu de cela, vous devez utiliser une base de données et de garder toutes les pages de la base de données. Par exemple:
Puis créer
Page
Eloquent
modèle:Puis créer
Controller
pourCRUD
, vous pouvez utiliser unresource
contrôleur ou un contrôleur de la normale, par exemple, normalement unPageController
:La
views/page/index.blade.php
fichier de vue:Pour afficher les pages de créer une route comme ceci:
D'accéder à une page, vous pouvez avoir besoin de
url/link
comme ceci:C'est une idée, essayer de mettre en place quelque chose comme ça.
about
sera un bouchon pour identifier le sujet de la page dans la base de données parslug
déposée.{page}
.page_parent
et stocker lesid
de la page dans lapage_parent
champ qui est un enfant de cette page.slug
, c'est à direhome
,about
etc, parce que vous avez seulement besoin de l'slug
à passer qu'à laPage
méthode.{slug}
sera remplacé parhome
ouabout
donc,example.com/about
va frappershow
méthode dansPageController
et dans le$slug
l'actuel slug sera passé.page_content
dans un formulaire, modifier et mettre à jour à mesure que vous insérez eux la première fois. Faire un gellery image pour la télécharger, utilisez des images en lien une fois que vous télécharger sur le serveur, tout commeWordPress
commeCMS
.page_content
à l'aide de lablade
statique modèle de page de lien, au lieu d'enregistrer le contenu dans la base de données du magasin de la lame lien de la page utilisée pour représenter cette page puis de charger cette page du contenu dynamiquement en utilisant la même méthode.types
et la carte de chaque page de types, qu'un autre gros problème.Route::post('save', array('uses' => 'PageController@save', 'as' => 'page.create'))
.route/action
.Après avoir passé 2 heures à creuser par le biais de google et Laravel source, je suis venu avec cette solution, qui je pense fonctionne le mieux et semble le plus propre. Pas besoin pour les redirections et les multiples intérieure demandes.
Vous ajoutez cette route au bas de routes fichiers.
Si pas d'autres routes, c'est exécutée. Dans la fermeture, à vous de décider de contrôleur et de l'action à exécuter.
La meilleure partie est - tous les paramètres de la route sont passés à l'action, et de la méthode d'injection fonctionne toujours. Le ControllerDispatcer ligne est de Laravel Route(r?) classe.
Mon exemple serait en mesure de gérer 2 cas - vérifie d'abord si l'utilisateur de ce nom existe, puis vérifie si un article peut être trouvé par la limace.
Laravel 5.2 (5.3 ci-dessous)
5.3 a changé la façon dont le contrôleur est diffusé.
Heres mon dynamiques contrôleur exemple pour 5.3, 5.4
Espérons que cette aide!
essayer
Il est une composante disponibles, que vous pouvez utiliser pour stocker des itinéraires dans une base de données. Comme un avantage supplémentaire, ce composant seulement les charges de l'actif en cours de route, il améliore les performances, car toutes les routes sont chargées dans la mémoire.
https://github.com/douma/laravel-database-routes
Suivez les instructions d'installation fournies dans le fichier readme.
Stockage des routes dans la base de données
La seule chose nécessaire ici, c'est l'injection de la
RouteManager
en par exemple une commande de cli. AvecaddRoute
peut dire laRouteManager
pour stocker l'itinéraire dans la base de données. Vous pouvez facilement modifier ce code et d'utiliser votre propre référentiel de pages ou d'autres données pour construire les routes.Exécuter cette commande cli tous les 2 à 5 minutes ou après un changement de vos données afin d'assurer les itinéraires sont récentes.
Enregistrer le RouteMiddleware dans App\Http\Kernel.php
\Douma\Routes\Middleware\RouteMiddleware::class
Vider votre web.php
Si vous avez défini tout Laravel route, assurez-vous de vider ce fichier.
Utilisant les voies de la base de données
Vous pouvez utiliser l'itinéraire de la lame:
Ou vous pouvez injecter le
RouteManager
-interface de n'importe où vous le souhaitez pour obtenir l'itinéraire:Pour plus d'informations, consultez le fichier lisezmoi.