MVC Routing

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

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 »

Front-end Developer - React - Data Driven

Bedrijfsomschrijving Onze klant is een snelgroeiende organisatie die een data-driven inspectieapp op de markt hebben gebracht die nu al een aantal jaar door verschillende organisaties wereldwijd gebruikt wordt. Er zijn zo'n 6 mensen werkzaam bij dit bedrijf en ze zijn nu vooral op zoek naar een sterke front-end developer die wil gaan werken aan nieuwbouw applicaties en de uitbouw van de huidige applicaties. De reden dat ze zoeken is omdat er veel werk op komst is en ze hier de juiste capaciteit voor willen hebben. Er heerst hier een hele prettige sfeer waarin respect en eerlijke communicatie belangrijk is. Ook

Bekijk vacature »

Junior Back end developer PHP, Symfony

Functie Wij hebben onlangs onze eerste collega’s aangenomen, waardoor ons development team momenteel uit 4 personen bestaat. We bouwen onze software op basis van een PHP-framework (wat op zichzelf een Symfony framework is). Qua ontwikkeling focussen wij ons op 3 focus velden; – API-ontwikkeling/ Component Creatie – Implementatie – Framework ontwikkeling; het toevoegen van nieuwe functionaliteit of interne microservices Onze senior software engineer focust zich momenteel op de laatste twee punten, maar wij komen handen te kort op het eerste veld. Daarom zijn wij op zoek naar een enthousiaste junior software engineer die graag de kneepjes van het vak wil

Bekijk vacature »

Front-end Angular developer

Functie In jouw rol als Front-End developer werk je samen met de backend developers om middels tweewekelijkse sprints het platform naar een hoger niveau te tillen. Hiernaast heb je affiniteit met data en werk je graag samen met het team om de gegevensintegriteit en -beveiliging te waarborgen, om ervoor te zorgen dat de gebruiker wereldwijd de beste SaaS-services heeft. Deze organisatie heeft meer dan 100 mensen in dienst, waarvan er 45 in Nederland werken. Het ontwikkelteam bestaat uit 10 mensen en is verdeeld in 2 scrumteams. Het eerste team bestaat uit Java en Scala ontwikkelaars. Het tweede team, waar jij

Bekijk vacature »

PHP Developer - medior functie

Functieomschrijving Ben jij innovatief en wil jij je kennis graag delen met jouw nieuwe collega's? Lees dan snel verder! Voor een leuke opdrachtgever in de omgeving van Roosendaal zoeken wij een Symfony developer. Of je nou junior, medior of senior bent, je krijgt hier alle vrijheid en verantwoordelijkheid om jouw eigen loopbaan te ontwikkelen. Je gaat je hier bezig houden met en inspelen op de actualiteiten van jouw vakgebied. Techstack: Symfony, PHP, mySQL. Kennis van Svelte is helemaal mooi meegenomen. Bedrijfsprofiel Al sinds '99 is dit webbureau actief. De kernwaarden binnen het bedrijf zijn integer, dienstbaar en deskundig. Je komt

Bekijk vacature »

Software Developer

Dit ga je doen Je bent verantwoordelijk voor de warehouse applicatie die een integratie heeft met de PLC laag; Je ontwikkelt in C#/.Net; Je bent verantwoordelijk voor het ontwikkelen van interfaces en het visualiseren van componenten; Je denkt mee over het design voor business oplossingen; Je bent verantwoordelijk voor het testen van de gebouwde oplossing. Hier ga je werken Voor een internationale organisatie in de transport zijn wij momenteel op zoek naar een Software Developer. Ze zijn wereldwijd de grootste speler en lopen voorop met het automatiseren van alle processen van de warehouses. Op dit moment wordt er nog gebruik

Bekijk vacature »

IoT Developer

