Vaste routes

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior Java Back End Developer

Functieomschrijving Owning your product, freedom to be creative and make mistakes, and above all, a passion for experimentation and innovation: that’s what defines our talent domain in their own words. As Senior Java Developer at RGN IT you join us as we expand our permanent teams focused on building the best solutions to support the entire spectrum of talent the Randstad Group engages with. What do we offer? Trust and freedom to do your work within the goals and vision of the team Support to grow your skills - whether that’s leadership or technical A hybrid way of working in

Bekijk vacature »

Mendix Ontwikkelaar Bedrijfsapplicaties

Bij welk bedrijf je gaat werken: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Wij ontwikkelen bedrijfsapplicaties. Ben jij een ervaren mendix ontwikkelaar? Ben jij gecertificeerd als Advanced Developer? Vaste baan: Mendix Ontwikkelaar Bedrijfsapplicaties HTML CSS 4.000 - 5.000 Mendix Ontwikkelaar Wij ontwikkelen innovatieve softwareoplossingen voor deze klanten. Dat zijn klanten in het MKB+ of software-ondernemers. Ons low-code team groeit in medewerkers en in het aantal nieuwe projecten. Bij bij hun werk je aan onze eigen bedrijfsapplicaties. Je ontwikkelt met ons de meest nieuwe software. Wij blinken uit als het

Bekijk vacature »

Mendix Ontwikkelaar Consultant Outsystems

Over de werkgever: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Deze werkgever is een allround ICT bedrijf. Ben jij een veelzijdige Mendix Consultant? Heb je ervaring met Outsystems of Bettyblocks? Vaste baan: Mendix Consultant Outsystems Bettyblocks 3.500 - 5.500 Mendix Consultant Ons bedrijf is verantwoordelijk voor alle ICT binnen onze groep. En dat betekent: zorgen voor slimme oplossingen en een soepele werkwijze. Ons bedrijf staat voor teamwork en wederzijdse loyaliteit. Deze werkgever heeft duurzame werkrelaties met elkaar, onze klanten en partners. We vormen een hechte familie van sterke bedrijven

Bekijk vacature »

PHP Developer Scrum

Over de werkgever: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Deze werkgever is een grote muziekwinkel. Ben jij een enthousiaste PHP-developer? Heb je kennis van Symfony? Vaste baan: PHP Developer Scrum Symphony 2.600 - 3.800 PHP Developer Deze werkgever is de grootste online muziekwinkel van de Benelux, en de toekomstig grootste muziek-winkel van Europa. Met honderdduizenden pakketten die jaarlijks verstuurd worden en miljoenen unieke bezoekers per jaar zijn zij marktleider in de Benelux op het gebied van licht, geluid, muziekinstrumenten, produceer- en DJ-gear. Deze werkgever heeft enkel gepassioneerde en

Bekijk vacature »

Outsystems Ontwikkelaar IT

Wie wordt jouw werkgever?: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Wij ontwikkelen ERP systemen. Ben jij een gedreven Software Ontwikkelaar in ERP? Heb je kennis van ERP systemen? Vaste baan: Junior Outsystems Ontwikkelaar IT ERP 2.400 - 4.500 Outsystems Ontwikkelaar ERP SAAS Wij ontwikkelen ERP systemen voor bouworganisaties. Dit doen zij tegen de hoogst mogelijke kwaliteit. Werken bij ons betekent werken in een start-up omgeving met veel groei mogelijkheden. Het gaat om applicatieontwikkeling (niet om websites). Doorleren wordt op prijs gesteld en gefaciliteerd. Daarbij geven we jou veel

Bekijk vacature »

Front End Developer React JavaScript

Over de werkgever: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Deze werkgever is specialist in het analyseren en integreren van complexe processen en applicaties. Ben jij een enthousiaste Front End Developer? Heb jij ervaring met HTML? Vaste baan: Front End Developer React JavaScript CSS 3.000 - 4.200 Front End Developer Wij analyseren complexe processen en vertalen deze naar een overzichtelijk digitaal model. Met hun power applicaties worden bedrijfsprocessen eenvoudiger in gebruik. Deze werkgever is een veelzijdige organisatie. Je werkt voor de eigen IT organisatie. Zij werken met moderne technologie

Bekijk vacature »

Full Stack C++ Developer Agile Software

Over het bedrijf: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Wij verhandelen aandelen op belangrijke Europese markten. Werk jij aan applicaties voor de aandelenhandel? Heb jij ervaring met Agile software development? Vaste baan: Full Stack C++ Developer Agile Software HBO 3.500 - 4.500 Full Stack C++ Developer Je gaat bij ons werken met enthousiaste professionals. Deze werkgever is een platte organisatie gespecialiseerd in aandelenhandel. Hierbij maken wij veel gebruik van IT. Deze werkgever is een veelzijdige organisatie. Je werkt voor de eigen IT organisatie. Zij werken met moderne technologie

Bekijk vacature »

Python Software Ontwikkelaar Javascript

Bij welk bedrijf je gaat werken: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Zij doen ontdekkingen in de radioastronomie. Ben jij geschikt als Software Engineer? Heb je ervaring met Python? Vaste baan: Python Software Ontwikkelaar Javascript HBO 3.200 - 4.700 Software Engineer Zij doen ontdekkingen in de radioastronomie door nieuwe en innovatieve technologieën te ontwikkelen, radioastronomiefaciliteiten van wereldklasse - zoals LOFAR - te exploiteren en fundamenteel astronomisch onderzoek te verrichten. Deze werkgever is een enthousiast bedrijf en bieden doorgroeimogelijkheden. Welke taken horen bij een Python Software Ontwikkelaar Javascript: Voor

