Vaste routes

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Front-end Developer

Functie omschrijving Gezocht front-end developer! Voor een toffe organisatie in de regio Rhenen zij wij op zoek naar een front-end developer die de eindverantwoordelijkheid op zich neemt van alles wat met design te maken heeft. In deze functie heb je een adviserende rol en beschik je over een grote dosis vakinhoudelijke kennis. Samen met collega’s en klanten overleg je om aangeleverde designs om te zetten naar unieke concepten. Zo draag jij je steentje bij aan de groeiambities van de klant. Voor klanten wordt jij het vaste aanspreekpunt als het gaat over planningen hierin houdt je alle betrokkenen goed op de

Bekijk vacature »

C# Ontwikkelaar

In het kort Als C# .NET Core ontwikkelaar ga je binnen onze business unit Transport en Logistiek aan de slag complexe maatwerk software voor bedrijf kritische systemen binnen de technische automatisering. Denk bijvoorbeeld een IoT-oplossing voor de logistieke sector waarbij we van ruim 200.000 machines de telemetrie en events verwerken. We zijn actief in de distributielogistiek, havenlogistiek en productielogistiek. Naast C# en .NET Core maken we ook gebruik van Azure technologie. En als trotse Microsoft Gold Partner leren we graag van en met jou. Wil jij jezelf blijven ontwikkelen binnen de technische automatisering met .NET, dan gaan we deze uitdaging

Bekijk vacature »

Laravel Developer

Functie omschrijving Voor een gave organisatie in de buurt van Den Bosch zoek ik een PHP developer. Het is van belang dat je kennis/ervaring hebt met het framework Laravel. Jij gaat in deze functie software applicaties ontwikkelen. Deze software projecten zijn heel divers, en deze organisatie maakt software, van A tot Z. Klanten kunnen in elke sector werkzaam zijn, van profit tot non-profit. Andere taken zijn onder andere: documentatie schrijven over applicaties/uitleg geven over software en applicaties/ klantcontact over bestaande applicaties/applicaties optimaliseren. Bedrijfsprofiel Deze organisatie zit in de regio van Den Bosch en is een klein bedrijf. Er werken circa

Bekijk vacature »

Front-end PHP Developer

Dit ga je doen Bouwen van de frontend van een nieuwe applicaties; Verbeteren van de user experience; Opstellen van een style guide; Schakelen met collega developers over de te bouwen oplossing; Je speelt een belangrijke rol in het neerzetten van het nieuwe systeem; Werken met o.a. Symfony 6, API Platform, Twig, Javascript, Redis Automatiseren van processen; Koppelen van verschillende functionaliteiten; Unit tests, integration tests, end-to-end tests; In de toekomst ga je nog werken aan andere projecten. Hier ga je werken Voor onze vaste opdrachtgever in de regio Breda zijn wij op zoek naar een Frontend Developer. Het betreft een organisatie

Bekijk vacature »

Frontend Developer - Leeuwarden

Als Frontend Developer bouw jij mee aan het onderwijs van de toekomst! In een scrum team werken met jonge en enthousiaste collega’s, moderne technieken, ruimte voor eigen ontwikkeling en op een proactieve wijze kunnen meewerken aan innovatie binnen het onderwijs. Magister is het state-of-the-art softwarepakket dat scholen in het voortgezet onderwijs op alle fronten ontzorgt. Van leerlingenadministratie tot het ondersteunen van individuele leerlijnen, van toegang tot digitaal lesmateriaal tot het plannen van het lesrooster. In de Magister app bedient Magister ruim 2,5 miljoen gebruikers waarvan, dagelijks meer dan 600.000 unieke. Hiermee is Magister de absolute marktleider in onderwijsland. Wat vragen

Bekijk vacature »

Senior .Net developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als .Net Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling. Mede hierdoor zij wij dit jaar Microsoft Partner of the year geworden. Sogetisten staan klaar voor elkaar, hebben lol met elkaar en daarmee behalen we de mooiste resultaten! Werken bij Sogeti

Bekijk vacature »

