router

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Scrum Master

Ben jij een digital transformer? Dan nodigen wij jou uit om verder te lezen! Wat ga je doen? Als Scrum Master binnen Telecom & Media, help je onze klanten de Agile werkwijze eigen te maken door het begeleiden en ondersteunen van scrum teams. Je coacht product owners en teamleden bij het behalen van hun korte en lange termijn doelstellingen. Je begeleidt het team en geeft gevraagd en ongevraagd constructieve feedback om de werkwijze continu te verbeteren. In deze rol begeleid je één of meerdere scrum teams en help je met het prioriteren en plannen van werkzaamheden. Je inspireert teamleden en

Bekijk vacature »

Mendix Consultant / Developer

Bedrijfsomschrijving Deze organisatie is actief binnen de retail branche en constant in beweging. De focus ligt op het verbeteren van de ICT afdeling en de dienstverlening richting interne klanten/ gebruikers. De organisatie bestaat uit ongeveer 3000 medewerkers. Met de ICT afdeling verzorgen zij de ICT dienstverlening voor verschillende onderdelen binnen de organisatie. Het Mendix team wordt gezien als drijvende kracht achter de innovaties binnen deze organisatie. Het team bestaat ruim 2 jaar en heeft in die periode ruim 20 verschillende applicaties gebouwd en er staat gepland staat om dat aantal te vergroten. Het doel van het team is om processen

Bekijk vacature »

OutSystems Developer / International environment /

Bedrijfsomschrijving For our international client based in Eindhoven area, we are looking for a junior OutSystems Developer. This company is a listed company with offices and plants all over the world. The company offers great experiences and exposure with people from different and unique cultures. They describe themselves as an innovative, professional and sustainable firm. Their goal is to provide for the generations to come. As Outsystems Developer you will be working in an international environment with approximately 15 direct colleagues, consisting of developers, integration specialists and application engineers. This Applications team is a very close and hard working team,

Bekijk vacature »

Front end developer

Philips Digital Cognitive Diagnostics is a new business within the Philips HealthWorks venture organization. The venture is tasked with developing a new software only product called IntelliSpace Cognition. This new product, which is a class II medical device, will help neurologists in assessing the cognitive performance of people with a neuro (degenerative) disease. The initial market for IntelliSpace Cognition is the US. The venture is currently seeking for a Front end Developer. The position is based in Eindhoven, the Netherlands. Responsibilities: • Design, test, develop, deploy, maintain and improve software assets • Deliver high quality code thru hands on development

Bekijk vacature »

.NET Developer / C# / financiële organisatie

Bedrijfsomschrijving Als C# .NET Developer wordt je verantwoordelijk voor het ontwikkelen van applicaties voor belangrijkste product van deze organisatie. Dit product is een applicatie voor alles omtrent hypotheken. De programmeertaal die je hierbij beheerst is C#. Er wordt gewerkt met de nieuwste moderne ontwikkeltechnieken. Daarnaast ben je verantwoordelijk voor het implementeren van gloednieuwe features! Zo is er bijvoorbeeld onlangs een interface met Robotics gebouwd en zijn er veel stand-alone systemen die de komende periode moeten worden vervangen. Kennis van API's is dus zeker noodzakelijk. Je hebt nauw contact met de business om requirements te achterhalen en deze te vertalen naar

Bekijk vacature »

Supportdesk programmeur

EM-Cultuur bedient meer dan 600 theaters, theater-en muziek-gezelschappen, festivals, musea en andere not-for-profit organisaties met online marketingtools. Onze gebruikers zijn marketingmedewerkers die de communicatie van deze organisaties verzorgen. We doen dit al meer dan 30 jaar vanuit hartje Amsterdam. We voelen ons betrokken bij de sector. Onze software voor relatiebeheer en digitale nieuwsbrieven zijn helemaal afgestemd op de sector en we onderscheiden ons pas echt met onze ervaring, persoonlijke aanpak en supportdesk. We zijn op zoek naar een communicatieve technicus. Een programmeur met kennis van HTML/CSS/JSON. Maar ook het aanspreekpunt voor onze klanten die zorgt dat we onze stelling van

