request class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Front-end Developer

Gezellige team, passie en een groene toekomst! Lees hier de vacature van Front-end Developer bij All in Power! All in power heeft zich tot doel gesteld écht bij te dragen aan de energietransitie. Dit doen wij door de markt voor energie volledig op zijn kop te zetten. Producenten van schone (wind- of zonne-)energie verkopen via ons platform hun energie rechtstreeks aan gebruikers. Of dit nu huishoudens, bedrijven of bijvoorbeeld laadpalen zijn ons platform maakt het uitwisselen van energie mogelijk. Zo maken we de business case van onze klanten veel sterker en loont het om (meer) te investeren in vergroening voor

Bekijk vacature »

Lead Java Developer

Dit ga je doen Je taken bestaan onder andere uit: Het aansturen van een development team bestaande uit 8 collega's op technisch maar ook HR gebied; Het maken van strategische keuzes omtrent de (nieuw)bouw van deze applicatie; Het maken van technische ontwerpen; Hands-on mee ontwikkelen met het team (met o.a. Java, Spring, Angular, REST); Reviewen van code en feedback geven op collega developers. Hier ga je werken Als Lead Software Developer ben je verantwoordelijk voor één van de vier Agile Java ontwikkelteams die bouwen aan technologie die duizenden instanties wereldwijd verbindt. Dit Agile team, data Jira en Confluence gebruikt en

Bekijk vacature »

Ervaren Full-Stack PHP Developer

Functieomschrijving Gezocht! Ervaren PHP Developer! Voor een organisatie in de regio Harderwijk zoeken wij een ervaren PHP Developer die het IT team van dit bedrijf gaat versterken. We zijn op zoek naar een enthousiaste en breed georiënteerde IT-er die het innovatieve bedrijf nog een stap verder kan brengen. Voor deze functie zoeken wij iemand die communicatief goed is en die zelfstandig problemen op kan lossen. Je werkt samen met een externe ontwikkelpartij en kunt hun dus uitdagen op het geleverde werk. Het schrijven van concepten aan de AI en hardware kant valt onder je verantwoordelijkheden. Het bedrijf noemt zichzelf een

Bekijk vacature »

Database Developer

Functieomschrijving Heb jij ongeveer 3 jaar ervaring als Database Developer met MS SQL of een vergelijkbare database? Wil jij werken voor een gewaardeerde werkgever in regio Tilburg waar jij de tijd en ruimte krijgt jezelf te ontwikkelen? Lees dan snel verder! Hoe ziet jouw takenpakket eruit? Je houdt je bezig met het creëren en bouwen van MS SQL server databases; Je gaat projecten vanaf het begin tot het eind begeleiden. Je sluit aan bij meetings met klanten om hun processen in kaart te brengen. Vervolgens voer jij het project uit en zorgt dat dit zo goed mogelijk verloopt; Je werkt

Bekijk vacature »

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 »

Software Developer

Functie omschrijving Veel begeleiding en de kans om je verder te ontwikkelen als software developer. Dat kunnen wij jou bieden bij deelname aan deze leuke traineeship. Je krijgt een mentor toegewezen die jou alle kneepjes van het vak leert. Heb jij al wat ervaring als software developer? Daar worden wij heel blij van! Lees snel verder! Bedrijfsprofiel Als software developer neem je deel aan een trainings programma in de omgeving van Haarlem waar je persoonlijk wordt begeleidt, zodat je alle kneepjes van het vak leert. Aan de hand van jouw kennis en ervaring krijg je een persoonlijk opleidingstraject. Je gaat

Bekijk vacature »

Java Developer

Dit ga je doen Als Java Developer ben je verantwoordelijk voor: Het ontwikkelen van nieuwe en bestaande webservices; Het uitbreiden van functionaliteiten binnen de producten- en dienstenportefeuille; Het werken aan gegevensuitwisseling met bijvoorbeeld SOAP; Testen van frameworks met gebruik van UNIT en Selenium. Hier ga je werken De organisatie waar je komt te werken is een semi-overheidsinstelling, gesitueerd in Utrecht en zorgt voor een goede samenwerking tussen verschillende overheidsinstanties. Het is een familiaire club die gaat voor kwaliteit en langdurige relaties. Zo zorgen zij ervoor dat er op grote schaal vertrouwelijke informatie tussen verschillende overheidsinstellingen wordt uitgewisseld. Hun werk zorgt

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 »

Laravel / PHP developer gezocht!

Functie omschrijving Wij zijn op zoek naar een Laravel PHP Developer voor een leuk bedrijf in de omgeving van Amsterdam! Je zult je bezig houden met de volgende werkzaamheden: Je gaat aan de hand van de wensen van klanten software ontwikkelen; Je bent bij het gehele proces betrokken; van A tot Z; Je hebt na de oplevering contact met de klant wanneer zij problemen ervaren; Je denkt mee over het verbeteren van de werkprocessen; Je denkt mee over softwareoplossingen; Je speelt in op de behoefte van de klant; Je houdt je bezig met het verbeteren, aanpassen en vernieuwen van de

