request class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

SAP ABAP Developer

Dit ga je doen Software ontwikkeling met behulp van o.a. ABAP, Sapscript en Smartforms Maatwerk development op SAP ECC 6.0, in de toekomst S/4 HANA Samenwerken met Business Analisten die functioneel en technisch ontwerpen aanleveren Testen van opgeleverde software Bugfixing Ondersteuning van eindgebruikers Hier ga je werken Onze klant, een internationaal gevestigd productiebedrijf dat mensen blij maakt, is ter versterking op zoek naar een ABAP Developer voor hun SAP team. Het team van 4 mensen verzorgt de ontwikkeling van maatwerk voor de SAP omgeving waar wordt gewerkt met modules SD, FI/CO, PM en MM. Momenteel draait het bedrijf op SAP

Bekijk vacature »

Front-end developer E-Commere

Functie E-commerce is een ‘’snelle’’ wereld. Om hierin continu voorop te blijven omarmen ze in een vroeg stadium nieuwe technieken. Een webshop is nooit af en kan altijd beter, sneller en efficiënter. Tegelijkertijd hebben ze vanaf hun oprichting altijd vastgehouden aan kwaliteit boven snelheid, en dit loont. Als front-end developer heb je een adviserende rol en sta je aan het eindpunt van alles wat met designs te maken heeft. Je overlegt met klanten en collega’s, en zet je in om ideeen om te zetten tot unieke concepten. Je bent het aanspreekpunt voor de klant en bewaakt tevens de planning. Eisen

Bekijk vacature »

Klein team zoekt grote fullstack .NET developer to

Bedrijfsomschrijving Deze werkgever is marktleider in de Benelux en is Europees ook al aardig aan de weg aan het timmeren. Ze voorzien technische winkels van apparatuur om producten een langer leven te geven. Hiermee reduceren ze flink wat CO2 uitstoot en dat is natuurlijk goed voor iedereen! IT speelt een belangrijke rol in de bedrijfsvoering en de applicaties zijn van goed niveau. Als fullstack .NET developer ga jij je bijdrage leveren aan het verder verbeteren van de applicaties en de interne processen. Ze zijn nu met ruim 50 medewerkers in totaal en de afdeling development bestaat uit een 5tal developers.

Bekijk vacature »

C# .NET Developer

Functie omschrijving Wij zijn op zoek naar een C# .NET Developer voor een leuke opdrachtgever in de omgeving van Hilversum! Voor een leuk bedrijf in de omgeving van Hilversum zijn wij op zoek naar een Back-end developer die klaar is voor een nieuwe uitdaging. Ben jij iemand die graag aan verschillende projecten werkt en het ook leuk vindt om bij klanten op bezoek te gaan? Dan ben jij de perfecte kandidaat! Deze functie is erg divers, je moet dus goed kunnen schakelen. Je komt te werken in een klein team van developers. Binnen het bedrijf hangt er een gemoedelijke informele

Bekijk vacature »

Ervaren C#.NET developer

Functieomschrijving We zijn op zoek naar een ervaren C#.NET programmeur voor een moderne werkgever in de regio Prinsenbeek. Als programmeur zal je bezig zijn met het ontwikkelen van op maat gemaakte webapplicaties voor verschillende klanten, waarbij je ervoor zorgt dat complexe processen zo goed mogelijk worden ondersteund. Je takenpakket omvat onder andere: Werken met databases en dataopslagoplossingen, implementeren van beveiligingsoplossingen en het waarborgen van de beveiliging van applicaties en gegevens, evenals het schrijven van technische documentatie en gebruikershandleidingen. Het ontwikkelen en onderhouden van C#.NET-applicaties. Bijdragen aan het ontwerp en de architectuur van softwaretoepassingen. Het schrijven van hoogwaardige en herbruikbare codes.

Bekijk vacature »

Applicatie ontwikkelaar