Bekijk vacature »

Medior Full Stack Developer Angular

Bij welk bedrijf je gaat werken: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Wij ontwikkelen en implementeren configurator technologie (CPQ) voor Microsoft Dynamics. Ben jij een enthousiaste Full Stack developer? Heb je ervaring met Angular? Vaste baan: Medior Full Stack Developer Angular HBO 3.200 - 4.200 Medior Full Stack Developer Wij ontwikkelen software vanuit Microsoft Dynamics, waarbij administratieve processen bij klanten vergaand geautomatiseerd kunnen worden. Denk hierbij aan orderverwerking, offertes, calculaties, verkoop, projectbeheer en documentatie. En natuurlijk de totale integratie met het ERP systeem. Wij weten alles van Dynamics,

Bekijk vacature »

Business Integration Developer

Dit is de rol Wat ga je doen? Een mooie kans met veel ruimte voor persoonlijke en professionele ontwikkeling in een snelgroeiend bedrijf! In deze hands-on rol draag je bij aan de ontwikkeling van B2B Customer Integration oplossingen door het bouwen en onderhouden van interfaces met de grootste accounts van Boels. Je werkt voor alle klanten van Boels in Europa, maar ons hoofdkantoor is in Sittard of remote. Je verantwoordelijkheden zullen bestaan uit back-end ontwikkeling en onderhoud van B2B interfaces met API's en EDI. (In eerste instantie met OutSystems). Daarnaast digitalisering en automatisering van de volledige Order 2 Cash (O2C)

Bekijk vacature »

C# Software Ontwikkelaar MVC ASP.NET

Voor wie je gaat werken: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Ons bedrijf is leverancier van eHerkenning. Ben jij een C# Software Ontwikkelaar? Heb je ervaring met C# ASP.NET, MVC en Web API? Vaste baan: C# Software Ontwikkelaar ASP.NET EHerkenning 2.800 - 4.300 C# Software Ontwikkelaar Deze werkgever is een groeiend softwareontwikkelingsbedrijf. Wij ontwikkelen betrouwbare online software voor de overheid op het gebied van van eHerkenning. Zij zijn een veelzijdige organisatie. Je werkt voor de eigen IT organisatie. Zij werken met moderne technologie en staan open voor innovatie.

Bekijk vacature »

Qlikview ontwikkelaar

Bedrijfsomschrijving Mijn klant is gevestigd in de regio Apeldoorn en een bekende speler binnen de retailbranche in Nederland. Vanuit het kantoor in Apeldoorn worden er dagelijks vele goederenstromen beheerd en gedistribueerd over de hele wereld. In totaal werken er binnen de organisatie 600 FTE en er heerst een gezellige informele werksfeer. Functieomschrijving ICT is ondersteunend binnen de organisatie. Daarom is het ICT team momenteel 18 FTE groot. Ter uitbreiding is mijn klant op zoek naar een Qlikview ontwikkelaar. De komende jaren wordt juiste informatievoorziening een steeds belangrijker speerpunt binnen de organisatie om de klantvraag zo goed mogelijk te kunnen beantwoorden.

Bekijk vacature »

Software Ontwikkelaar Java of .NET

Voor wie je gaat werken: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Wij geven advies over de vernieuwingen in de online wereld. Wil jij ICT oplossingen analyseren, beschrijven en beheren? Heb je ervaring als .Net / Java Developer? Vaste baan: Software Ontwikkelaar ICT Oplossingen .Net 3.200 - 4.500 Software Engineer Deze werkgever is een fullservice online bedrijf dat grote klanten adviseert over de vernieuwingen in de online wereld en dat advies ook direct kan realiseren. Onze creatie-afdeling is volledig geïntegreerd met sales en consultancy om zo accuraat en snel

Bekijk vacature »

Mendix App Factory Developer

As ASML is growing rapidly, the Application Platforms & Development ART (Agile Release Train) is maturing its team to establish Mendix application development as one of its core focus to maximize the business value that IT generates.. Bringing value through, speed, quality and agility to our business with this platform is what we strive for. You will be joining the ASML Mendix App Factory Team within Application Platforms & Development ART as a developer who is responsible of developing Mendix projects for our business stakeholders on the delivery side, as well as executing Mendix platform and competence related activities to

Bekijk vacature »

Developer Java HBO WO

Over het bedrijf: WR zoekt voor een vaste medewerker voor de volgende werkgever, je treedt gelijk in dienst bij deze werkgever: Wil jij werken als Java Developer? Deze werkgever is een uniek ICT bedrijf. Heb je ervaring met Java? Vaste baan: Developer Java JAVA Software 3.200 - 4.500 Developer Java Voor grote- en kleine opdrachtgevers bedenken en ontwikkelen wij softwareoplossingen. Het team bestaat uit programmeurs, software-architecten, devops-specialisten en de staf. Een prettige werkomgeving is bij hen erg belangrijk. Zij werken voor MKB klanten. Deze werkgever heeft veel verschillende projecten. Houd jij van afwisseling? Dan zit je bij hun goed! Jouw

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

05/07/2022 14:58:27
 
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.