Senior PHP Developer

As a Senior PHP Developer at Coolblue, you ensure that our webshops work as optimal as possible and you choach other colleagues on the hard and soft skills. How do I become a Senior PHP Developer at Coolblue? As a PHP Developer you work together with other development teams to make our webshop work as optimal as possible and to make our customers happy. Although you are a PHP Developer, you are not averse to a little TypeScript or other technologies that might be used. Would you also like to become a PHP Developer at Coolblue? Read below if the

Bekijk vacature »

Medior/senior Front-end developer

Functie Onder begeleiding van 3 accountmanagers waarvan er 1 binnen jouw expertise je aanspreekpunt zal zijn ga je aan de slag bij diverse opdrachtgevers. Hij of zij helpt je bij het vinden van een passende en uitdagende opdracht. Hierin houden ze uiteraard rekening met jouw situatie, ervaring en (technische) ambities. De opdrachten duren gemiddeld één tot 2 jaar. Hierdoor kun je je ook echt vastbijten in een project en als consultant impact maken. Naast de opdracht ben je regelmatig met je collega’s van de IT-afdeling om bijvoorbeeld onderlinge kennis te delen, of nieuwe trends te bespreken. Ook worden er regelmatig

Bekijk vacature »

Android developer

De functie Schiphol is een plek om te reizen, te verblijven en te werken. Door middel van data en technologie richten we op al deze gebieden het leef- en werkklimaat optimaal in en zorgen we voor een slimmere en efficiëntere operatie. Wij ontwikkelen nieuwe producten en diensten vanuit de wensen en behoeften van onze klanten, voorspellen passagier flows en testen digitale oplossingen om rijen en andere pijnpunten in het proces te verminderen. Met slimme feedback van sensortechnologie maken we zelfs data van toiletten en stoelen inzichtelijk en bruikbaar. Het Commercial Platform bestaat uit multidisciplinaire teams met een end-2-end verantwoordelijkheid voor

Bekijk vacature »

Mendix Consultant / Developer

Dit ga je doen Het in kaart brengen en analyseren van de functionele wensen van de klant rondom Mendix applicaties; Het fungeren als sparringpartner voor de (interne) klanten; Het opstellen van requirements en het vertalen hiervan naar technische mogelijkheden; Het opstellen van user stories; Het bouwen van de Mendix applicaties in samenwerking met jouw team of zelfstandig; Het testen van op te leveren software en het zorg dragen voor de implementatie; Trainen van gebruikers in het gebruik van de applicatie; Werken in een Agile omgeving. Hier ga je werken De organisatie begeeft zich in de retail branche en focust zich

Bekijk vacature »

Developer Front-end

Functie omschrijving Front-end Developer gezocht! Wij zijn op zoek naar een front-end developer voor een organisatie in de regio Veenendaal die de eindverantwoordelijkheid op zich neemt van alles wat met design te maken heeft. Je hebt in deze functie een adviserende rol hiervoor moet je beschikken over een grote dosis vakinhoudelijke kennis. Je creëert unieke concepten door samen met collega’s en klanten te overleggen over aangeleverde designs. Hiermee draag jij je steentje bij aan de groeiambities van de klant. Jij wordt het vaste aanspreekpunt voor klanten wanneer het gaat over planningen, hierin is het jouw taak om alle betrokkenen goed

Bekijk vacature »

Front end developer binnen de consultancy

Functie Je komt in een team met ambitieuze developers die de passie voor Front-End met jou delen. Samen ga je aan de slag met leuke en leerzame opdrachten. Het team heeft een eigen budget en financiën en zij bepalen zelf hoe dat besteed en investeert wordt. Je gebruikt tools als JavaScript, Node.js, React, Angular, Typescript en Vue.js wanneer je werkt aan de opdrachten. Daarnaast zul je veel leren van je collega’s en gezamenlijk een leuke tijd doorbrengen tijdens activiteiten zoals wintersport, hackatons en conferentiebezoeken. Je krijgt niet alleen de mogelijkheid Front-End te ontwikkelen, maar ook vooral jezelf. Dit kan behaald