Functie omschrijving Zelfstandige applicatie ontwikkelaar gezocht voor familiair bedrijf in omgeving Capelle ad Ijssel 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! Een deel van jouw werkzaamheden: Onderhouden en ontwikkelen van de IT systemen; Opzetten van Azure Cloud systemen, denk aan interfaces, hardware op de Cloud, webportalen of BI functies; Werken aan scripts binnen verschillende software applicaties, denk aan ERP en CAD; Ontwikkelen en implementeren van MS PowerApps en Power BI.

Bekijk vacature »

Softwareontwikkelaar Cleopatra

Functieomschrijving: De directie Verkeer en Openbare ruimte van de gemeente Amsterdam beschikt over een softwareapplicatie, "Cleopatra", waarmee geautomatiseerde handhaving plaatsvindt (op basis van kentekenherkenning) van bepaalde gebieden waarin toegangseisen worden gesteld aan het verkeer. Voorbeelden ervan zijn de milieuzones, de zone zwaar verkeer, handhaving van bromen snorfietser op het fietspad en autoluwe gebieden. Voor de doorontwikkeling en uitbreiding ervan zijn gespecialiseerde softwareontwikkelaars nodig die helpen bij het programmeren van de handhavingsmodules voor nieuwe gebieden en het verbeteren en bijwerken van de bestaande onderdelen van de softwareapplicatie.De opdracht bestaat uit: het programmeren van de diverse modules;het tijdens demo's tonen van de

Bekijk vacature »

.NET developer

Functie Als .NET developer werk jij samen in een multidisciplinair ontwikkel team met 1-2 Senior .NET developers, twee front-end developers, Data Scientists en één UX designer. Als team werken jullie aan het ontwikkelen van een Cloud based applicatie en aan het stabieler maken van deze applicatie. Ook unit testing gaat erg belangrijk worden in jouw nieuwe functie. Samen met de Senior .NET ontwikkelaar wordt jij verantwoordelijk voor het ontwikkelen van de API. Jullie werken met veel data en incidenteel komen er ook data vraagstukken en zullen er wat queries gedraaid moeten worden. Dit betekend dat jij veel gaat werken met

Bekijk vacature »

Software developer (PHP) - Utrecht centrum

Functie Ieder onderdeel van de software draait op aparte servers en het bestaat dus echt uit verschillende componenten. Het team bestaat uit 4 developers, een klein team dus met korte lijnen. Alles in intern ontwikkeld en je werkt aan alle facetten. Van uitbreiding van de core tot maatwerk voor de klant. Ook liggen er verschillende uitdagingen op servervlak en databases. Je zult de eerste periode veel samenwerken met de lead developer om vervolgens echt je gang te gaan binnen de software. In het team streven ze naast de hoogst haalbare kwaliteit. Hiervoor werken ze nauw met elkaar samen en levert

Bekijk vacature »

PHP Developer

Functieomschrijving Vanuit het hoofdkantoor in de regio van Bergen op Zoom ben je als PHP Developer niet alleen gefocust op het ontwikkelen van Software. Daarnaast ben je ook voortdurend bezig met het zoeken naar nieuwe mogelijkheden en innovaties die essentieel kunnen zijn voor de efficiëntie van software ontwikkeling. Je deelt veel kennis en informatie met het team en ontvangt deze dan ook graag terug. Techstack: PHP, Symfony & mySQL. Bedrijfsprofiel Deze uitdagende opdrachtgever is ruim 20 jaar actief in de regio Bergen op Zoom. Het vooruitstrevende team staat de hele dag voor je klaar om je te helpen en ondersteunen.

Bekijk vacature »

C#.NET developer

Functie Het development team bestaat momenteel uit vijf backend C#/.NET ontwikkelaars. Op dit moment zit één ontwikkelaar dedicated op de mobiele applicatie. Als team werk je samen aan het zelf ontwikkelde software platform. Dit bestaat uit zowel apps als websites. Om het systeem door meer dan honderdduizenden gebruikers wordt gebruikt is het bijna vanzelfsprekend dat de kwaliteit van het product hoog moet liggen. Het systeem bestaat uit drie projecten. Je werkt dus aan deze drie projecten waarbij de focus op z’n tijd verschuift. De technieken die worden toegepast zijn o.a. .NET Core, Xamarin, C# en MVC. Je zal dus met