Bekijk vacature »

Database Developer

Functieomschrijving Heb jij ongeveer 3 jaar ervaring als Database Developer met MS SQL of een vergelijkbare database? Wil jij werken voor een ambitieuze werkgever in regio Tilburg waar jij volledig de mogelijkheid krijgt jezelf te ontwikkelen? Lees dan snel verder! Hoe ziet jouw takenpakket eruit? Je gaat projecten gedurende het hele proces begeleiden. Je sluit aan bij afspraken met klanten om hun processen helder te krijgen. Vervolgens voer jij het project uit en zorgt dat dit zo goed mogelijk verloopt; Je werkt aan nieuwe softwareoplossingen die de logistieke processen verbeteren of vernieuwen; Je houdt je bezig met het ontwikkelen van

Bekijk vacature »

Software Developer (Junior functie)

Functieomschrijving Wij zijn op zoek naar een Software Developer! Sta jij in de startblokken om je carrière te beginnen en kan je niet wachten om toffe software te gaan ontwikkelen? Kortom, ben je onlangs afgestudeerd of sta je op het punt om je papiertje te behalen? Voor een IT dienstverlener dat gespecialiseerd is in Microsoft technologie zijn wij op zoek naar C#.NET Developers. Het bedrijf heeft meerdere klanten in regio Utrecht waar je permanent kan komen te werken. Kom je liever te werken bij een klein softwarebedrijf of bij een groot consultancy bureau? Dat is helemaal aan jou de keuze!

Bekijk vacature »

.NET developer

Functie Jij begint als .NET ontwikkelaar in een team met 10 andere Software Engineers. De werkzaamheden zijn afwisselend, zo kan het dat jij bezig bent met volledig nieuwe features of het door ontwikkelen van bestaande sites of shops. Wij ontwikkelen web applicaties, maar ook mobiele applicaties. Daarnaast bijt jij je soms ook van in externe koppelingen met systemen zoals een ERP. Als team is er een duidelijke focus m.b.t. het waarborgen van de performance en snelheid van webshops. Ook zijn wij expert op het gebied van configuratoren. Kortom enorm veel afwisselende werkzaamheden! Ook jouw werkplek kan afwisselend zijn. Soms heb

Bekijk vacature »

Database Developer

Functieomschrijving Heb jij ongeveer 3 jaar ervaring als Database Developer met MS SQL of een vergelijkbare database? Wil jij werken voor een ambitieuze werkgever in regio Tilburg waar jij volledig de mogelijkheid krijgt jezelf te ontwikkelen? Lees dan snel verder! Hoe ziet jouw takenpakket eruit? Je gaat projecten gedurende het hele proces begeleiden. Je sluit aan bij afspraken met klanten om hun processen helder te krijgen. Vervolgens voer jij het project uit en zorgt dat dit zo goed mogelijk verloopt; Je werkt aan nieuwe softwareoplossingen die de logistieke processen verbeteren of vernieuwen; Je houdt je bezig met het ontwikkelen van

Bekijk vacature »

SAP Integratie Ontwikkelaar

Ben jij ambitieus in de verdere ontwikkeling van SAP binnen HANOS, en heb je kennis van SAP PI, CPI (SAP integration suite) en of andere middleware tooling? Dan ben jij mogelijk onze nieuwe SAP Integratie (middleware) Ontwikkelaar! Lees snel verder en solliciteer! Wat ga je doen? Als SAP Financieel Consultant ben je, als deel van een gedreven team van interne SAP consultants, de schakel tussen de gebruikersorganisatie en ICT. Je draagt proactief bij aan een optimale aansluiting van de SAP-functionaliteit (een applicatielandschap met o.a. Suite on HANA, Fiori, Hybris, C4C en BO), op de bedrijfsprocessen. Verder ondersteun je de HANOS

Bekijk vacature »

PHP Software Developer

Functie omschrijving PHP Software Developer gezocht! Voor een organisatie in de regio Zeist die zich bezighoud met het verbeteren van de medicatieveiligheid zoeken wij een Software Developer. In deze functie zijn wij op zoek naar een slimme en enthousiaste Developer die interesse heeft in farmacie, logistiek en ICT. Daarnaast beschik je over een goed analytisch vermogen en ben je van nature gestructureerd en resultaatgericht. Je moet in deze functie daadkrachtig, flexibel en communicatief goed zijn. Je verantwoordelijkheden bestaan uit: Object georiënteerd programmeren; Werken in een scrumteam aan de ontwikkeling van een medicatiebewakingssysteem; Meedenken over de mogelijkheden en onmogelijkheden van projecten;

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

27/11/2024 19:26:50
 
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.