Bekijk vacature »

PHP ontwikkelaar

Functie Met een complex en uitgebreid e-commerce platform, een eigen PIM-systeem en eigen scan applicatie – krijg jij dagelijks te zien hoe jouw werk gebruikt wordt door miljoenen gebruikers. En we staan qua development pas in de startblokken, aangezien er nog meerdere projecten op de plank liggen te wachten! Ons huidige development team bestaat uit 8 programmeurs. Er wordt dagelijks gereflecteerd op geschreven code, Scrum taken en kennisdelen onderling is een must. Onze voertaal binnen ons team is Engels, dit omdat wij twee internationale collega’s hebben. Ons huidige “IT Landschap” bestaat voornamelijk uit allerlei losse onderdelen die individueel, maar ook

Bekijk vacature »

(Junior) Back-end Ontwikkelaar

Functie omschrijving We are looking for a dutch native speaker Altijd al willen werken bij een organisatie, die maatwerk applicaties bouwt, die echt impact hebben in de maatschappij? Dit is je kans. Voor een kleine organisatie in de regio van Eindhoven ben ik op zoek naar een C# Ontwikkelaar. Jij gaat aan de slag met de ontwikkeling van maatwerk software en applicaties. Deze organisatie werkt voor grote organisaties in Nederland, maar ook voor het MKB. De projecten waar je aan gaat werken zijn erg divers, waardoor je werk uitdagend blijft en je erg veel kan leren. Verder ga je aan

Bekijk vacature »

.NET developer

Functie Als .NET ontwikkelaar start jij in een multidisciplinair team met 7 ontwikkelaars. Dit team is verdeeld onder Front-end ontwikkelaars en backend developers. De backend developers werken voornamelijk aan desktop applicaties in combinatie met backend systemen. Hier ga jij dus ook mee aan de slag! Hierbij wordt voornamelijk gebruik gemaakt van C# .NET, WPF, UWP, XAML en MVVM. WPF, UWP, .NET Core, Azure Devops en Entity Framework. WPF en UWP worden dan ook voornamelijk gebruikt voor de user interface van de desktop applicatie. Het development team is dan ook erg gedreven m.b.t. het ontwikkelen van vooruitstrevende en innovatieve horeca automatiseringsoplossingen.

Bekijk vacature »
Jasper DS

Jasper DS

08/02/2013 18:19:47
Quote Anchor link
Hallo,

ik zag dat Zend en Symfony gebruik maken van vaste routes. Ik bedoel hiermee dat je ergens een path moet definiëren en er een controller aan moet toewijzen.

Wat is het voordeel hiervan? Waarom kijkt de dispatcher niet gewoon of de controller bestaat idpv te gaan kijken of de route bestaat.

Ik begrijp dat je op die manier routes kan genereren die een andere naam hebben dan de controller. Voor de rest is het toch helemaal niet handig of flexibel? Voor elke controller een nieuwe router toevoegen?

Kan iemand mij uitleggen waarom de grote frameworks dit gebruiken en wat het voordeel hier van is?

Bedankt!
 
PHP hulp

PHP hulp

09/01/2025 20:12:37
 
Ozzie PHP

Ozzie PHP

08/02/2013 18:31:33
Quote Anchor link
Jasper, je bent dan veel flexibeler. Je kunt de routes dan precies zo noemen zoals je zelf wilt, zonder dat je gebonden bent aan (bijv.) www.mijnsite.nl/controllernaam/indexnaam
 
Jasper DS

Jasper DS

08/02/2013 18:34:22
Quote Anchor link
dat brengt mij meteen bij het volgende punt. Wanneer een nieuwe controller en wanneer een nieuwe actie binnen een controller en wanneer een bundle? Want uiteindelijk noem je je controller en je action toch hoe je zelf wilt?

De homepage van mijn pagina is dus controller home met action index. "/" gaat mijn dispatcher daar automatisch naar doorsturen.
 
Wouter J

Wouter J

