Vaste routes

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Lead Front End Developer, Dynagroup

Ben jij die gemotiveerde en hardwerkende developer die binnenkort de lead wil nemen van een Front End ontwikkelteam? Word jij warm van het bouwen aan innovatieve oplossingen en het overwinnen van uitdagingen in de wereld van Supply Chain oplossingen, After Sales Services en E-commerce services? Lees dan snel verder en solliciteer! Wat bieden wij jou Marktconform salaris Doorgroeimogelijkheden Dynamische en gezellige werkomgeving Uitdagende positie binnen een groeiend bedrijf Wie ben jij Om voor deze functie in aanmerking te komen beschik je over een juiste dosis enthousiasme en aansturende kwaliteiten. Verder: Jij beschikt over een HBO in de richting van informatiesystemen

Bekijk vacature »

.NET Developer

Ben je op zoek naar een uitdagende functie als software developer in een informele en dynamische organisatie? Wil jij werken aan een cloud platform en heb je kennis van Microsoft Azure en/of C# (.NET)? Denk je in oplossingen in plaats van problemen en denk je altijd een stapje vooruit? Dan is dit echt iets voor jou! .NET Developer in Alblasserdam Functieomschrijving Als software ontwikkelaar ben je enthousiast, flexibel en leergierig en altijd gedreven om ervoor te zorgen dat je het beste resultaat bereikt. Je technische kennis helpt je om complexe problemen te vertalen naar eenvoudige oplossing. Je werkt in een

Bekijk vacature »

Java Developer bij InTraffic

Werken aan innovatieve oplossingen die onmisbaar zijn voor iedereen en dus ook voor jou als reiziger? Als Java Developer bij InTraffic kan jij een waardevolle bijdrage leveren! Hoe? Het ontwerpen en ontwikkelen met Java in een van onze complexe projecten. Waarom? Om een beter en veiliger OV in Nederland te creëren. Waar? Bij InTraffic in Nieuwegein, dé IT-specialist op het gebied van verkeer en vervoer. Met wie? Met een scrumteam van tussen de 3 en 9 professionals. Jouw rol als Java Developer Binnen onze complexe IT-omgeving van verkeer en vervoer spelen vele interessante projecten. Hierbij kun je denken aan migraties

Bekijk vacature »

Java Developer / Back-end Developer / 5000 euro @

2021-10-07 iSense Java Developer / Back-end Developer / 5000 euro Ben jij een Back-end Developer die niets van de wereld wil missen? Wil jij dat jouw werkzaamheden zichtbaar zijn voor een groot publiek? Beschik jij over kennis van de modernste technieken en ben je in staat snel te switchen tussen verschillende projecten? Lees dan snel verder! ISZ51146 Organisatie Onze klant is een high traffic organisatie die kwaliteit en digitale transformatie hoog in het vaandel heeft staan. Het is een dynamische en autonome organisatie gevestigd in hartje Amsterdam. Het professionele team waar je in komt te werken is multidisciplinair. Het team

Bekijk vacature »

Front-end Ontwikkelaar @ Delft

2021-09-16 iSense Front-end Ontwikkelaar Ben jij een ervaren Front-end ontwikkelaar? Heb je daarbij ervaring op het gebied van Javascript en .Net Core? Lees dan verder! ISPO48555 Nieuw Organisatie Bij het accepteren van dit aanbod kom je terecht binnen een veelzijdige organisatie waar een goede sfeer hangt. Zij zijn gewend dagelijks met elkaar te lunchen en ruimte is voor een potje Mario. Als Front-end ontwikkelaar ga je je op projectbasis bezighouden met het ontwikkelen van content voor diverse opdrachtgevers. De projecten waar je aan gaat werken zullen verschillende qua omvang. Hierbij kan je rekening houden met een gemiddelde doorlooptijd van een

Bekijk vacature »

Microsoft 365 Engineer

Opleidingsbudget van € 5.000,- Onze opdrachtgevers werken met de nieuwste technieken dus onze medewerkers ook. Daarom bieden we jou uitgebreide opleidingsmogelijkheden en ondersteunen we je maximaal in je ontwikkeling. We bepalen samen met jou een opleidingstraject want niemand wil stilstaan in zijn ontwikkeling, zeker niet in de IT. Wat mag je nog meer verwachten? Direct een arbeidsovereenkomst voor onbepaalde tijd Een salaris tussen de € 3.500,- en € 4.500,- bruto per maand o.b.v. 40 uur Diverse bonussen: - 1800+ uur bonus - Wervingsbonus, een waardebon naar keus, ter waarde van € 1.500,- netto Een onkostenvergoeding van € 100,- netto per

Bekijk vacature »

Core Java Developer

Flow Traders is looking for an experienced Core Java Developer join our growing Development team in Amsterdam. The ideal candidate is curious, methodical and a multi-tasker. This is a unique opportunity to join a leading proprietary trading firm with an entrepreneurial and innovative culture at the heart of its business. We value quick-witted, creative minds and challenge them to make full use of their capacities. If you aim high, the sky is the limit! What you will do Software Engineers in Flow Traders are working on applications that support the core business of the company. Our systems make it possible

Bekijk vacature »

Software Developer / Oracle PL/SQL / Delphi / C++