Bekijk vacature »

PHP back-end developer gezocht!

Functie Werk je liever zonder druk en keiharde deadlines maar met de focus op kwaliteit? Dan kom je hier op de juiste plek terecht! In Het team bestaat momenteel uit 12 developers, hiernaast werken er collega’s van front-end, UX maar ook marketing/sales en support. In iedere sprint ontwikkel je samen functionaliteiten met als uitdaging om de klanten de beste gebruikerservaring te bieden. Ze bieden een werkplek waar je jezelf kunt blijven ontwikkelen, en mee te werken aan zowel bestaande als nieuwe mogelijkheden. Eisen • HBO werk- en denkniveau (ze kijken niet naar een papiertje) • Je denkt graag mee over

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 »

Typescript Developer / Cloud platform

Dit ga je doen (Door)Ontwikkelen van het cloud platform; (Door)Ontwikkelen van microservices; Bouwen van nieuwe functionaliteiten; Verbeteringen aandragen voor het cloud platform; Sparren met de business. Hier ga je werken Onze opdrachtgever, gevestigd in regio Eindhoven, levert een compleet dienstenpakket op het gebied van IT. Zij pakken verschillende (complexe) vraagstukken van grote organisaties op. De sfeer intern is gezellig en informeel. Men houdt van hard werken maar gezelligheid door middel van een borrel of gezamenlijke lunch komt er veel voor. Als Typescript ontwikkelaar word je onderdeel van het team gericht op de (door)ontwikkeling van hun eigen cloud platform welke wordt

Bekijk vacature »

C++ Ontwikkelaar

Functieomschrijving Ben jij als software ontwikkelaar toe aan een nieuwe uitdaging? Dan zoeken wij jou! Voor het maken van de procesbesturingssoftware gebruiken onze projectteams een in C++ en C# geschreven tool. Dit is een gedistribueerd object framework wat alle kernfuncties biedt voor een procesautomatisering. Verder zullen jouw werkzaamheden o.a. bestaan uit: Ontwerpen, programmeren en testen van product aanpassingen; Analyseren van vragen en wensen van gebruikers en deze vertalen naar een functioneel ontwerp; Inzichtelijk maken van voortgang omtrent softwarewerkzaamheden, o.a. door middel van SCRUM; Continu toetsen van het effect van nieuwe releases op andere tools en processen; Implementeren van nieuwe product

Bekijk vacature »

Pagina: « vorige 1 2 3 4 5 volgende »

Ozzie PHP

Ozzie PHP

04/01/2013 00:42:30
Quote Anchor link
Precies... maar het includen van een bestand is dan toch geen request?
 
PHP hulp

PHP hulp

08/05/2024 02:32:01
 
Eddy E

Eddy E

04/01/2013 08:47:52
Quote Anchor link
Het is maar net wat je onder een 'request' verstaat.
Als je een HTTP-request bedoeld (dus aantal bestanden downloaden voor bekijken website): nee.
Als je het als interne PHP-aanroep ziet wel.
 
Wouter J

Wouter J

04/01/2013 10:07:44
Quote Anchor link
Ozzie, het is niet het includen van een bestand het is het aanroepen van een compleet nieuwe controller...
 
Ozzie PHP

Ozzie PHP

04/01/2013 13:44:50
Quote Anchor link
"Ozzie, het is niet het includen van een bestand het is het aanroepen van een compleet nieuwe controller..."

Ja, snap ik... maar in jouw voorbeeld heeft dat toch geen toegevoegde waarde (omdat de action in dezelfde class staat)?

Ik bedoel met een request een http-request, ofwel een pagina-aanroep. Jij verstaat onder een request ook een interne (controller/method) aanroep. Daar zit 'm het verschil. Een request zoals ik het bedoel, daarvan kun je er maar een per pagina-aanroep hebben.
 
Wouter J

Wouter J

04/01/2013 13:51:49
Quote Anchor link
Om weer wat dichter bij elkaar te komen: Als jij het idee van een static en singleton class achterwege laat ben ik al tevreden, dan kun je later altijd nog van mening veranderen over wat wel en niet een request is.