Bekijk vacature »

React Native / Mobile App ontwikkelaar / Full Stac

Bedrijfsomschrijving Deze organisatie kenmerkt zich door haar vooraanstaande karakter en biedt een belangrijke bijdrage aan de overheid en de maatschappij. Je komt te werken op de IT-afdeling (50 FTE) die op zijn beurt weer bestaat uit verschillende teams. Jij zal met jouw team verantwoordelijk zijn voor de ontwikkeling van nieuwe apps alsmede de migratie naar een nieuw platform gebaseerd op Kubernetes. Door de dynamiek van de organisatie zullen er ook changes moeten worden uitgevoerd, hier zal jij ook belangrijke bijdrage inleveren. Door jouw ervaring zal je betrokken worden bij het maken van architectuur keuzes, het adviseren in het vinden in

Bekijk vacature »

Software Developer eMagiz

Ben jij een zelfstandige (liefst Full Stack) Developer die zich op een volwassen manier verantwoordelijk voelt voor zijn eigen doelstellingen en daarnaast blij wordt van de teamdynamiek in je scrumteam en daar een actieve en kritische rol heeft? En word jij enthousiast van een zeer complexe ontwikkelomgeving waar je wordt uitgedaagd abstract te denken? Word dan lid van ons R&D team zodat jij een bijdrage levert aan onze zeer geavanceerde softwaremodellen en zo onze Enterprise integration Platform as a Service verder verbetert. Jouw uitdaging als Software Developer eMagiz eMagiz is een modelgedreven platform en wordt door klanten en partners gebruikt

Bekijk vacature »

.NET Developer PACS / Multimedia

.NET Developer PACS / Multimedia Wil jij met jouw ontwikkelskills medisch specialisten het optimale uit beeldmateriaal laten halen? Dan is dit jouw droombaan! Ter versterking van ons PACS-team in Amsterdam zoeken wij een ontwikkelaar die verantwoordelijkheid krijgt over zijn ‘eigen’ software. Jouw baan In deze functie ga je medische apparatuur (ECG\echo\OCT\MRI\Etc) integreren in ons EPD. Jij houdt je daarnaast bezig met het maken van software om de verschillende output-formaten van de apparatuur te ondersteunen en te presenteren aan medische specialisten. Tevens ben je verantwoordelijk voor het ontwerpen, ontwikkelen, ondersteunen en onderhouden van je eigen PACS-tools (Picture Archiving and Communication System).

Bekijk vacature »

TVD Developer

Data Management Developer For one of our clients we are looking for a highly-motivated application specialist with proven relevant knowledge of and experience within the area of Data Management Development. This is going to be your job Are you a highly-motivated application specialist with proven knowledge of and experience with applying to the Tibco Data Virtualization domain in the area of Data Management Development? Do you have generic knowledge of and experience with data management capabilities? You are an enthusiastic T-shaped team player that will manage the environment and where you take ownership for the continuity of our solutions and

Bekijk vacature »

Senior .Net Developer - Kartrekker Financieel Azur

De internationale en innovatieve FinTech is marktleider in financiële reporting en trends software en services en breidt wegens groeiend succes haar producten en development teams verder uit. Hiervoor zoeken ze Senior .Net C# Developer die mogelijk ook het nieuw te vormen team technisch zal aansturen. De huidige oplossingen staan; aan jou de taak samen met de huidige Tech Lead te kijken naar optimalisatie en innovatie van het platform. Daarnaast breid je de tooling met je team uit en maak je de stap om het nieuwe development team te vormen en sturen als nieuwe Tech Lead. Met hen bouw je aan

Bekijk vacature »

