abonnement bol.com Unibet Coolblue
  FOK!mycroftheld maandag 13 januari 2014 @ 19:44:17 #101
128465 verified  bondage
pi_135449459
quote:
0s.gif Op maandag 13 januari 2014 19:33 schreef totalvamp het volgende:

[..]

Dit is niet de beste oplossing, je classe is een beetje ouderwets en je kunt dan beter gebruik maken van de magic get en set methoden. Dat scheelt ook gelijk in wat je moet typen.
[ code verwijderd ]

Dat had ik in de eerste instantie maar dan kun je niet bepalen wat er moet worden teruggegeven indien de var niet voorkomt in de globale request array.

Stel dat je een form hebt en je wilt vooraf ingevulde waarden hebben als er geen input van de gebruiker is doorgegeven, via de functie getRequestVar in mijn class kun je dan via de tweede param aangeven wat deze waarde moet zijn. Op jouw manier lukt dat niet, of ik moet iets over het hoofd zien. Ook kun je de functie uitbreiden met een extra param waarin je bijvoorbeeld mee kunt geven of je de waarde om wilt zetten in htmlentities, dan hoef je die functie niet los aan te roepen in je template.
pi_135449851
quote:
11s.gif Op maandag 13 januari 2014 19:44 schreef bondage het volgende:

[..]

Dat had ik in de eerste instantie maar dan kun je niet bepalen wat er moet worden teruggegeven indien de var niet voorkomt in de globale request array.

Stel dat je een form hebt en je wilt vooraf ingevulde waarden hebben als er geen input van de gebruiker is doorgegeven, via de functie getRequestVar in mijn class kun je dan via de tweede param aangeven wat deze waarde moet zijn. Op jouw manier lukt dat niet, of ik moet iets over het hoofd zien. Ook kun je de functie uitbreiden met een extra param waarin je bijvoorbeeld mee kunt geven of je de waarde om wilt zetten in htmlentities, dan hoef je die functie niet los aan te roepen in je template.
Ik begreep inderdaad dat je iets specifieks terug wilde hebben. Dat is alleen niet de taak van deze class. Je geeft alleen iets terug en in je Template class of Controller zul je daar iets mee moeten doen.

Bijvoorbeeld:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$t 
= new Template('test');
$r = new Request();
$t->replace('email'$r->email);

class 
Template {
   protected 
$html;
   public function 
replace($key$with) {
      if(
false !== $with)
        
$this->html str_replace($key$with$this->html);
      
// Hier kun je afhandelen wat je doet als het false is
   
}
}

Ik moet er wel bij zeggen dat ik mijn formulieren opbouw met classes. Elk element is een class met zijn eigen validatie en manier om standaardwaarde te zetten.

[ Bericht 1% gewijzigd door #ANONIEM op 13-01-2014 20:00:07 ]
  FOK!mycroftheld maandag 13 januari 2014 @ 20:10:32 #103
128465 verified  bondage
pi_135451162
quote:
0s.gif Op maandag 13 januari 2014 19:50 schreef totalvamp het volgende:

[..]

Ik begreep inderdaad dat je iets specifieks terug wilde hebben. Dat is alleen niet de taak van deze class. Je geeft alleen iets terug en in je Template class of Controller zul je daar iets mee moeten doen.

Bijvoorbeeld:
[ code verwijderd ]

Ik moet er wel bij zeggen dat ik mijn formulieren opbouw met classes. Elk element is een class met zijn eigen validatie en manier om standaardwaarde te zetten.
Ik ben het met je eens dat je dit soort zaken in de template zelf af hoort te handelen, echter vind ik het zelf wel handig dat de request class het in dit geval ook kan omdat je de waarden niet altijd in de template gebruikt maar misschien ook ergens anders. Je zou dit natuurlijk ook door die classes (bijv. een formulier verwerking class) laten afhandelen maar dat vond ik voor het voorbeeldje iets te diep op de stof ingaan.

Ik bouw in de meeste tools/websites die ik heb geschreven de template op als een extension op een baseclass en set dan alle vars die nodig zijn in de template. Je kunt daar dan eventueel ook standaardwaarden zetten.
pi_135452125
quote:
14s.gif Op maandag 13 januari 2014 20:10 schreef bondage het volgende:

[..]

Ik ben het met je eens dat je dit soort zaken in de template zelf af hoort te handelen, echter vind ik het zelf wel handig dat de request class het in dit geval ook kan omdat je de waarden niet altijd in de template gebruikt maar misschien ook ergens anders. Je zou dit natuurlijk ook door die classes (bijv. een formulier verwerking class) laten afhandelen maar dat vond ik voor het voorbeeldje iets te diep op de stof ingaan.

Ik bouw in de meeste tools/websites die ik heb geschreven de template op als een extension op een baseclass en set dan alle vars die nodig zijn in de template. Je kunt daar dan eventueel ook standaardwaarden zetten.
Ja misschien inderdaad te geavanceerd voor een beginner :)

