Vaste routes

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Junior .NET developer

Functie Wij hebben drie scrumteams. Het eerste team focust zich op het stukje hardware wat wij in huis doen. Zij maken als team o.a. gebruik van C++. De andere twee scrumteams zijn allebei bezig met data verwerking en maken hierbij in de backend gebruik van C# .NET / .NET Core. Het verschil tussen deze teams is dat één team de data verwerking doet voor de mobiele applicatie. Zij werken hierbij dus ook met Xamarin. Het andere team focust zich op de webapplicaties en maakt hierbij ook gebruik van ASP.NET MVC. Op basis van jouw ambities en kwaliteiten kijken wij samen

Bekijk vacature »

Senior Front-end developer

Functie Als front-end developer ga je aan de slag voor verschillende klanten, waarbij veel rekening wordt gehouden met waar je woont (dit is altijd binnen het uur), en word er gezocht naar een organisatie die past bij jou. Zowel qua persoonlijke ambities als de technische aansluiting. De opdrachten duren gemiddeld 1 à 2 jaar maar dit hangt ook af van je wensen. Je werkt in een teamverband voor een klant en zult nauw samenwerken met zowel eigen collega’s als die bij de klant werkzaam zijn. Ze zijn op zoek naar een technische front-end developer die ruime ervaring heeft in één

Bekijk vacature »

Systems Engineer Asset Management Technology

TenneT is hard groeiend om de onze ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven System Engineer Asset Management op onze locatie Arnhem. Ga jij de uitdaging met ons aan? Jouw bijdrage aan TenneT Als systems engineer bij AMT ben je verantwoordelijk voor: Beheer van de AMT-vereistenbibliotheek; Coördinatie van de invoer in de Object Type Library (OTL); De implementatie van systeem engineering methodologie; Ondersteuning van het besluitvormings- en ontwerpproces; Het opzetten en uitvoeren van

Bekijk vacature »

Back-End Web Developer

As a Back-End Web Developer at Coolblue, you ensure that our webshops work as optimal as possible. How do I become a Back-End Web Developer at Coolblue? As a Back-End Web 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 also feel confident with setting up microservices in Typescript or are open to learning this. Would you also like to become a PHP Developer at Coolblue? Read below if the job suits you. You enjoy doing this Writing pure

Bekijk vacature »

Back-end developer

Dit ga je doen Development d.m.v. XQuery, JSON/XML en REST API's; Ontwikkelen aan een tof en complex zorgplatform; Koppelingen maken met de NoSQL database; Testen en documenteren van de ontwikkelde functionaliteiten; Samenwerking met andere front- en back-end ontwikkelaars. Hier ga je werken Voor een vooruitstrevende organisatie binnen de zorg in Den Haag zijn wij opzoek naar een Back-end Developer die ervaring heeft met o.a.XQuery en Vue.JS of daarin graag zou willen ontwikkelen. Je zal ontwikkelen aan een tof en complex zorgplatform en koppelingen maken met de NoSQL database. Ook het testen en documenteren van de ontwikkelde functionaliteiten behoort tot jouw

Bekijk vacature »

.NET developer

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

Bekijk vacature »

Senior Organisatieontwikkelaar

Als Organisatieontwikkelaar zorg je ervoor dat we in het Magazijn van Coolblue altijd vooruit voetballen op het gebied Medewerker en Organisatie Ontwikkeling. Zo draag je bij aan een toekomstbestendig magazijn waar we klanten én medewerkers elke dag blijven verwonderen. Wat doe je als Senior Organisatieontwikkelaar bij Coolblue? Als Organisatieontwikkelaar werk je voor het Magazijn van Coolblue. Je krijgt er energie van om continue te bouwen aan een toekomstbestendige organisatie. Dat doe je samen met 17 collega's in het HR team, ieder met een eigen specialisme. Je werkt graag zelfstandig en je weet snel je weg te vinden. Ook ben je

Bekijk vacature »

C#.NET Developer

Dit ga je doen Ontwikkelen van de Back-end in .NET6 / C# en WebAPI (Focus);) Ontwikkelen van de Front-End in Nodje.js en Angular (secundair); Het in overleg met de Product Owner opstellen van een technisch ontwerp; Testen, documenteren en implementeren van de nieuwe applicatie; Verzorgen van de nazorg, na de implementatie. Hier ga je werken Binnen deze organisatie werken duizenden mensen binnen allerlei verschillende disciplines. Ter uitbreiding van een nieuw team en ter ondersteuning van het project zijn ze opzoek naar een nieuwe C#.NET Developer. Als Developer zal jij je gaan focussen op een recent gestart project, dat zich richt