Lead .Net Developer/Architect/ Telecom/ Salary: 6.

Bedrijfsomschrijving You will work at a large and progressive Telecom organization with offices in the Netherlands and Europe. The domain where you are going to work is responsible for designing and maintaining the Fixed Networks and other network solutions. They deliver communication products and services to companies and consumers. Furthermore, they deliver the data flow and mobile network in the Netherlands.Currently they are searching for a Lead .Net Developer to support one of the three scrum teams for delivering the best services. As a Lead .Net Developer you will be working closely together with your team picking up user stories.

Bekijk vacature »

Interaction Designer

Geen scherm ontwerpuitdaging is je te gek en je krijgt energie van klanten die tevreden met jouw oplossingen aan de slag zijn. Doordat je regelmatig contact hebt met klanten door het bijwonen van klantsessies of gebruikerstesten, ken je de wereld van je gebruikers en weet alles over UI interactie en patronen. Je werkt graag aan het opzetten en invullen van een gebruikersinteractie, waarbij aandacht voor detail en bruikbaarheid voorop staan. Accountancy is een complex vakgebied, waarbij je veel te maken krijgt met steeds veranderende regelgeving waar we met onze software op aan moeten haken. Het geeft jou een kick als

Bekijk vacature »

Front End Developer with excellent Angular skills

Front End Developer with excellent Angular skills to help migrate software application into the Cloud (Front End Developer Angular 65K Rotterdam IND Registered) For an international organisation, specialised in data management for the process industry, we are looking for a Front End Developer with strong work experience in Angular technologies. This organisation has developt a software solution that takes on the important role of connecting people, data and assets, and translates this data into 3D models. Until recently it was a desktop solution, that is currently being migrated to the (AWS) Cloud. Are you up for the task? Who are

Bekijk vacature »

.NET Developer PACS / Multimedia

Wil jij met jouw ontwikkelskills medisch specialisten het optimale uit beeldmateriaal laten halen? Dan is dit jouw droombaan! Ter versterking van ons PACS-team in Amsterdam zoeken wij een ontwikkelaar die verantwoordelijkheid krijgt over zijn ‘eigen’ software. Jouw baan In deze functie ga je medische apparatuur (ECG\echo\OCT\MRI\Etc) integreren in ons EPD. Jij houdt je daarnaast bezig met het maken van software om de verschillende output-formaten van de apparatuur te ondersteunen en te presenteren aan medische specialisten. Tevens ben je verantwoordelijk voor het ontwerpen, ontwikkelen, ondersteunen en onderhouden van je eigen PACS-tools (Picture Archiving and Communication System). Die tools integreer je feilloos

Bekijk vacature »
Ozzie PHP

Ozzie PHP

20/03/2012 14:34:59
Quote Anchor link
Hallo iedereen,

Ik ga binnenkort beginnen met misschien wel het belangrijkste onderdeel van mijn CMS, namelijk de router.

De route vertaalt een route naar een controller (class) en een action.

(Voor de mensen die niet precies weten wat ik bedoel met een route, een route is het deel dat achter de domein root staat. In www.mijnsite.nl/berichten/toon/1 is 'berichten/toon/1' de route.

Graag wil ik jullie advies/ tips over hoe ik het beste mijn routes kan opbouwen.

Grofweg zijn er 2 mogelijkheden:

1) iedere route heeft een vaste structuur, waarbij deel 1 bijvoorbeeld de controller is en deel 2 de actie. Bijvoorbeeld: www.mijnsite.nl/berichten/toon/1 zou de controller (class) 'berichten' aanroepen en de action (functie) 'toon' en parameter 1.

2) alles is mogelijk, een route heeft geen vaste structuur. Bijvoorbeeld: www.mijnsite.nl/een/hele/ingewikkelde/route/toont/nummer/1/bericht

MIJN PERSOONLIJKE MENING:
- optie 1 is makkelijker te maken, maar minder flexibel
- optie 2 is (veel?) moeilijker te maken, maar je kunt er veel meer mee.