Ookal gebruik je de request ergens anders, zou je eigenlijk nog steeds een false moeten teruggeven als standaard. Wat gebeurd er nu als je de request class gebruikt om een database te vullen. Dan vult hij de waardes met een string ookal bestaat de waarde niet.

Normaal heb je natuurlijk iets van validatie, maar deze stap zou je al over kunnen slaan als de waarde false is. Al heeft dit waarschijnlijk weinig nut in jouw opzet.

Ik hou zelf de regel aan dat ik of een string/array/object teruggeef of een false. En uiteindelijk in de Controller de waarschuwing ervan laat zien als dat nodig is.

Dit is even een voorbeeld hoe ik zelf een form opbouw:

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
<?php
$f 
= new System\Core\Form();
    
$f->addElement(new System\Core\Form\Element\Fieldset(
        array(
        
'name' => 'testFieldset',
        
'label' => 'Testfieldset',
        
'elements' => array(
            new 
System\Core\Form\Input\Text(array(
            
'name' => 'test',
            
'label' => 'Test field',
            
'value' => 'testvaluess',
            
'validator' => array(
                
'Length' => array('max' => 10)
            ))),
            new 
System\Core\Form\Input\Text(array(
            
'name' => 'test',
            
'label' => 'Testfield',
            
'value' => 'testvaluess',
            
'validator' => array(
                
'Length' => array('max' => 10)
            )))
        ))
    ));
    
$f->addElement(new System\Core\Form\Element\Button(
    array(
        
'name' => 'Test',
        
'value' => 'Test'
    
)
    ));
    
$f->show();
?>

De form wordt op de post pagina dan gevalideerd