Om meteen weer een ander onderwerp erin te gooien: Je moet nooit super globals gebruiken in je klasse. Wat je nu hebt is dus naar mijn mening fout. Gebruik de server array bij het aanmaken van de request klasse, niet in de request klasse.

Om het aanmaken van een request object dan wat te versimpelen zou je een factory kunnen maken, zie bijv. de symfony request klasse en zijn Request::createFromGlobals method.
 
Ozzie PHP

Ozzie PHP

04/01/2013 14:03:36
Quote Anchor link
Wouter, thanks voor je reactie. Waarom zou je een superglobal niet rechtstreeks in je class gebruiken?

Zou het dan bijv. beter zijn als ik in de construct van de request class zou zetten:

$this->server = $_SERVER;

en vervolgens overal die $this->server gebruiken?

Ik wil het allemaal ook niet te moeilijk maken, en vooral zo effectief mogelijk programmeren. Anders ben ik over 2 jaar nog bezig. Het gaat er mij vooral om dat de code logisch in elkaar zit en er geen "gevaar" in de code schuilt waardoor ik gehackt zou kunnen worden. Dat vind ik het meest belangrijk. De code moet voor mij vooral goed zijn, maar hoeft niet per se "mooi" te zijn. Vergelijk het met een auto. Je hebt hele mooie dure auto's die er supergelikt uitzien en waarbij ieder detail op de juiste plek zit. Zo hoeft mijn framework niet te zijn. Ik heb liever een goede middenklasser die me veilig van A naar B brengt. Mja, rare vergelijking, maar ik hoop dat je begrijpt wat ik bedoel.
 
Wouter J

Wouter J

04/01/2013 14:11:56
Quote Anchor link
Ja, alleen gebruik geen anti-patterns dat is het belangrijkste wat ik aan je wil meegeven.

Ozzie, omdat je dan als klasse dingen gaat gebruiken uit de buitenwereld, dat is ten strengste verboden. Iets in de constructor zetten is alsnog de server super global gebruiken. De basis is:
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
<?php
class
class Request
{
    /**
     * @var array (of ParameterBag als je dat gebruikt)
     */

    private $server;

    /**
     * @param array $server The server details
     */

    public function __construct($server, ...)
    {

        $this->setServer($server);
    }


    /**
     * @return array // wordt dan ParameterBag als je dat gebruikt
     */

    public function getServer()
    {

        return $this->server;
    }


    private function setServer(array $server)
    {

        $this->server = $server; // eventueel een ParameterBag maken
    }
}


$request = new Request($_SERVER, ...);

// of, om het makkelijker te maken en niet telkens elke superglobal te moeten inserten
$request = Request::createFromGlobals();

class Request
{
    // ...

    public static createFromGlobals()
    {

        return new static($_SERVER);
    }
}

?>
 
Ozzie PHP

Ozzie PHP

04/01/2013 14:16:28
Quote Anchor link
Wouter, deze methode zie ik niet zitten, want dan moet ik telkens alles meegeven. Dat lijkt me niet gewenst:

$request = new Request($_SERVER, ...);

Ik snap alleen niet wat dit doet:

return new static($_SERVER);

??
 
Wouter J

Wouter J

04/01/2013 14:19:05
Quote Anchor link
Ozzie, als het goed is gebeurd het maar 2 keer ((1) bij de code voor het aanmaken van de request en (2) bij de code voor het aanmaken van een subrequest). En daarom gaf ik ook de 2e optie, daar doe je Request::createFromGlobals en je hebt een nieuwe request.

Quote:
Ik snap alleen niet wat dit doet:

return new static($_SERVER);

Die createFromGlobals method is een factory method, hij maakt het object aan en geeft hem terug. In dit geval maken we het object aan met de parameter $_SERVER, later krijg je nog meer parameters (alle $_* arrays).

Static verwijst naar de klasse waarin de static method leeft.
 
Ozzie PHP

Ozzie PHP

04/01/2013 14:26:56
Quote Anchor link
Wouter, thanks voor de uitleg maar ik snap het nog steeds niet helemaal. De 2e optie lijkt me sowieso handiger...