Ben jij innovatief, heb jij passie voor energie en ben je data gedreven? Bouw dan mee aan IoT binnen Bredenoord. Samen met een gedreven team werk jij aan mooie technische en innovatieve oplossingen. Wat houdt de functie van IoT Developer in? Binnen Bredenoord zijn wij momenteel volop in ontwikkeling met ons IoT platform. Als uitbreiding van ons team zijn wij op zoek naar een IoT Developer. Je zal in projectverband meehelpen met het implementeren van IoT vraagstukken binnen Bredenoord. Als IoT Developer op onze R&D-afdeling word je verantwoordelijk voor het verder inrichten en beheren van ons nieuwe IoT platform. Dat

Bekijk vacature »

Functioneel Applicatiebeheerder

Wij van CNB zijn op zoek naar een leergierige Functioneel Applicatiebeheerder CNB is de grootste dienstverlener in de markt van bloembollen en vaste planten. In deze markt verricht CNB de volgende diensten: bemiddeling, veilen en het koelen en prepareren van bloembollen. Vanuit ons hoofdkantoor in Lisse werken bijna 100 collega’s dag in dag uit aan de bemiddeling van bloembollen. In Bovenkarspel vindt het koelen en prepareren van de bloembollen plaats. Wij zijn op zoek naar een enthousiaste Functioneel Applicatiebeheerder die naast een applicatie, ook sfeer kan bouwen! Jij: Vindt het leuk om binnen een klein IT-team aan de slag te

Bekijk vacature »

Developer

Functie omschrijving In deze functie ga je werken als C# Developer. Jij gaat aan de slag met de volgende taken: Maatwerk software bouwen; Huidige softwareprojecten verder uitbouwen en optimaliseren; Ideeën van de klant omzetten naar handige oplossingen en tools; Bovenstaande doe je middels de Microsoft- stack: C#, ASP.NET en MVC/ Entity Framework. Ben je net afgestudeerd aan een HBO opleiding Informatica, aarzel dan niet om te solliciteren. Dit is namelijk de ideale startersfunctie! Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Boxtel. Het is van oorsprong een familiebedrijf, die gestart zijn met het bouwen van websites. Dit is door

Bekijk vacature »

(Junior) Back-end Ontwikkelaar

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

Bekijk vacature »

Technisch Applicatie ontwikkelaar

Functie omschrijving Ben jij op zoek naar een nieuwe uitdaging en zoek jij een informele werkgever waar je zelfstandig kunt werken binnen een leuk IT team, lees dan snel verder want wie weet zijn wij op zoek naar jou! In deze functie werk jij voornamelijk aan: Het onderhouden en ontwikkelen van de IT systemen; Het opzetten van Azure Cloud systemen, denk aan interfaces, hardware op de Cloud, webportalen of BI functies; Werk je aan scripts binnen verschillende software applicaties, denk aan ERP en CAD; Ontwikkel en implementeren je MS PowerApps en Power BI. Bedrijfsprofiel Je komt terecht bij een familiair

Bekijk vacature »

Gezocht: .Net ontwikkelaars met een maatschappelij

Bedrijfsomschrijving Zoek jij als medior .Net ontwikkelaar een inspirerende werkplek bij een bedrijf met maatschappelijk verantwoordelijkheidsgevoel? Dan is deze vacature je op het lijf geschreven. De organisatie bestaat ruim 20 jaar en ze ontwikkelen in house applicaties waarmee de zorgsector enorm mee gebaat is. Jouw applicaties worden gebruikt door duizenden gebruikers waardoor je echt een waardevolle bijdrage kan leveren aan de maatschappij. Het bedrijf is zeer innovatief en vindt een goede werk/privé balans belangrijk. Je krijgt alle mogelijkheden om jezelf verder te ontwikkelen, je werktijden in te delen en daarnaast is het ook mogelijk om deels thuis te werken. Het

Bekijk vacature »

Developer Front-end

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

Bekijk vacature »

Back-end programmeur