Ik neig er dus naar om voor de 2e optie te kiezen. Maar ik heb geen idee wat ik me op de hals haal. Is zoiets moeilijk om te maken? En is het niet een al te zwaar proces om de juiste controller en action te achterhalen wat ten nadele zal zijn van de performance van de website?

Ik hoop dat iemand (uit ervaring wellicht) advies kan geven. Ook zou ik enorm blij zijn als iemand toevallig een codevoorbeeld / link heeft van optie 2.

Alvast hartelijk dank!
 
PHP hulp

PHP hulp

27/11/2020 10:02:53
 
Wouter J

Wouter J

20/03/2012 15:02:06
Quote Anchor link
Ik heb zoiets pas gemaakt voor mijn collectie van dingen in een framework. Ik heb hierbij alle routes apart in een route object gedaan. In het route object ik ik van de gegevens een REGEX string gemaakt en die kun je dan zo gebruiken.

Mijn codevoorbeeld:
- Route object
- De FrontController waarin bij de dispatch method wordt gekeken welke route matched
- Routes object (deze wordt gebruikt door de frontcontroller)
- Een voorbeeld van mijn routes.ini files

Edit:
Of een voorbeeld uit het framework wat Pim ooit eens heeft gemaakt: https://github.com/drumstok/Small-but-Beautiful/blob/master/SBB.php#L326
Gewijzigd op 20/03/2012 15:21:47 door Wouter J
 
Ozzie PHP

Ozzie PHP

20/03/2012 15:21:25
Quote Anchor link
Thanks Wouter... ik snap er alleen totaal niets van :) Het is nogal een persoonlijke manier denk ik waarop jij het gedaan hebt.

Hmmm.... ik wacht nog even wat meer reacties af.
 
Pim -

Pim -

20/03/2012 17:48:41
Quote Anchor link
Opzich is dat dynamische systeem helemaal niet moeilijk, niet als je met een gewone 'statische' app werkt. Wanneer je dit in een 'dynamisch' systeem wilt verwerken wordt het natuurlijk lastiger.

Als ik zelf iets dergelijks zou willen maken, zou ik het denk ik als volgt doen:

Je hebt een node-structuur, zoals een bestandsmap, zeg: / of /blog
Hierbinnen kan je gewoon pagina's plaatsen, zoals /blog/about
Je kan ook met 'engines' werken, die zelf een dynamische url mappen naar dynamische pagina's, zoals: /:year/:month/:slug (a la wordpress).
Deze engines kan je dan in de node structuur plaatsen, waardoor je krijgt:
/blog/:year/:month/:slug
Hierdoor heb je een mooi modulair systeem: de blog-engine is onafhankelijk van de rest, maar kunnen de engines zelf wel volledig flexibel zijn.

Je kan dan ook nog aparte elementen in een engine (zeg de frontpage van je blog-engine) aparte paden geven, bijv. /. Zo kan je de frontpage van je blog als frontpage van je site nemen.

Misschien wat lastig te implementeren (denk bijv. aan 2 blogs op 2 locaties), maar wel leuk en ik denk dat het wel te doen is.

Succes ;)

Toevoeging op 20/03/2012 17:51:44:

Je moet dan ook proberen de url-mapping enigszins overeen te laten komen met de menu-structuur, dat is misschien wel wat ingewikkeld, al kan je natuurlijk ook die systemen los van elkaar houden.

Hou er trouwens rekening mee dat je naast een url-matcher ook een url-generator moet maken, begin daar niet achteraf aan.

Toevoeging op 20/03/2012 17:54:54:

Het is dan natuurlijk helemaal cool wanneer je de node structuur die aan het hoofd van je routing staat ook de structuur geeft van een engine, dan heb je een kleine core en veel code in plugins, wat sowieso leuk is :)
 
Ozzie PHP

