Ik ben bezig met het ontwikkelen van een framework.
Stel ik heb de volgende routes:


<?php
$router = new Router();

$router->addRoute("/", "HomeController", "index");
$router->addRoute("/{category}", "CategoryController", "show");
$router->addRoute("/{title}", "ContentController", "show");
?>


Stel ik heb een categorie "schoenen" met de url /schoenen en een pagina "over-ons" met de url /over-ons. Hoe weet het framework of het een categorie of een pagina betreft?
Dat weet ie niet, dus moet je meer specifieke routes maken: /category/{category}, /post/{title}
Balen! Ik kan me voorstellen dat je i.v.m. SEO geen /category in je URL wilt. Er zijn genoeg systemen waarbij dat ook niet nodig is. Ik werk veel met Opencart. Daarbij kan ik gewoon /schoenen of /over-ons gebruiken, ongeacht het een categorie of een content pagina is.
OpenCart slaat die URL-aliassen op in een tabel die een SEO-URL zoals 'laptop-notebook' koppelt aan een URL-parameter zoals 'category_id=18'. De controller filtert vervolgens op enkele van die parameters (category_id, product_id en dergelijke).

Die opzet is echter alleen acceptabel als je vooraf al weet welke controllers er zijn en welke parameters die nodig hebben. Wil je een schaalbaar framework bouwen, dan moet je verder gaan en het relateren van parameters aan controllers configureerbaar maken.
Ward van der Put op 23/01/2015 15:19:15

Wil je een schaalbaar framework bouwen, dan moet je verder gaan en het relateren van parameters aan controllers configureerbaar maken.

Kun je dit nader toelichten?
Graag een voorbeeldje.

Ik ben niet bekend met Laravel.
Kun je een voorbeeldje geven?
Ik geef toch aan dat ik daar niet bekend mee ben?
Maar laat ook maar...
Je kunt toch in de onderliggende code kijken?

Niet dat je die moet kopiƫren, maar als je zelf een MVC-framework bouwt, doe je er verstandig aan je in te lezen in de concepten van andere MVC-frameworks.

Routing is nogal een breed concept. Dat is gewoon niet te vertalen in: "Heb je effe een script voor me?"
Je dient in alle bekende frameworks zelf routes te definiƫren. Jouw applicatie moet vervolgens de gedefinieerde routes vergelijken met de URI die door de gebruiker opgevraagd wordt. Door variabelen in de routes te plaatsen kunnen deze doorgegeven worden aan de controller. Door bijvoorbeeld slugs te gebruiken (doet deze website ook) maak je het beter SEO.

Voorbeeldje:

route: /category/{category}
controller: ShopCategory
action: show


Controller die aangeroepen moet worden:
<?php

class ShopCategoryController extends BaseController
{
public function showAction($category)
{
// laat category met id=$category zien
}
}
?>

voorbeeldje van routes die matchen:

http://jouwdomein.nl/category/1
http://jouwdomein.nl/category/2
http://jouwdomein.nl/category/3
http://jouwdomein.nl/category/appelen
http://jouwdomein.nl/category/peren
http://jouwdomein.nl/category/alle-fruit-soorten


Aan jou om alleen numerieke waardes te accepteren of ook alfanumerieke.

Reageren