Ik zou dus op deze manier mijn request moeten ophalen...

$request = Request::createFromGlobals();

En in die functie staat dan bijvoorbeeld...

return new static($_SERVER, $_POST);

1) Wat zit er nu in de variabele $request?

2) Nu wil ik uit de server array de variabele HTTP_HOST hebben. Hoe doe ik dit dan?

Wat ik vooral niet snap is wat dit doet "return new static($_SERVER, $_POST)" en wat ik daar vervolgens mee moet doen.
 
Wouter J

Wouter J

04/01/2013 14:31:02
Quote Anchor link
Oké, we splitsen de hele regel op:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
return    Return het geen hierachter staat
new       maak een nieuw object aan
static    static verwijst naar het object waar we inzitten, Request in dit
          geval. Maak dus een nieuw request object aan
(         het begin van de parameters
$_SERVER, eerste parameter is de $_SERVER super global
$_POST    2e parameter is de $_POST super global
)         sluit de parameters
;         sluit de regel


Quote:
1) Wat zit er nu in de variabele $request?

Hetgeen geretourneerd wordt door Request::createFromGlobals(), een nieuwe request object dus, opgemaakt uit de super globals.

Quote:
2) Nu wil ik uit de server array de variabele HTTP_HOST hebben. Hoe doe ik dit dan?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$request
= Request::createFromGlobals();

echo ($request->getServer())['HTTP_HOST'];
?>


Of als je een ParameterBag gebruikt, wat ik mooier vind:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
// ...
echo $request->server->get('HTTP_HOST');
?>
 
Ozzie PHP

Ozzie PHP

04/01/2013 14:43:43
Quote Anchor link
Aha... er begint een lichtje te branden nu :-)

Oké.. weer een paar vragen...

1) Wat is nu precies het verschil van deze manier met "mijn" manier? En dan bedoel ik wat het verschil is met $_SERVER meegeven en $_SERVER rechtstreeks gebruiken. Is het op jouw manier zo dat de class property $server wel de inhoud van $_SERVER bevat, maar niet daadwerkelijk de $_SERVER array is? Je spreekt dus niet rechtstreeks de $_SERVER array aan? Klopt dit zoals ik het nu uitleg?

2) ($request->getServer())['HTTP_HOST'] Is dit PHP 5.4 schrijfwijze, waarbij je de key 'HTTP_HOST' ui de array opvraagt? Werkt het ook zonder haken, dus zo $request->getServer()['HTTP_HOST']. Ik zou het overigens dan liever zo doen: $request->getServer('HTTP_HOST'). Of gewoon $request->getHttpHost();

3) Dat ziet er mooi uit, maar hoe krijg je dat voor elkaar? ParameterBag zegt me (nog) niks.

Thanks alvast voor de antwoorden!
 
No One

No One

04/01/2013 15:01:00
Quote Anchor link
@Ozzie

vraag 2...nee dat is een algemene schrijfwijze..en zonder die haakjes gaat waarschijnlijk niet, omdat hij eerst de variabele moet returnen en dan pas de value van die key uit lezen..

vraag 3. heel simpel...impv een array retourneer je een object waar de $_SERVER variabele ingestopt is die heeft dan getters en setters.
 
Wouter J

Wouter J

04/01/2013 15:11:58
Quote Anchor link
1) Dat klopt, $server is een copy van $_SERVER. Dit betekend dat je $server kan aanpassen zonder $_SERVER aan te passen en dat de klasse dus niks weet van $_SERVER. Dit kan handig zijn in tests, waar je geen toegang hebt tot $_SERVER globals en dus gewoon een array met wat keys meegeeft.

2) Dat is inderdaad de PHP5.4 schrijfwijze waarbij je meteen een key van de array kunt ophalen zonder hem eerst in een variabele op te slaan. Dit werkt niet zonder haken.
$request->getServer('HTTP_HOST') ziet er leuk uit, maar ik zou dan de methodnaam veranderen naar getServerParameter en dan ga je eigenlijk al teveel weten in de Request klasse over die server parameter. De laatste methode ($request->getHttpHost()) is natuurlijk helemaal niet goed omdat HttpHost helemaal geen eigenschap (property) van Request is.