08/02/2013 18:40:06
Quote Anchor link
Quote:
"/" gaat mijn dispatcher daar automatisch naar doorsturen.

Je merkt toch zelf ook wel dat dit onpraktisch is? In je volgende project heb je een WelcomeController met een homeAction, ga je dan je hele framework dispatcher aanpassen?
Het is dan toch veel logischer om een configuratie bestand te maken waarin je aangeeft bij welke route je welke controller + action je aanroept, met welke parameters, met de juiste requirements en de juiste default waardes?
 
Jasper DS

Jasper DS

08/02/2013 18:44:04
Quote Anchor link
Dus voor elke mogelijke view moet een route gedefinieerd zijn? En wat met paden zoals bijvoorbeeld host/controller/action/param1/param2/param3 waarvan alleen param1 required is en param2 en param3 niet?

kunnen jullie me ook helpen met onderstaande vraag?
PHP Jasper op 08/02/2013 18:34:22:
dat brengt mij meteen bij het volgende punt. Wanneer een nieuwe controller en wanneer een nieuwe actie binnen een controller en wanneer een bundle? Want uiteindelijk noem je je controller en je action toch hoe je zelf wilt?
Gewijzigd op 08/02/2013 18:44:56 door Jasper DS
 
Wouter J

Wouter J

08/02/2013 18:45:27
Quote Anchor link
Quote:
Dus voor elke mogelijke view moet een route gedefinieerd zijn?

Voor elke view: Nee. voor elke action: Ja

Quote:
En wat met paden zoals bijvoorbeeld host/controller/action/param1/param2/param3 waarvan alleen param1 required is en param2 en param3 niet?

Kijk anders eens naar hoe we dat in Symfony2 doen: http://symfony.com/doc/current/book/routing.html

Edit:
Quote:
kunnen jullie me ook helpen met onderstaande vraag?

Ja, maar nu even niet.
Gewijzigd op 08/02/2013 18:46:33 door Wouter J
 
Wouter J

Wouter J

10/02/2013 22:19:22
Quote Anchor link
Quote:
Wanneer een nieuwe controller en wanneer een nieuwe actie binnen een controller en wanneer een bundle? Want uiteindelijk noem je je controller en je action toch hoe je zelf wilt?

Een action is iets specifieks voor 1 request. Zo heb je een showAction en een editAction. Maar ook een listAction ect. Of een loginAction en een logoutAction, registerAction en registerSuccesAction, ect.

Sommige van deze actions horen bij elkaar. Zo zie je duidelijk dat de login- en logout actions bij elkaar horen en de register- en registerSuccess actions ook. Deze zet je dus in een aparte controller, SecurityController en RegisterController.

Vervolgens kun je sommige controllers ook weer groeperen in bundles. Zo heb je bijv. een UserBundle voor de controller hierboven. Dan zou je een BlogBundle hebben die controllers en models voor een blogpost heeft. Je hebt dan misschien ook wel een CommentsBundle, deze zal de UserBundle gebruiken om aan de users te komen die mogen reageren.

Bundles moet je altijd zo veel mogelijk los scripten. Onze CommentBundle moet niet afhankelijk worden van die ene UserBundle, hij moet ook met andere users kunnen werken.
 
Jasper DS

Jasper DS

12/02/2013 01:05:18
Quote Anchor link
Elke bundel heeft weer zijn eigen mvc architectuur?

Terug komend op de routes. Symfony zet de routes op deze manier in een .yml bestand:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
# routes.yml
route1:
    pattern: /foo
    defaults: { _controller: 'MyController::fooAction' }

route2:
    pattern: /foo/bar
    defaults: { _controller: 'MyController::foobarAction' }


Pattern zegt welke path het is. Zo zal route1 regageren op host/foo en route2 op host/foo/bar.
Defaults zegt welke controller en actie er moet aangeroepen worden maar wat doet de "naam" -> "route1" en "route2". Is dat enkel voor in de .yml of doet symfony er echt iets mee?