[ Bericht 33% gewijzigd door #ANONIEM op 13-01-2014 20:31:33 ]
pi_135453049
quote:
0s.gif Op maandag 13 januari 2014 19:33 schreef totalvamp het volgende:

[..]

Dit is niet de beste oplossing, je classe is een beetje ouderwets en je kunt dan beter gebruik maken van de magic get en set methoden. Dat scheelt ook gelijk in wat je moet typen.
[ code verwijderd ]

Ik zou het zo maken dat de constructor een array accepteert, zodat je dezelfde class ook voor $_GET en $_POST kunt gebruiken. En zodat je de code makkelijker kunt testen. En classes waarvan de naam begint met een kleine letter c snap ik ook niet.

1
2
3
4
5
6
7
8
9
10
11
<?php
class cRequest {
    private 
$request_vars;
    
    public function 
__construct($vars $_REQUEST) {
        
$this->request_vars $vars;
    }

    
// meer functies
}
?>
pi_135453961
quote:
0s.gif Op maandag 13 januari 2014 20:43 schreef Light het volgende:

[..]

Ik zou het zo maken dat de constructor een array accepteert, zodat je dezelfde class ook voor $_GET en $_POST kunt gebruiken. En zodat je de code makkelijker kunt testen. En classes waarvan de naam begint met een kleine letter c snap ik ook niet.
[ code verwijderd ]

Wat dat betreft kun je eigenlijk ook gewoon gelijk de $_REQUEST gebruiken. Dan kun je de class als static gebruiken.
  FOK!mycroftheld maandag 13 januari 2014 @ 21:32:40 #107
128465 verified  bondage
pi_135455872
quote:
0s.gif Op maandag 13 januari 2014 20:43 schreef Light het volgende:

[..]

En classes waarvan de naam begint met een kleine letter c snap ik ook niet.
Dat is mij zo aangeleerd tijdens een cursus OOP ergens in een ver verleden, volgens mij om ervoor te zorgen dat je niet met gereserveerde namen komt te zitten. Je zou er eventueel ook iets anders voor kunnen zetten natuurlijk.
pi_135455987
quote:
11s.gif Op maandag 13 januari 2014 21:32 schreef bondage het volgende:

[..]

Dat is mij zo aangeleerd tijdens een cursus OOP ergens in een ver verleden, volgens mij om ervoor te zorgen dat je niet met gereserveerde namen komt te zitten. Je zou er eventueel ook iets anders voor kunnen zetten natuurlijk.
Tegenwoordig heeft PHP namespaces om dat soort conflicten te voorkomen.
  FOK!mycroftheld maandag 13 januari 2014 @ 21:37:36 #109
128465 verified  bondage
pi_135456168
quote:
0s.gif Op maandag 13 januari 2014 21:34 schreef Light het volgende:

[..]

Tegenwoordig heeft PHP namespaces om dat soort conflicten te voorkomen.
Je UI past goed bij deze post :+ Namespaces moet ik me toch maar eens in gaan verdiepen, werkelijk nog nooit gebruikt :@
  FOK!mycroftheld maandag 13 januari 2014 @ 21:56:44 #110
128465 verified  bondage
pi_135457399
quote:
0s.gif Op maandag 13 januari 2014 20:43 schreef Light het volgende:

[..]

Ik zou het zo maken dat de constructor een array accepteert, zodat je dezelfde class ook voor $_GET en $_POST kunt gebruiken.
Wat is trouwens je redenatie daarachter? Ik had juist voor $_REQUEST gekozen omdat deze zowel de GET als POST waarden bevat. Ik doe het eigenlijk altijd zo en ben nog nooit tegen problemen aangelopen.
  Moderator / Redactie Sport / Devops maandag 13 januari 2014 @ 22:21:01 #111
176766 crew  zoem
zoemt
pi_135459169
quote:
11s.gif Op maandag 13 januari 2014 21:32 schreef bondage het volgende:

[..]

Dat is mij zo aangeleerd tijdens een cursus OOP ergens in een ver verleden, volgens mij om ervoor te zorgen dat je niet met gereserveerde namen komt te zitten. Je zou er eventueel ook iets anders voor kunnen zetten natuurlijk.
Dat is (een variant op) de Hungarian notation en stamt uit de tijd dat data types niet snel herkend konden worden in de code. In php vind ik dergelijke type hints (want dat zijn het) overbodig, want 1) php is weak typed en 2) een goede IDE geeft ook hints. Je ziet ook dat deze notatie niet (meer) gebruikt wordt in de bekende frameworks en projecten zoals ZF, Symfony, Doctrine, Laravel en vele anderen.

Zoals Light al aangeeft heb je nu namespaces. Moderne frameworks maken daar al dankbaar gebruik van. Hiervoor zag je veelvuldig de underscore-notatie (bijv Zend_View_Helper_Abstract) om conflicten te voorkomen. In beide constructies wordt de projectnaam als primaire prefix/namespace gebruikt.
  FOK!mycroftheld maandag 13 januari 2014 @ 22:26:55 #112
128465 verified  bondage
pi_135459545
quote:
0s.gif Op maandag 13 januari 2014 22:21 schreef zoem het volgende:

[..]

Dat is (een variant op) de Hungarian notation en stamt uit de tijd dat data types niet snel herkend konden worden in de code. In php vind ik dergelijke type hints (want dat zijn het) overbodig, want 1) php is weak typed en 2) een goede IDE geeft ook hints. Je ziet ook dat deze notatie niet (meer) gebruikt wordt in de bekende frameworks en projecten zoals ZF, Symfony, Doctrine, Laravel en vele anderen.