Functieomschrijving Heb jij kort geleden je MBO of HBO ICT in ontvangst mogen nemen? Of ben je klaar voor een nieuw hoofdstuk in jouw carrière? Voor een uitdagende werkgever in de regio van Tilburg zijn wij op zoek naar een ambitieuze back-end programmeur met affiniteit met MS Acess. Samen met een enthousiast team ben je verantwoordelijk voor het bouwen van maatwerk software voor hun klanten. Je hebt kennis of ervaring van SQL, Maar affiniteit met MS Acess is nog belangrijker. Je bent sociaal naar klanten en flexibel ingesteld. Je denkt altijd in kansen en gaat graag de uitdaging aan. Verder

Bekijk vacature »

Mendix Developer

For our client in Amsterdam, we are looking for a Senior Mendix Developer. Company description Our client is an IT Consultancy company who’s been active for 10 years now. With their ambitious team, they are working with different clients in order to help them with analyzing their data and giving advice to them, regarding how they can use their data in the smartest ways, or to make sure that their mobile or web applications are working efficiently. As you get a glimpse of various industries, it is guaranteed that no day will be the same. Job description As a Mendix

Bekijk vacature »

Pagina: « vorige 1 2

Wouter J

Wouter J

15/12/2013 19:36:28
Quote Anchor link
Je wilt altijd flexibiliteit houden over hoe je routes eruit zien.
 
PHP hulp

PHP hulp

26/04/2024 17:19:56
 
Mark Hogeveen

Mark Hogeveen

15/12/2013 21:12:35
Quote Anchor link
Conclusie: routes netjes opslaan, en maken zoals je ze zelf wil. Geen gedoe met bestandsnamen.
 
Ozzie PHP

Ozzie PHP

15/12/2013 21:30:11
Quote Anchor link
Ja, inderdaad. Je krijgt dan dus zoiets:

route = contact:
- controller = ContactController
- action = IndexAction
 
Mark Hogeveen

Mark Hogeveen

16/12/2013 20:42:10
Quote Anchor link
Dit heb ik ondertussen:

index.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
<?php
// index.php

require "Request.php";
require "Router.php";

$router = new Router;

$router->add(array("route" => "", "destination" => "welcome.php", "methods" => array("all")));
$router->add(array("route" => "help", "destination" => "help.php", "methods" => array("GET"))); // kan het zo goed "all" zijn (alle methods)
$router->add(array("route" => "contact", "destination" => "contact.php", "methods" => array("GET"))); // kan het zo goed "all" zijn (alle methods)
$router->add(array("route" => "submit", "destination" => "submit.php", "methods" => array("POST")));