3) Een ParameterBag is gewoon een klasse. Voorbeeldje:
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php

class ParameterBag extends \IteratorAggregate,
{

    /**
     * @var array
     */

    private $parameters;

    private $froozen = false;

    /**
     * @param array $parameters
     */

    public function __construct($parameters = array())
    {

        $this->setParameters($parameters);
    }


    public function set($id, $value)
    {

        if ($this->isFroozen()) {
            throw new \OverflowException('You cannot change a froozen parameterbag');
        }


        $this->parameters[$id] = $value;
    }


    public function get($id)
    {

        if (!$this->has($id)) {
            throw new \OutOfBoundsException(sprintf('The parameter "%s" is not found', $id));
        }


        return $this->parameters[$id];
    }


    public function has($id)
    {

        return array_key_exists($id, $this->getParameters());
    }


    /**
     * @return array
     */

    public function getParameters()
    {

        return $this->parameters;
    }


    public function freeze()
    {

        if ($this->isFroozen()) {
            throw new \BadMethodCallException('The parameterbag is already froozen');
        }


        $this->froozen = true;
    }


    public function isFroozen()
    {

        return $this->froozen;
    }


    /**
     * {@inheritDoc}
     */

    public function getIterator()
    {

        return new \ArrayIterator($this->getParameters());
    }


    /**
     * {@inheritDoc}
     */

    public function count()
    {

        return count($this->getParameters());
    }


    private function setParameters(array $parameters)
    {

        $this->parameters = $parameters;
    }
}

?>

De request klasse ziet er dan zo uit:
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
<?php
class Request
{
    /**
     * @var ParameterBag
     */

    public $server;

    /**
     * @param array $server
     */

    public function __construct($server = array(), ...)
    {

        $this->setServer($server);
    }


    // ...

    private function setServer(array $server)
    {

        $this->server = $s = new ParameterBag($server);
        $s->freeze();
    }
}

?>


In het gebruik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$request
= new Request::createFromGlobals();

echo $request->server->get('HTTP_HOST');

$request->server->set('HTTP_HOST', 'foo'); // exception: "You cannot change a froozen parameterbag"
?>
 
Ozzie PHP

Ozzie PHP

04/01/2013 15:35:07
Quote Anchor link
:-/ Allememachies!

Ik wil het een beetje simpel houden hè Wouter :)
Nou, weer een paar vragen dan maar...

1) Eerder schreef je dit "return new static($_SERVER);". Is dat exact hetzelfde als dit "return new Request($_SERVER);"

2) In mijn huidige request class heb ik een functie die mij bijvoorbeeld het subdomein teruggeeft: $request->getSubdomain();

Hoe zou je dat dan in jouw voorbeeld implementeren? Wel gewoon in de request class een functie getSubdomain maken, maar dan in die functie gewoon de http_host opvragen via via $this->server->get('HTTP_HOST')?

3) Ik zie in het voorbeeld wat jij geeft allerlei typen Exceptions staan. Waarom gebruik je niet gewoon 1 (algemeen) type?

4) Het voorbeeld van die ParameterBag (waarom heet het zo?) komt dat uit Symfony, of is het iets wat je zelf hebt gemaakt?

5) Dit wordt een leuke... probeer mij nou eens 100% te overtuigen waarom ik van de Request class geen Singleton ga maken (het argument van Unit testing moet je even achterwege laten). Hoe ik het zie... stel ik heb straks in mijn framework op meerdere plekken het request object nodig. De gegevens uit $_SERVER, $_POST etc. zullen tijden een request niet veranderen. Stel ik heb het request op 10 plekken nodig. Als het geen Singleton is, dan moet ik 10x een object aanmaken, parameters instellen enz. Als ik een Singleton gebruik, roep ik telkens hetzelfde object aan. Ik verbruik geen extra geheugen en behaal performance winst omdat niet telkens alle parameters opnieuw hoeven te worden geset. Mij lijkt het dus (in dit specifieke geval!!!) een hele hoop voordelen bieden.
 