Ozzie PHP

20/03/2012 19:02:30
Quote Anchor link
"Het is dan natuurlijk helemaal cool wanneer je de node structuur die aan het hoofd van je routing staat ook de structuur geeft van een engine, dan heb je een kleine core en veel code in plugins"

Pim, ik waardeer je enthousiasme maar ik als niet-(opgeleid)programmeur snap maar weinig van wat je zegt. Node structuur, enginee... pfff....

Wat ik feitelijk gewoon wil is een action en controller aan een route kunnen koppelen. Stel je hebt een webshop dan zouden dit wat routes kunnen zijn:

- /winkelmandje (controller: shoppingbasket, action index)
-/klant/particulier/inschrijven (controller: register action: consumer)

Die routes wil ik koppelen aan een action en controller. Hoe precies weet ik nog niet, maar bijvoorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$routes
= array();
$routes[] = array('route' => 'winkelmandje', 'controller' => 'shoppingbasket', 'action' => 'index');
$routes[] = array('route' => 'klant/particulier/inschrijven', 'controller' => 'register', 'action' => 'consumer');
?>


So far, so good...

Maar wat ik dus wil weten is... is hoe je deze url:

www.mijnwebshopje.nl/winkelmandje

vertaalt naar de controller 'shoppingbasket' en de action 'index'.

Hoe maak je zo'n router? En zoals ik in de beginpost al zei, je kunt een eenvoudige router maken waarbij het 1e deel van je route overenkomt met de controller en het 2e deel met de action. Maar ik wil het graag wat flexibeler... mits dit niet al te ingewikkeld is...
 
Wouter J

Wouter J

20/03/2012 20:23:27
Quote Anchor link
Dat wat je nu wilt is toch nog niet heel moeilijk te maken?

Eerst doe je het heel simpel en maak je niks dynamisch:
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
<?php
// routes.php
$routes = array();
$routes[] = array('route' => 'winkelmandje', 'controller' => 'shoppingbasket', 'action' => 'index');
$routes[] = array('route' => 'klant/particulier/inschrijven', 'controller' => 'register', 'action' => 'consumer');

// front controller
foreach( $routes as $route )
{

  if( $route['route'] == 'winkelmandje' )
  {

    echo ucfirst($route['controller']).'::'.strtolower($route['action']).'()';
    break;
  }
}

?>


Vervolgens ga je het uitbreiden en voeg je er een dynamische url aan toe, ong. zoiets:
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
<?php
// routes.php
$routes = array();
$routes[] = array('route' => 'winkelmandje', 'controller' => 'shoppingbasket', 'action' => 'index');
$routes[] = array('route' => 'klant/particulier/inschrijven', 'controller' => 'register', 'action' => 'consumer');

// front controller
$url = $_SERVER['REQUEST_URI'];

$url = end(preg_split('/ozzie-router\.php\//', $url));

foreach( $routes as $route )
{

  if( $route['route'] == $url )
  {

    // i.p.v. een echo moet je natuurlijk wat doen met de controller en action gegevens
    echo ucfirst($route['controller']).'::'.strtolower($route['action']).'()';
    break;
  }
}

?>


Dit is nog relatief simpel. Nu hoef je alleen nog het probleem van parameters die in de url zitten en in de action parameters thuis horen voor elkaar te krijgen en dan zul je REGEX nodig hebben.
Doe het wel zo dat je in de routes.php moet aangeven waar je de parameters wilt, en misschien zelfs wel met voorwaardes of het cijfers of letters moet bevatten.
 
Ozzie PHP

Ozzie PHP

20/03/2012 20:37:07
Quote Anchor link
Dankjewel voor het meedenken Wouter. Dit zou inderdaad een 1e stap kunnen zijn. De moeilijkheid ligt voor mij vooral in de vraag hoe ik moet matchen.