// Ingewikkelder
$router->add(array("route" => "shop/product/info/", "destination" => "productInfo.php", "methods" => array("GET", "POST"));

$router->matchRequest(new Request);
?>

Router.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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php

class Router {
    
    private $_routes;
    private $_destination;
    private $_notFoundDestination = "notfound.php";
    
    public function add(array $route = array()) {
        
        $this->_routes[] = $route;
    }

    
    public function matchRequest(Request $request) {
        
        if($request->getArgument('route') == "") {
            
            $this->_destination = "welcome.php"; // Startpagina, normaal index.php
            $this->navigate();
            
        }
else {
            
            for($i = 0; $i < count($this->_routes); $i++) {
                
                if($this->_routes[$i]["route"] == $request->getArgument('route')) {
                    
                    if(in_array($request->getMethod(), $this->_routes[$i]["methods"]) || in_array("all", $this->_routes[$i]["methods"])) {
                        
                        $this->_destination = $this->_routes[$i]["destination"];
                        $this->navigate();
                        return;
                    }

                    
                    $this->notFound(); // verkeerde method
                    return;
                }
            }

            
            $this->notFound(); // Loop door alle mogelijke routes gedaan, niks gevonden
        }
    }

    
    public function navigate() {
        
        require $this->_destination;
    }

    
    public function notFound() {
        
        require $this->_notFoundDestination; // Error 404 pagina
    }
}

?>

Request.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
<?php
// Request.php

class Request {
    
    public function getMethod() {
        
        return $_SERVER['REQUEST_METHOD'];
    }

    
    public function getArgument($name) {
        
        return isset($_GET[$name]) ? $_GET[$name] : "";
    }
}


?>

- Je kunt bij het definieren van een route aangeven of deze werkt op alle methods, of alleen post of get methods.
- Je geeft bij de route de bestandsnaam (of pad naar een bestand), de route is daar onafhankelijk van

Graag hoor ik commentaar, en dat zal vast wel veel zijn. Want ik weet dat deze code niet perfect is. Toch wilde ik het laten zien.
Gewijzigd op 16/12/2013 20:51:40 door Mark Hogeveen
 
Frank Nietbelangrijk

Frank Nietbelangrijk

16/12/2013 23:34:01
Quote Anchor link
je kan nog een stapje verder gaan met variabele routes zoals die ook in dit forum gebruikt worden:

http://www.phphulp.nl/php/forum/topic/mvc-routing/93198

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
<?php
$router
->add(array("route" => "forum/topic/:slug/:id", "destination" => "forum-showtopic.php", "methods" => array("all")));

// de controller
class ShowtopicController extends BaseController
{
    public function indexAction($slug, $id)
    {

        // test
        echo 'slug: ' . $slug . '<br>';
        echo 'id: ' . $id . '<br>';
    }
}

?>
Gewijzigd op 16/12/2013 23:47:01 door Frank Nietbelangrijk
 
Ozzie PHP

Ozzie PHP

17/12/2013 00:07:18
Quote Anchor link
@Frank, wat wordt bedoeld met "slug" en wat houdt methods "all" in?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

17/12/2013 00:38:38
Quote Anchor link
Ozzie een slug is een gedeelte van je url: bijvoorbeeld: hoe-kan-ik-grote-bestanden-uploaden

En je tweede vraag zou je aan Harry moeten vragen maar ik dacht dat het voor GET & POST staat.
 
Ozzie PHP

Ozzie PHP

17/12/2013 01:38:58
Quote Anchor link
>> Ozzie een slug is een gedeelte van je url: bijvoorbeeld: hoe-kan-ik-grote-bestanden-uploaden

Wat is dan de bedoeling van een slug? Geef je daar eigenlijk de action mee aan? Ik dacht dat wat jij een slug noemt gewoon bij de route hoort. Dus zeg maar zoiets:

route = "forum/topic/hoe-kan-ik-grote-bestanden-uploaden/:id"

Of... wacht even.. bedoel je dat het de (variabele) titel van een topic is? En zo ja, waarom dan niet:

route = "forum/topic/:title/:id"

>> En je tweede vraag zou je aan Harry moeten vragen maar ik dacht dat het voor GET & POST staat.

oké
 
Wouter J

Wouter J

17/12/2013 08:04:04
Quote Anchor link
>> Of... wacht even.. bedoel je dat het de (variabele) titel van een topic is? En zo ja, waarom dan niet:

Omdat we dat nou eenmaal de slug noemen. Dat komt omdat het niet de titel is, je hebt spaties vervangen met dashes, alles gelowercased en url-unsafe-characters eruit gehaald. Dat noemen we een slugified title, afgekort een slug.
 
Ozzie PHP

Ozzie PHP

17/12/2013 15:04:58
Quote Anchor link
Dankjewel voor je toelichting Wouter... maar stel nu dat het iemands username is, dus

forum/user/wouterj/123

Is "wouterj" dan ook een "slug"?

Wat versta je precies onder een slug? En is iedere variabele die in de url staat en niet een id is automatisch een slug?
 
Mark Hogeveen

Mark Hogeveen

17/12/2013 15:31:04
Quote Anchor link
Bij de methods staat "all" inderdaad voor POST, GET, maar ook voor PUSH of PULL.
Maar ik had verwacht dat mijn code eigenlijk een rommeltje was?

De Request class stelt eigenlijk niks voor. Ik zou niet weten wat ik er mee moet.
 
Wouter J

Wouter J

17/12/2013 17:05:47
Quote Anchor link
Ja, je code is een rommeltje. Maar als ik heel eerlijk ben had ik geen zin om weer met een nieuw persoon het process van een framework te doorlopen... Het zelf maken van een framework heb ik nog nooit begrepen, je komt dan alleen maar met meer vragen te zitten. Het gebruiken van een bekent framework zorgt ervoor dat je al 1001 voorbeelden en best-practises op het internet kunt vinden, daardoor leer je het een stuk gemakkelijker.

Maar ja, omdat je het anders zielig is dat je het verkeerde aanleerd :)
- Routes zijn ook objecten, een Route object dus.
- Het matchen van een URL zou je moeten overlaten aan het Route object, dat is degene die weet wat er in het Route object staat, de Router mag daar niks van weten. Als je het heel strict bekijkt ga je nog een stap verder en zeg je dat je niet wilt beperken op URLs, dan maak je nog een UrlMatcher klasse die het matchen regelt.
- Kijk eens naar php namespaces en autoloading
- De router is alleen voor het vinden van een route, het bepalen wat de not found route is en het bepalen wat de destination is is niet het doel van de Router.
- niet elke variabele die je in je klasse gebruikt is een property van die klasse. Slechts een paar zijn er een property.
- "$this->_destination = "welcome.php"; // Startpagina, normaal index.php" bepaal niks in de klasse zelf. Als je nu welcome.php aanpast moet je je klasse aanpassen, en klassen aanpassen voor zulke dingen is verboden. Je startpagina is gewoon een route zoals elke andere.
- Je gebruikt een hele vreemde manier wat betreft het laden van een controller. Wat doe je precies in een controller, ik heb niet het idee dat je daar iets van begrepen hebt (sorry).
- Je Request klasse is erg gelimiteerd. Het is nu gebonden aan: Het gebruik van superglobals. (gebruik nooit superglobals in een klasse!) Tevens is getArgument nu gebonden aan het gebruik van $_GET. Ik zou altijd werken met $_SERVER['PATH_INFO']
 