ik zag in YamlFileLoader de volgende opties: 'type', 'resource', 'prefix', 'pattern', 'options', 'defaults', 'requirements'. Is het één van die of is het nog iets anders?
Gewijzigd op 12/02/2013 01:05:49 door Jasper DS
 
Wouter J

Wouter J

12/02/2013 08:01:28
Quote Anchor link
Quote:
Pattern zegt welke path het is. Zo zal route1 regageren op host/foo en route2 op host/foo/bar.

Merk op dat vanaf Symfony2.2 pattern vervangen is door path.

Quote:
Is dat enkel voor in de .yml of doet symfony er echt iets mee?

Dat is de naam van de route, hartstikke handig. Zo kun je de path's flexibel houden. Je kunt dan een url opvragen met `url('route1')`, hij zal dan de url opbouwen. Mocht je nog parameters in de url hebben dan doe je `url('route1', { 'foo' => 'bar' })`.
 
Jasper DS

Jasper DS

13/02/2013 14:17:40
Quote Anchor link
Oke mooi. Ik heb al een hele dag zitten zoeken hoe symfony de routes binnenhaalt... Hoe word aan het path gekoppeld aan de controller? Want je krijgt een path binnen en dan moet je programma toch niet heel de .yml doorlopen tot hij de route met overeenkomstige path heeft gevonden?
 
Wouter J

Wouter J

13/02/2013 16:16:43
Quote Anchor link
Het matchen van een path aan in de van de routes wordt gedaan in de Routing component. De Routing Component bestaat uit 3 delen.

Allereerst heb je de RouteCollection welke uit allemaal Routes (en weer aparte RouteCollections) bestaat. Deze houdt gewoon alle routes vast. Je kan deze zelf met PHP maken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
use Symfony\Component\Routing\Route;
use Symfony\Component\Routing\RouteCollection;

$route = new Route('/about');
$route1 = new Route('/post/{slug}', array(), array('slug' => '[A-Za-z0-9-]+'));

$routeCollection = new RouteCollection();
$routeCollection->add('about_page', $route);
$routeCollection->add('show_post', $route1);
?>


Je kan dit ook via een Yml of XML file doen en dan de YmlRouteLoader gebruiken.

Vervolgens hebben we al deze routes, maar nu moeten we ook nog iets hebben waarmee we deze routes kunnen vergelijken: De huidige url. Hiervoor hebben we een RequestContext class nodig, die alle informatie over de huidige request verzameld die handig kan zijn voor het matchen van een route:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
use Symfony\Component\Routing\RequestContext;

$context = new RequestContext($_SERVER['REQUEST_URI']);
?>


Als laatst hebben we nog een klasse nodig die de routes met deze RequestContext gaat matchen en dan de juiste route eruit pikt. Hiervoor hebben we een UrlMatcher klasse:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
user Symfony\Component\Routing\Matcher\UrlMatcher;

$matcher = new UrlMatcher($routeCollection, $context);
?>


En nu kunnen we gaan matchen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$result
= $matcher->match('/about');
// $result = array('_route' => 'about_page')

$result = $matcher->match('/post/hello-world');
// $result = array('slug' => 'hello-world', '_route' => 'show_post');
?>


We krijgen nu dus een array terug met daarin de waardes van de slug en de naam van de route die matched. Nu hebben we hier niet heel veel aan, we hebben een naam van een Controller nodig.

De manier hoe Symfony2 dit oplost is door een _controller parameter mee te geven aan de routes, deze stellen we dan in bij de default values, zodat we de controller naam niet in de URL zien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$route
= new Route('/about', array('_controller' => 'PageController::showAbout'));
?>


Als we hem nu matchen zullen we deze controller terug krijgen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$result
= $matcher->match('/about');
$controller = $result['_controller'];
?>


Vervolgens kunnen we deze string omzetten in een call naar de controller met functies als call_user_func_array.

In Symfony2 gebruiken we een logical name om aan te geven welke controller er wordt getoond. Zo zal een string als WjPageBundle:Page:showPage verwijzen naar de method showPageAction in de Wj\PageBundle\Controller\PageController class.