Dankzij jouw codevoorbeeldje wordt het overigens wel wat duidelijker :) Ik had het idee dat ik de complete route zou moeten opsplitsen in deeltjes en die deeltjes dan met elkaar zou moeten vergelijken, maar nu ik het zo zie is dat wellicht helemaal niet nodig, maar moet ik inderdaad gaan preg_matchen... waar ik waars. tzt wel weer wat hulp bij nodig heb :)

P.S. ligt het aan mij of ontvang ik ineens geen mailtjes meer als er iemand gereageerd heeft in een van mijn topics?
 
Wouter J

Wouter J

20/03/2012 20:38:46
Quote Anchor link
Quote:
P.S. ligt het aan mij of ontvang ik ineens geen mailtjes meer als er iemand gereageerd heeft in een van mijn topics?

Nee, dat ligt niet aan jou
 
Pim -

Pim -

21/03/2012 09:52:57
Quote Anchor link
Sorry, ik vind het gewoon leuk even te fantaseren.

Opzich is het conceptueel niet zo lastig hoor. Een node structuur is niets anders dan een boom of 'composite' pattern. Op internet zijn genoeg manieren te vinden hoe je dat met een db implementeerd.

Dat wat ik een engine noemde (term komt uit eoa cms waar ik ooit naar gekeken heb) is gewoon een soort module, een eigen mvc systeempje met routes, views en een of meerdere tabellen.

Hoe je dit daadwerkelijk uitschrijft, tsja... ;-)
 
Ozzie PHP

Ozzie PHP

21/03/2012 10:02:41
Quote Anchor link
Kijk dat instellen van een route dat gaat wel lukken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$routes
= array();
$routes[] = array('route' => 'winkelmandje', 'controller' => 'shoppingbasket', 'action' => 'index');
?>


Maar mijn vraag is, hoe herleid ik de onderstaande url dan weer naar de juiste action en controller:

www.mijnwebshop.nl/winkelmandje

Of anders gezegd, hoe match ik de url "winkelmandje" met de route "winkelmandje". Oké... in dit geval is het eenvoudig, maar wat als we het een beetje gecompliceerder maken. Stel we hebben 2 routes:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$routes
= array();
$routes[] = array('route' => 'product/$product_id', 'controller' => 'products', 'action' => 'show');
$routes[] = array('route' => 'product/overview', 'controller' => 'products', 'action' => 'showOverview');
?>


De 1e route bevat een variabele en zoals je ziet beginnen ze allebei met "product/".

Stel nu je hebt deze url:

www.mijnwebshop.nl/product/123

Hoe match je dan de url "product/123" met de juiste route? Dat is mijn vraag. Heeft iemand daar een handige tip voor?
 
Pim -

Pim -

21/03/2012 10:46:21
Quote Anchor link
Je moet dan met regexen werken.

Ik doe het vaak zo:

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
<?php
$route
= new Route('/abc/:id');

class Route
{
    public function __c($pattern) {
        $this->regex =
            preg_replace(
                '#:([a-z])+#',
                '(?P<$1>[^/]+)',
                $pattern
            )
        ;
    }

    function
match($query)
    {

        if(!preg_match('#'.$this->regex.'#', $query, $matches))
            return false;
        return $matches;
    }
}

?>

Even 'quick and dirty'. Kijk eens naar http://www.php.net/manual/en/function.preg-match.php voor named subpatterns.

Toevoeging op 21/03/2012 10:47:52:

De patterns matchen nu alles voor de eerste slash, je kan dat evt nog wijzigen.
 
Ozzie PHP

Ozzie PHP

21/03/2012 10:54:30
Quote Anchor link
Thanks Pim, dat is zeer bruikbare info!

Ik zie dat je aan de $match functie een $query meegeeft. Moet dat niet een route zijn? En je returnt $matches? Moet ik daaruit concluderen dat een route meerdere matches kan hebben? Waar staat "__c" trouwens voor?
 
Pim -

Pim -