Mark Hogeveen

Mark Hogeveen

17/12/2013 17:45:53
Quote Anchor link
Ik heb inderdaad toch maar naar wat frameworks gekeken. (op github kun je de hele codes doorspitten)
Wat ik eigenlijk wel begrijp, maar niet het voordeel van inzie is het volgende:
Een simpele doorsnee route ziet er zo uit: /controller/action/paramaters
Het is dan de bedoeling dat de gevraagde controller wordt aangeroepen, en dat een methode van die controller wordt aangeroepen, die ook in de route staat.
controller/action/parameters =
album/bekijk_foto/1042 =
AlbumController/view/1042 zegt eigenlijk:

$AlbumController->view(1042);

- Wat als je meerdere controllers nodig hebt?
- Wat als je meerdere parameters hebt?

- Hoe doet mod_rewrite de GET variabelen normaal doorgeven? Daarmee bedoel ik: ?action=activate&user=123
Die zou kunnen worden herschreven naar /activate/123 of niet?
De namen van de parameters zijn weg! Hoe doe ik nou in mij PHP aangeven welke parameter ik wil? ($_GET['action'] kan toch niet meer? naam is weg)
Gewijzigd op 17/12/2013 17:47:14 door Mark Hogeveen
 
Dos Moonen

Dos Moonen

17/12/2013 19:50:45
Quote Anchor link
Het hangt er vanaf hoe geavanceerd je routes zijn. Kijk eens op http://kohanaframework.org/3.3/guide/kohana/routing#request-parameters om te zien hoe Kohana het beschikbaar stelt.
 

Pagina: « vorige 1 2



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.