Nu komt dit waarschijnlijk gigantisch groot en moeilijk bij je over, het valt best mee, maar ik zal snappen als je denkt: Dit kan ik nooit. Geen nood, je kan altijd de Routing Component gebruiken, maar je kan er ook eentje zelf schrijven. Zo moeilijk is dit namelijk niet, lees anders maar eens de code die Pim ooit eens gaf door: http://www.phphulp.nl/php/forum/topic/router/83492/#594215
 
Jasper DS

Jasper DS

13/02/2013 21:22:57
Quote Anchor link
Ik snap denk ik ongeveer wel hoe het gedaan word, alleen de uitvoering is nog vrij onduidelijk. Ik heb wat gespeeld met Pim zijn code en ik merk op dat de action en controller in een string worden geplaatst en dan worden gesplitst op "::" ik heb hier zelf ook nog een bundel aan toegevoegd wat eigenlijk helemaal niet moeilijk was.

Nu loop ik wel te knoeien met de params / args. De array die ik momenteel terug krijg ziet er als ik Pim zijn voorbeeld routers gebruik zo uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
array (size=4)
  0 => string '/peer/123' (length=9)
  'd' => string '123' (length=3)
  1 => string '123' (length=3)
  '_controller' => string 'Jds::Welcome::helloWorld' (length=24)


Nu wil ik eigenlijk dat die array alleen de "slug bevat" dus stel dat we zoiets hebben: host/controller/action/:id/:name:/:month dan wil ik een array terug krijgen met id, name en month als key en de waarde van de url als value. Is dat mogelijk / handig? Zouden jullie het ook zo doen? Want ik kom er niet uit wat Pim met de args doet.. :s
 
- Raoul -

- Raoul -

13/02/2013 22:32:53
Quote Anchor link
Pim returnt ergens $matches, en die $matches, dat zijn dan de slugs.
 
Wouter J

Wouter J

13/02/2013 22:53:37
Quote Anchor link
Quote:
Is dat mogelijk / handig? Zouden jullie het ook zo doen? Want ik kom er niet uit wat Pim met de args doet.. :s

Ja, het is mogelijk, maar nee ik zou het niet zo doen. Je moet de controller meegeven aan de args, anders kun je nooit de controller achterhalen.

Wat je doet is de controller ophalen en dan de controller eruit toveren. Vervolgens kun je deze controller uit de array halen, samen met de numeric keys en dan hou je alleen maar je placeholders over.

Wat je nog beter kan doen is wat magic uithalen met de ingebouwde Reflection* klassen. Zie daarvoor: http://www.phphulp.nl/php/forum/topic/routing-hoe-parameters-meegeven/88894/#639085
 
Jasper DS

Jasper DS

14/02/2013 14:07:51
Quote Anchor link
Daar zal ik nog even mee moeten spelen dan. Hoe zit het trouwens met de snelheid? Als je erg veel routes hebt word dat toch vrij traag als je daar alle routes moet gaan?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
function match($query)
    {
        foreach($this->routes as $r)
        {
            if(($matches = $r->match($query)) !== false)
            {
                return $matches;
            }
        }
    }
Gewijzigd op 14/02/2013 14:08:01 door Jasper DS
 
Jasper DS

Jasper DS

15/02/2013 14:13:15
Quote Anchor link
@Wouter, die regexen doen mij de das om. Mijn router classe bevat nu de volgende routes:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
array (size=3)
  'home' =>
    object(Jframe\Router\Route)[4]
      public 'name' => string 'home' (length=4)
      public 'path' => string '/' (length=1)
      public 'bundle' => string 'Jds' (length=3)
      public 'controller' => string 'Welcome' (length=7)
      public 'action' => string 'index' (length=5)
      public 'rgx' => string '' (length=0)
      public 'params' =>
        array (size=0)
          empty
  'helloWorld' =>
    object(Jframe\Router\Route)[5]
      public 'name' => string 'helloWorld' (length=10)
      public 'path' => string '/hallo' (length=6)
      public 'bundle' => string 'Jds' (length=3)
      public 'controller' => string 'Welcome' (length=7)
      public 'action' => string 'helloWorld' (length=10)
      public 'rgx' => string '' (length=0)
      public 'params' =>
        array (size=0)
          empty
  'blah' =>
    object(Jframe\Router\Route)[6]
      public 'name' => string 'blah' (length=4)
      public 'path' => string '/page' (length=5)
      public 'bundle' => string 'Jds' (length=3)
      public 'controller' => string 'Welcome' (length=7)
      public 'action' => string 'helloWorld' (length=10)
      public 'rgx' => string '' (length=0)
      public 'params' =>
        array (size=2)
          1 => string 'slug' (length=4)
          2 => string 'id' (length=2)