Wouter J

Wouter J

04/01/2013 16:02:49
Quote Anchor link
Is dit dan niet simpel (behalve misschien technieken die je onbekend voorkomen), een klasse van 90 regel en methoden van 1 tot 5 regels is nog niet zo moeilijk toch?

1) Ja, maar new static is wat dynamischer zodat als je de Request klasse gaat extenden in bijv. een JsonRequest klasse hij `return new JsonRequest($_SERVER)` doet.

2) Nee, een subdomein is geen eigenschap van de request, maar eentje van de SERVER headers. Wat je kan doen is deze als key toevoegen in de SERVER array (die in je klasse staat, niet de $_SERVER array)

3) Je moet zo precies mogelijk zijn met exceptions. Sommige wil je direct opvangen, andere laat je opborrelen tot het einde en nog andere vang je halverwege op. Tevens helpt dit je debug message, je kan dan precies zien wat er fout is gegaan aan de exception klasse en ook waar ong. (door bijv. exceptions in namespaces te zetten)

4) Het idee van ParameterBag komt uit de Symfony HttpFoundation Component (het geen waar Request en zijn factory ook vandaan komen), het idee van het bevriezen van een Registery komt uit de Symfony DependencyInjection Component. De code zelf heb ik zojuist gemaakt

5) Correct, behalve 1 heeeele grote fout en dat is dat je niet met singletons moet gaan werken om een klasse in een andere klasse te krijgen. Je moet dan werken met Dependency Injection. Je maakt 1 keer de request klasse aan, slaat die ergens op en gebruikt die telkens weer. Als we eens de Pimple Container van Fabien erbij pakken wordt het:
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
$container
= new Pimple();

$container['request.class'] = 'Request';
$container['request'] = $container->share(function ($c) {
    return $c['request.class']::createFromGlobals();
});


$container['foo.class'] = 'FooClass';
$container['foo'] = function ($c) {
    return new $c['foo.class']($c['request']); // voer het eerder aangemaakte Request object in
};

$container['bar.class'] = 'BarClass';
$container['bar'] = function ($c) {
    return new $c['bar.class']($c['request']); // we maken hem niet nogmaals aan, maar gebruiken de eerder aangemaakte Request
};
?>
 
Ozzie PHP

Ozzie PHP

04/01/2013 16:27:26
Quote Anchor link
Pfff... oké, dependency injection dus. Moet ik me daar weer even in gaan verdiepen. Het valt allemaal niet mee... thanks voor de voorbeelden. Ik ga er mee aan de slag. Eens even goed over nadenken hoe ik dit ga doen. Heb voorlopig weer wat te doen ;)

Toevoeging op 04/01/2013 16:48:19:

P.s. Is het dan wel handig om de constructor in de request class private te maken, zodat je altijd "verplicht" bent om de createfromglobals functie te gebruiken?
 
Wouter J

Wouter J

04/01/2013 17:25:48
Quote Anchor link
Quote:
Is het dan wel handig om de constructor in de request class private te maken, zodat je altijd "verplicht" bent om de createfromglobals functie te gebruiken?

Nee, want ik wil helemaal niet altijd createFromGlobals gebruiken.
 
Ozzie PHP

Ozzie PHP

04/01/2013 18:04:18
Quote Anchor link
Maar wat als ik dat nu wel wil :)))

(Wanneer zou je NIET createfromglobals willen gebruiken? Is toch makkelijker dan alles handmatig meegeven?)
 
Moose -

Moose -

04/01/2013 18:55:45
Quote Anchor link
Ozzie PHP op 04/01/2013 18:04:18:
Maar wat als ik dat nu wel wil :)))

(Wanneer zou je NIET createfromglobals willen gebruiken? Is toch makkelijker dan alles handmatig meegeven?)


Bijvoorbeeld bij het testen. Als je een GET, POST, PUT, DELETE request wil testen, is het handig dat je een setRequestMethod functie hebt
 

Pagina: « vorige 1 2 3 4 5 volgende »



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.