2021-10-11 iSense Software Developer / Oracle PL/SQL / Delphi / C++ Are you experienced in the field of Oracle PL/SQL and Delphi or C++? Do you want to make cutting edge software for automating a brand new warehouse? Then this is the perfect vacancy for you! ISGO51299 Organization For a good client in Limburg, we are looking for a medior / senior Oracle PL/SQL developer with experience with Delphi or C++. Our client is one of the leading international service providers, providing warehousing and logisitics for mainly high-tech customers. With approximately 20.000 employees all over the world, based in more

Bekijk vacature »

Dynamics NAV / 365 BC Developer @ Ede

2021-10-27 iSense Dynamics NAV / 365 BC Developer Als Dynamics 365 BC Developer aan de slag met maatwerkoplossingen bij een software development club die internationaal zeer succesvolle applicaties bouwen voor de agrarische sector? Lees dan nu verder! ISHU48459 Organisatie Als Dynamics Business Central Developer kom je te werken bij een organisatie in regio Ede die gespecialiseerd is in het ontwikkelen en implementeren van software. Zo hebben ze een eigen ontwikkelde applicatie in de markt gezet voor de agrarische sector die internationaal zeer succesvol is en waar grote vraag naar is. Door deze software worden klanten op een slimme manier ondersteund

Bekijk vacature »

Developer / Low-code @ Regio Lelystad

2021-11-11 iSense Developer Low-code Vind jij het leuk om als Ontwikkelaar te werken aan een eindproduct voor verschillende grote klanten in Nederland en voel jij je prettig binnen een familiebedrijf? Lees dan snel verder en solliciteer! ISK50314 Nieuw Organisatie Als Developer kom je te werken in de regio van Lelystad bij een organisatie die met toonaangevende klanten uit heel Nederland samen werkt. De producten en diensten van de organisatie bereiken miljoenen Nederlanders. Hierbij komt een grote hoeveelheid informatie kijken en deze moet discreet en veilig verwerkt worden. De processen die hierbij horen worden door het IT team vormgegeven. De organisatie

Bekijk vacature »

Email Front-End Developer

Creatieve HTML-er die de mooiste mails binnen no time kan bouwen. Wat doe je als Email Front-End Developer bij Coolblue? Droom jij in HTML en CSS? Weet jij als geen ander een ambitieus email design om te bouwen naar de werkelijke email? Zwem jij graag in je code om bestaande templates net weer een beetje beter te maken? Dan zoeken wij jou. Ook Email Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen De beste campagnes opbouwen voor de belangrijkste doelen Nieuwe mail templates ontwikkelen vanuit HTML en CSS of oude

Bekijk vacature »

Developer (PHP)

Als PHP developer werk jij mee aan de uitbreiding van onze SaaS applicatie. Je bouwt aan nieuwe functionaliteiten, verbetert ons Content Management Systeem op basis van Symfony en optimaliseert de gebruiksvriendelijkheid. Je werkt aan een mooi product dat continu uitgebreid wordt en de potentie heeft om de wereld over te nemen! Naast het meewerken aan de uitbreiding van onze SaaS applicatie, werk je ook aan specifieke modules voor onze klanten. Klanten als Scania, Fletcher Hotels, Gamma of Aditech hebben jouw hulp nodig! Wil jij meewerken om onze ambitie waar te maken? We bieden: Een salaris tussen € 2200 en €

Bekijk vacature »

Servicedesk-medewerker IT

Zet jij een tevreden klant altijd op nummer één? En zoek jij een baan waarin je als Servicedesk-medewerker jouw expertise in kan zetten om eindgebruikers te helpen bij het oplossen van hun ICT problemen? Dan ben jij degene die we zoeken! Wat ga je doen? Als servicedesk-medewerker ben jij het eerste aanspreekpunt voor de eindgebruiker. De klantvragen die jij krijgt, los je indien mogelijk direct op en registreer je in Topdesk. Wat je niet kan oplossen, zet je door naar het juiste DevOps-team. Je komt te werken binnen een team waar jij samen met je collega's verantwoordelijk bent voor de

Bekijk vacature »

Integratie Developer @ Maasdijk

2021-07-27 iSense Integratie Developer Ben jij recent hbo afgestudeerd en wil jij je verder verdiepen in de wereld van applicatie integraties en koppelingen? En wil jij deze ervaring op doen bij een organisatie die zich dagelijks inzet voor een veilig Nederland? Dan is deze rol wat voor jou! ISBI50587 Organisatie De afdeling waarin jij terecht komt is verantwoordelijk voor de realisatie en het beheer van allerlei koppelingen en applicaties. Denk hierbij aan externe koppelingen en domein overstijgende interne koppelingen. Aangezien het gaat om een organisatie wat niet alleen lokaal, maar ook nationaal opereert krijg je te maken met een zeer

Bekijk vacature »

React Frontend Developer

De vacature We zijn op zoek naar iemand die het interessant vindt om te werken in een team met een duidelijke technische visie. Een technisch fraai project, waar custom design patterns gebruikt worden, met weinig technical debt en zonder legacy code. Een stabiele code base waarop je snel kunt doorontwikkelen. Door de herkenbaarheid van de patronen, ben jij ook nog eens snel up to speed! We maken een offerte app met een specifieke meerwaarde voor de klant. Allerlei technische kennis over configuratie van systemen, alsmede bedrijfsprocessen, wordt gevangen in de applicatie. Hierdoor worden verkoopafdelingen volledig ondersteund door de applicatie, waardoor

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

29/11/2021 15:53:18
 
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.