Dat ziet er naar mijn mening goed uit alleen kan ik niet controleren op params. Ik heb alle topics meermaals doorgespit maar ik geraak er niet uit.

routers.yml
Route.php
Router.php
Frontcontroller

App.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$yaml = new Parser();

//$parser = new ConfigParser();

$values = $yaml->parse(file_get_contents('../app/config/routes.yml'));

$router = new Router();
foreach($values as $key=>$value)
{
    $router->addRoute(new Route($key, $value['path'], $value['controller']));
}

var_dump($router->routes);


$result = $router->match(parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH));


if(false === $result)
{
    echo 'Route not found';
}
else
{
    $fc = new FrontController();
    $fc->handle($result);
}
Gewijzigd op 15/02/2013 14:15:10 door Jasper DS
 
Jasper DS

Jasper DS

16/02/2013 18:40:15
Quote Anchor link
Ik vraag me trouwens nog iets af. Stel je hebt de volgende urls:

- host/blog/dit/is/param1/param2 -> host/blog/:param1/:param2
- host/blog/dit/is/een/url -> host/blog/dit/is/een/url

in principe voldoet url 2 aan het path van url 1 als je "een" en "url" beziet als param. Hoe lost men dit dan op?
 
Jasper DS

Jasper DS

18/02/2013 10:39:12
Quote Anchor link
Edit:

Ik gebruik volgende regex van Pim uit het toppic van Ozzie:
preg_replace('#:([a-z])+#','(?P<$1>[^/]+)',$path);

Ik heb nog twee vragen, volgende routes werken:
- /index
- /hallo
- /page/:id/:slug

- Hoe zorg ik ervoor dat / ook aanvaard word? Momenteel vangt het path / alle routes op? Ik heb al geprobeert de "+" op het einde weg te halen maar dan werken de andere url's niet meer?

- Hoe zie je het verschil tussen /page/show/:id/:name en /page/show/:author/:id? Of ben je dan slechte routes aan het maken?
Gewijzigd op 18/02/2013 17:00:27 door Jasper DS
 
Wouter J

Wouter J

18/02/2013 19:59:30
Quote Anchor link
Quote:
- Hoe zie je het verschil tussen /page/show/:id/:name en /page/show/:author/:id? Of ben je dan slechte routes aan het maken?

Dat doe je met requirements:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
blog:
    pattern:   /blog/{page}
    defaults:  { _controller: AcmeBlogBundle:Blog:index, page: 1 }

show_post:
    pattern:   /blog/{slug}
    defaults:  { _controller: AcmeBlogBundle:Post:show }

In geval 1 wil je routes als /blog/2 en /blog/3 matchen en in geval 2 wil je routes als /blog/hello-world matchen, in dat geval voeg je requirements toe:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
blog:
    pattern:   /blog/{page}
    defaults:  { _controller: AcmeBlogBundle:Blog:index, page: 1 }
    requirements:
        page:  \d+


Quote:
- Hoe zorg ik ervoor dat / ook aanvaard word? Momenteel vangt het path / alle routes op? Ik heb al geprobeert de "+" op het einde weg te halen maar dan werken de andere url's niet meer?

Dan moet je niet deze regex aanpassen, maar die in Route#match. Dat moet worden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if(!preg_match('#'.$this->regex.'$#', $query, $matches))
?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.