21/03/2012 11:01:22
Quote Anchor link
__c = __constructor ;)

Je gebruikt het als volgt:
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
<?php
class Router
{
    function
addRoute(Route $r)
    {

        $this->routes[] = $r;
    }
    function
match($query)
    {

        foreach($this->routes as $r)
            if(($matches = $r->match($query)) !== false)
                return $matches;
        return false;
    }
}

$router = new Router();
$router->addRoute(new Route('/appeltje'));
$router->addRoute(new Route('/peer/:id'));
$route->match('/peer/123');
?>


Toevoeging op 21/03/2012 11:02:36:

Zoals je in het PHP.net bestand ziet, geeft matches de regex matches terug. De named subpatterns zitten daarbij, zodat $matches['id'] het id is wat in de query zat.
Gewijzigd op 21/03/2012 11:03:14 door Pim -
 
Ozzie PHP

Ozzie PHP

21/03/2012 11:08:50
Quote Anchor link
Het ziet er (nu nog) wat ingewikkeld uit, maar wel erg gaaf als dit gaat werken :)

Maar hoe krijg je in jouw voorbeeld nou de controller en action? Want dat zie ik nu nergens terug.

Je helpt me hier overigens enorm mee, thanks!!
 
Pim -

Pim -

21/03/2012 11:24:38
Quote Anchor link
Dat hangt er een beetje van af hoe je daarmee omgaat.

De makkelijkste manier is om eoa string voorstelling te maken van de controller en action, bijv. Controller::Action. Je kan dan van route maken:
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
<?php
class Route
{
    public function __construct($pattern, $controller)
    {

        $this->regex = //...
        $this->controller = $controller;
    }


    public function match($query)
    {

        if(!preg_match('#'.$this->regex.'#', $query, $matches))
                    return false;
        return $matches+array('_controller'=>$this->controller);
    }
}

$router = new Router();
$router->addRoute(new Route('/appeltje', 'AppelController::index'));
$router->addRoute(new Route('/peer/:id', 'PeerController::peertje'));
$result = $route->match('/peer/123');
$result['_controller'] // is PeerController::peertje
$result['id'] // is 123

?>

Die data kan je dan aan eoa 'frontcontroller' geven, die de controller voor je zoekt en de parameters eraan geeft.
Gewijzigd op 21/03/2012 11:25:24 door Pim -
 
Ozzie PHP

Ozzie PHP

21/03/2012 11:30:11
Quote Anchor link
Vet :-)
Thanks voor de hulp!!! Hoop er nog deze week mee aan de slag te gaan. Heb nu in ieder geval een mooie basis :-)))
 
Pim -

Pim -

21/03/2012 11:30:33
Quote Anchor link
Even voor de volledigheid:
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
<?php
class PeerController
{
    public function peertjeAction($args)
    {

        print (int)$args['id'].' is het ID';
    }
}


class FrontController
{
    public function handle($controllerString, $args)
    {

        list($controller, $action) = explode('::', $controllerString);
        $controller = new $controller;
        // Weet niet of dit werkt
        $controller->$action($args);
        // Anders
        call_user_func(array($controller, $action), $args);
    }
}

?>

Toevoeging op 21/03/2012 11:31:57:

Dus dan krijgen we:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$router
= new Router();
$router->addRoute(new Route('/appeltje', 'AppelController::index'));
$router->addRoute(new Route('/peer/:id', 'PeerController::peertje'));
$result = $route->match('/peer/123');
$fc = new FrontController();
$fc->handle($result['_controller'], $result);
// Geeft: 123 is het ID
?>
Gewijzigd op 21/03/2012 11:32:31 door Pim -
 
Ozzie PHP

Ozzie PHP

21/03/2012 11:32:38
Quote Anchor link
Je bent de held van de dag :-)
 
Pim -

Pim -

21/03/2012 11:34:41
Quote Anchor link
Graag gedaan ;)
 



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.