Bekijk vacature »

Software Developer PHP JavaScript Python HBO

Samengevat: Wij zijn een softwarebedrijf voor Autodealers. Ben jij een Medior of Senior Software Developer? Heb je ervaring met PHP, JavaScript of Python? Vaste baan: Java.Developer Software HBO €3.000 - €5.200 Bij ons op de werkvloer is er een positieve en informele sfeer. Naast een goede begeleiding en een enthousiaste klantenkring biedt deze werkgever een prettige omgeving met zeer afwisselende werkzaamheden. Houd jij van aanpakken en denk je dat je deze uitdaging aankunt? Dan zoeken wij jou! Zij werken voor grote klanten. Zij doen omvangrijke projecten die we bij deze werkgever op kantoor realiseren (geen detachering). Zij werken met state-of-the-art

Bekijk vacature »

Senior pega developer

As a Pega developer you will make an important contribution to the digitization of our business processes. In your role you will coordinate and attribute to all facets of the digital transformation of our company. De Mandemakers Group, a house full of opportunities. You will take part in a great project for De Mandemakers Group and for Pega. You and your team will have close contact with the Pega organization in NL, USA and India, while developing together. Wat ga je doen? Our Scrum teams are working hard at our headquarters in Waalwijk to successfully develop Pega applications. We have

Bekijk vacature »

Programmeur / Developer

Voor een familiebedrijf in Doetinchem, actief in de machinebouw voor de food-sector, zijn wij op zoek naar een programmeur / developer. In deze functie ben je werkzaam in een team van 5 medewerkers. Je werkzaamheden bestaan onder andere uit het verhelderen van requirements vanuit de opdrachtgever, de klant en de afdeling ontwikkeling. Je verricht haalbaarheidsstudies en werkt specificaties uit die je afstemt met de opdrachtgever. Je ontwerpt design in software en stemt af met je collega's. De huidige vision-systemen zijn geschreven in C software, welke draait op een CUDA platform. Je schrijft en codeert software en zal gaan testdraaien. Tot

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Java-softwaredeveloper

Wat je gaat doen: Dit ga je doen Daar kunnen we heel kort over zijn: software ontwikkelen met de agile-/scrumteams van toonaangevende organisaties. Zoals ministeries, gemeentes, financiële instellingen en retail- en energiebedrijven. En als het bij je past, begeleid je collega-developers in het ontwikkelproces. Doordat je tijdelijk aan een opdracht werkt, doe je in korte tijd veel mooie ervaringen op en leer je nieuwe technieken en tools kennen. Je teamleden werken bijvoorbeeld met Spring, JPA/Hibernate, AJAX, REST/JSON, GIT, AWS en TDD. Het interessante is dat jij volledig in control bent en zelf kiest welke opdrachten je oppakt. Het soort rol,

Bekijk vacature »

Freelance ontwikkelaar Open Forms (zzp)

Startdatum: zsm Duur: 3-6 maanden Inzet: 32 uur Schaal 10, CAO Gemeenten Standplaats Groningen. In overleg kan er remote worden gewerkt. Inhuurdesk zal selectie maken en voorstellen op moment van binnenkomst Wij zoeken een ontwikkelaar in een specifiek vakgebied, namelijk OpenForms ofwel Open Formulieren. In die zin is het te vergelijken met een Drupal ontwikkelaar. Voor het programma PodiumD zoeken we technische development expertise die bekend is met Common Ground principes en in staat is om Open Source toepassingen te modelleren voor onze gebruikers. Een aantal kenmerken wat betreft kennis en ervaring die we denken te zoeken: - Ervaring met

Bekijk vacature »

.NET developer

Functie Jij begint als .NET ontwikkelaar in een team met 10 andere Software Engineers. De werkzaamheden zijn afwisselend, zo kan het dat jij bezig bent met volledig nieuwe features of het door ontwikkelen van bestaande sites of shops. Wij ontwikkelen web applicaties, maar ook mobiele applicaties. Daarnaast bijt jij je soms ook van in externe koppelingen met systemen zoals een ERP. Als team is er een duidelijke focus m.b.t. het waarborgen van de performance en snelheid van webshops. Ook zijn wij expert op het gebied van configuratoren. Kortom enorm veel afwisselende werkzaamheden! Ook jouw werkplek kan afwisselend zijn. Soms heb

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

22/03/2023 04:05:32
 
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.