Zoals Light al aangeeft heb je nu namespaces. Moderne frameworks maken daar al dankbaar gebruik van. Hiervoor zag je veelvuldig de underscore-notatie (bijv Zend_View_Helper_Abstract) om conflicten te voorkomen. In beide constructies wordt de projectnaam als primaire prefix/namespace gebruikt.
Ik ben al wat sites aan het doornemen over namespaces; lijkt niet heel ingewikkeld als ik het zo zie. Binnenkort zelf maar even wat mee gaan experimenteren. Je leert immers het snelst door het gewoon te doen :)
  Moderator / Redactie Sport / Devops maandag 13 januari 2014 @ 22:35:14 #113
176766 crew  zoem
zoemt
pi_135460024
quote:
5s.gif Op maandag 13 januari 2014 21:56 schreef bondage het volgende:

[..]

Wat is trouwens je redenatie daarachter? Ik had juist voor $_REQUEST gekozen omdat deze zowel de GET als POST waarden bevat. Ik doe het eigenlijk altijd zo en ben nog nooit tegen problemen aangelopen.
Nadeel is dat $_REQUEST de data uit $_GET, $_POST en $_COOKIE combineert. Dat creëert 2 potentiele problemen:

1) De data van $_COOKIE, $_POST en $_GET overschrijven elkaar als er dezelfde keys bestaan, wat kan leiden tot onverwacht gedrag. De standaarvolgorde is G, P en dan C.
2) Omdat $_COOKIE voorrang heeft op $_GET en $_POST, kan er mogelijk cookiedata op onveilige plekken terechtkomen.

NB: De volgorde en de aanwezigheid van cookiedata hangt af van de php.ini directives.
quote:
14s.gif Op maandag 13 januari 2014 22:26 schreef bondage het volgende:

[..]

Ik ben al wat sites aan het doornemen over namespaces; lijkt niet heel ingewikkeld als ik het zo zie. Binnenkort zelf maar even wat mee gaan experimenteren. Je leert immers het snelst door het gewoon te doen :)
Zeker, gewoon ermee aan de slag gaan werkt het beste :Y
  FOK!mycroftheld maandag 13 januari 2014 @ 22:49:51 #114
128465 verified  bondage
pi_135460816
quote:
0s.gif Op maandag 13 januari 2014 22:35 schreef zoem het volgende:

[..]

Nadeel is dat $_REQUEST de data uit $_GET, $_POST en $_COOKIE combineert. Dat creëert 2 potentiele problemen:

1) De data van $_COOKIE, $_POST en $_GET overschrijven elkaar als er dezelfde keys bestaan, wat kan leiden tot onverwacht gedrag. De standaarvolgorde is G, P en dan C.
2) Omdat $_COOKIE voorrang heeft op $_GET en $_POST, kan er mogelijk cookiedata op onveilige plekken terechtkomen.
Ai, dat is best wel naatje. Het zal waarschijnlijk niet zo snel voorkomen omdat ik erg goed let op de naamgeving van mijn cookie, post en get vars door er iets voor te zetten maar je weet echter maar nooit... Binnenkort maar ff mijn request classes gaan verbouwen ;(
pi_135461093
quote:
11s.gif Op maandag 13 januari 2014 22:49 schreef bondage het volgende:

[..]

Ai, dat is best wel naatje. Het zal waarschijnlijk niet zo snel voorkomen omdat ik erg goed let op de naamgeving van mijn cookie, post en get vars door er iets voor te zetten maar je weet echter maar nooit... Binnenkort maar ff mijn request classes gaan verbouwen ;(
Dit is mijne

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
    
namespace System\Helpers;

    class 
Request {

        public static function 
isPost() {
            return (
$_SERVER['REQUEST_METHOD'] == 'POST')?true:false;
        }

        public static function 
get($key) {
            return isset(
$_GET[$key])?$_GET[$key]:false;
        }

        public static function 
post($key) {
            return isset(
$_POST[$key])?$_POST[$key]:false;
        }

    }
?>
  Moderator / Redactie Sport / Devops dinsdag 14 januari 2014 @ 11:43:43 #116
176766 crew  zoem
zoemt
pi_135472902
quote:
0s.gif Op maandag 13 januari 2014 22:55 schreef totalvamp het volgende:

[..]

Dit is mijne
[ code verwijderd ]

Deze code
1
2
3
<?php
return ($_SERVER['REQUEST_METHOD'] == 'POST')?true:false;
?>
is hetzelfde als dit
1
2
3
<?php
return $_SERVER['REQUEST_METHOD'] == 'POST';
?>
:)
pi_135487250
quote:
0s.gif Op dinsdag 14 januari 2014 11:43 schreef zoem het volgende:

[..]

Deze code
[ code verwijderd ]

is hetzelfde als dit
[ code verwijderd ]

:)
Heel erg waar :P
Ik copy paste vaak mijn oudere classes aangezien de functionaliteit hetzelfde blijft :P
wel een erg domme 'fout'.
pi_135495471
quote:
0s.gif Op maandag 13 januari 2014 22:35 schreef zoem het volgende:

[..]

Nadeel is dat $_REQUEST de data uit $_GET, $_POST en $_COOKIE combineert. Dat creëert 2 potentiele problemen:

1) De data van $_COOKIE, $_POST en $_GET overschrijven elkaar als er dezelfde keys bestaan, wat kan leiden tot onverwacht gedrag. De standaarvolgorde is G, P en dan C.
2) Omdat $_COOKIE voorrang heeft op $_GET en $_POST, kan er mogelijk cookiedata op onveilige plekken terechtkomen.

NB: De volgorde en de aanwezigheid van cookiedata hangt af van de php.ini directives.
Je linkt naar de ini directive variables_order, terwijl eigenlijk request_order wordt gebruikt om $_REQUEST te vullen. In beide kun je ook E en S vinden (Environment en Server).
  Moderator / Redactie Sport / Devops dinsdag 14 januari 2014 @ 21:18:02 #119
176766 crew  zoem
zoemt
pi_135495653
quote:
0s.gif Op dinsdag 14 januari 2014 21:15 schreef Light het volgende:

[..]

Je linkt naar de ini directive variables_order, terwijl eigenlijk request_order wordt gebruikt om $_REQUEST te vullen. In beide kun je ook E en S vinden (Environment en Server).
Heb je helemaal gelijk in, maar:
quote:
request_order string
If this directive is not set, variables_order is used for $_REQUEST contents.
Met variables_order als anchor staan ze allebei in beeld :P Was even uit praktische overweging.
  woensdag 15 januari 2014 @ 12:57:53 #120
230788 n8n
Pragmatisch
pi_135516177
Specialization is for insects”.—Robert Heinlein
pi_135526718
quote:
0s.gif Op maandag 13 januari 2014 21:34 schreef Light het volgende:

[..]

Tegenwoordig heeft PHP namespaces om dat soort conflicten te voorkomen.
Ik vind het nogal lelijk in php eerlijk gezegd :P
..///
pi_135534307
quote:
0s.gif Op woensdag 15 januari 2014 17:41 schreef wipes66 het volgende:

[..]

Ik vind het nogal lelijk in php eerlijk gezegd :P
Waarom precies?
Tegenwoordig moet je Dr. Ir. zijn om een beetje correct Nederlands te kunnen neerpleuren.
Abusing semicolons since 1987.
pi_135536574
quote:
0s.gif Op woensdag 15 januari 2014 20:07 schreef rekenwonder het volgende:

[..]

Waarom precies?
Omdat het net lijkt of je een letter escaped zeg maar.
..///
pi_135538850
quote:
0s.gif Op woensdag 15 januari 2014 20:47 schreef wipes66 het volgende:

[..]

Omdat het net lijkt of je een letter escaped zeg maar.
namespaces zijn juist een verademing en ik word er blij van in de code :P
Geeft veel duidelijker weer waar een class toebehoord
pi_135542427
De keuze voor de backslash was inderdaad een merkwaardige.
Tegenwoordig moet je Dr. Ir. zijn om een beetje correct Nederlands te kunnen neerpleuren.
Abusing semicolons since 1987.
abonnement bol.com Unibet Coolblue
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')