abonnement Unibet Coolblue
pi_74883148
quote:
Op vrijdag 20 november 2009 12:43 schreef hamkaastosti het volgende:
ik ben nog steeds bezig met m'n MVC systeempje en nu vroeg ik me af of ik sommige dingen compleet verkeerd aanpak dus hieronder wat code van een controller en een model.

mijn newscontroller: http://pastebin.com/d7cfa2981

mijn newsmodel: http://pastebin.com/m47be5495

Welke ervaren php'er kan me wat goede tips geven?
Waarom de volgende dingen?
1
2
3
4
5
6
7
8
<?php
$this
->view->addContent($this->controller__FUNCTION__);

final class 
newscontroller extends basecontroller
{
    private 
$controller 'news';
}
?>


Waarom kun je dit niet opslaan in een frontcontroller. Ik neem aan dat hij dynamisch wordt aangeroepen dus deze info is allemaal al bekend.

Als je het helemaal goed wilt doen mag een functie maar 1 type terug geven. Of een boolean of een nieuwsitem. Dus dan moet je eerst checken of het nieuws bericht bestaat en dan ophalen. Voor de zekerheid kun je dan als nog een exceptie laten gooien wanneer nieuwsitem om een of andere reden toch niet bestaat.
  vrijdag 20 november 2009 @ 13:15:12 #177
152303 hamkaastosti
ook bekend als hamkaastosti
pi_74883339
$this->view->addContent haalt de view op uit modules/controllernaam/methodnaam.tpl.php en voegt dit toe op de juiste locatie in layout.tpl.php. zo voegt $this->view->addUserError('newsitem_not_found'); bijvoorbeeld de geselecteerde foutmelding toe aan de layout.

Ik wil geen exceptions gaan gebruiken voor bijvoorbeeld niet gevonden newsitems. Het niet vinden van een item in de database is in mijn ogen geen uitzondering maar iets dat te verwachten is.

de return van model kan inderdaad misschien wat netter maar hoe los ik dat netjes op.
1
2
3
4
<?php
$this
->newsitems = array();
$this->singleitem = array();
?>

en dan met getSingleItem alleen true of false returnen daarop checken en dan $model->singleitem assignen aan de view?
Tom Jones zong ooit...
she's got style she's got grace, takes a cumshot to the face, she's a lady
laat een berichtje achter in mijn vriendjes en vriendinnetjesboek
grolsch is tof | Aj plat könt praoten, mo-j ut neet laoten
pi_74883428
quote:
Op vrijdag 20 november 2009 13:15 schreef hamkaastosti het volgende:
$this->view->addContent haalt de view op uit modules/controllernaam/methodnaam.tpl.php en voegt dit toe op de juiste locatie in layout.tpl.php. zo voegt $this->view->addUserError('newsitem_not_found'); bijvoorbeeld de geselecteerde foutmelding toe aan de layout.
dus die addContent methode kan 1 niveau hoger worden geplaatst, eigenlijk na de call van de controller functie
pi_74885491
Los van je vraag vind ik 'AddContent' een wat verwarrende naam voor iets wat content ophaalt
  vrijdag 20 november 2009 @ 17:21:17 #180
152303 hamkaastosti
ook bekend als hamkaastosti
pi_74890848
quote:
Op vrijdag 20 november 2009 14:23 schreef Xcalibur het volgende:
Los van je vraag vind ik 'AddContent' een wat verwarrende naam voor iets wat content ophaalt
hij haalt het op en voegt het vervolgens toe aan de algehele layout
ik ben niet zo goed met naamgevingen
Tom Jones zong ooit...
she's got style she's got grace, takes a cumshot to the face, she's a lady
laat een berichtje achter in mijn vriendjes en vriendinnetjesboek
grolsch is tof | Aj plat könt praoten, mo-j ut neet laoten
pi_74896355
quote:
Op vrijdag 20 november 2009 17:21 schreef hamkaastosti het volgende:

[..]

hij haalt het op en voegt het vervolgens toe aan de algehele layout
ik ben niet zo goed met naamgevingen
wat dacht je van getContent? doet precies wat hij zegt haalt content op
Redacted
  vrijdag 20 november 2009 @ 20:29:14 #182
136730 PiRANiA
All thinking men are atheists.
  vrijdag 20 november 2009 @ 20:32:50 #183
136730 PiRANiA
All thinking men are atheists.
pi_74896600
Er is geen regex-topic, maar ik denk dat de PHP bazen hier mij wel kunnen helpen:

Ik wil een stuk tekst matchen tót een bepaald punt:
quote:
bla<br>bla<div></td>blabla
Ik wil dis het deel tot de EERSTE </td> hebben. Ik heb dit al geprobeerd maar dat werkt uiteraard niet:
1(.*)</td>

dan zoekt hij namelijk niet de eerste </td>, maar de laatste </td>

Anyone? :D
  vrijdag 20 november 2009 @ 20:34:07 #184
152303 hamkaastosti
ook bekend als hamkaastosti
pi_74896652
dat kan ook nog ja :P

ik ben trouwens weer verder aan het klussen met het reageren op een item maar ik schrijf op dit moment 3x de code om te checken of het item bestaat of niet

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
public function react()
    {
        
//form is submitted
        
if(strtoupper($_SERVER['REQUEST_METHOD']) == "POST" && !empty($_POST['submit']))
        {
            
$validator = new validator();
            
$validator->validateField('name'345'/^[aA-zZ0-9]+$/'true);
            
$validator->validateMail('email'true);
            
//form is valid
            
if($validator->isValid())
            {
                echo 
'valide';
                
// hier moet ik dan ook nog een keer checken of nieuwsitem wel bestaat.
                // kan ik ook in het model doen maar wat is beter?
            
}
            
//form not valid. display it again with errors
            
else
            {
                
//not existing item
                
$newsitem $this->model->getSingleItem($this->path->getPiece(3));
                if(
$newsitem == false)
                {
                    
$this->view->addUserError('newsitem_not_found');
                }
                
//it exists.
                
else
                {
                    
$this->view->newsitem $newsitem;
                    
$this->view->errors $validator->getErrors();
                    
$this->view->postvars $validator->getPostVars();
                    
$this->view->addContent($this->controller__FUNCTION__);
                }
            }
        }
        
//show the reactionform
        
else
        {
            
$newsitem $this->model->getSingleItem($this->path->getPiece(3));
            
//not existing item
            
if($newsitem == false)
            {
                
$this->view->addUserError('newsitem_not_found');
            }
            
//it exists.
            
else
            {
                
$this->view->newsitem $newsitem;
                
$this->view->addContent($this->controller__FUNCTION__);
            }
        }
    }
?>


de eerste keer tijdens het aanroepen van /news/react/1
de tweede keer na een submit om de form opnieuw weer te geven als een veld niet compleet is
de derde keer na een succesvolle submit om zeker te weten dat het een bestaand item is.

Die laatste keer zou ook in het model kunnen door het aanroepen van $this->getSingleItem($id) in function addReaction() maar dat moet toch simpeler kunnen.
Ik zou ook in het model bij de getSingleItem() functie de view kunnen aanroepen en een error weergeven maar in het MVC model zou alleen de controller dat moeten doen toch?


vragen, vragen, vragen :P
Tom Jones zong ooit...
she's got style she's got grace, takes a cumshot to the face, she's a lady
laat een berichtje achter in mijn vriendjes en vriendinnetjesboek
grolsch is tof | Aj plat könt praoten, mo-j ut neet laoten
  vrijdag 20 november 2009 @ 20:38:24 #185
109485 Sirolf
001100110100011001001101
pi_74896814
quote:
Op vrijdag 20 november 2009 20:32 schreef PiRANiA het volgende:
Er is geen regex-topic, maar ik denk dat de PHP bazen hier mij wel kunnen helpen:

Ik wil een stuk tekst matchen tót een bepaald punt:
[..]

Ik wil dis het deel tot de EERSTE </td> hebben. Ik heb dit al geprobeerd maar dat werkt uiteraard niet:
[ code verwijderd ]

dan zoekt hij namelijk niet de eerste </td>, maar de laatste </td>

Anyone?
Als je een ? achter het sterretje plaatst zou het moeten werken. Da's het verschil tussen greedy en lazy binnen regular expressions.
  vrijdag 20 november 2009 @ 20:41:25 #186
136730 PiRANiA
All thinking men are atheists.
pi_74896924
quote:
Op vrijdag 20 november 2009 20:38 schreef Sirolf het volgende:

[..]

Als je een ? achter het sterretje plaatst zou het moeten werken. Da's het verschil tussen greedy en lazy binnen regular expressions.
Werkt
pi_74897667
quote:
Op vrijdag 20 november 2009 20:38 schreef Sirolf het volgende:

[..]

Als je een ? achter het sterretje plaatst zou het moeten werken. Da's het verschil tussen greedy en lazy binnen regular expressions.
True, standaard zijn dingen als * en + in regular expressions allemaal greedy. Met de /U modifier maak je ze allemaal ungreedy. En met een ? erachter draai je greedy en ungreedy om op die plek.
  zaterdag 21 november 2009 @ 00:10:45 #188
136730 PiRANiA
All thinking men are atheists.
pi_74902782
quote:
Op vrijdag 20 november 2009 21:43 schreef Light het volgende:

[..]

True, standaard zijn dingen als * en + in regular expressions allemaal greedy. Met de /U modifier maak je ze allemaal ungreedy. En met een ? erachter draai je greedy en ungreedy om op die plek.
Ik moet er eens een fatsoenlijk boek over lezen
Ik gebruik het best veel, maar moet steeds door forums achter dit soort dingetjes komen
pi_74903459
quote:
Op zaterdag 21 november 2009 00:10 schreef PiRANiA het volgende:

[..]

Ik moet er eens een fatsoenlijk boek over lezen
Ik gebruik het best veel, maar moet steeds door forums achter dit soort dingetjes komen
Een boek lezen hoeft nog niet eens vind ik. Gewoon dit downloaden en naast je leggen, en een programma als Regex Coach gebruiken om te oefenen. Binnen een paar uurtjes heb je het al onder de knie als je er even voor gaat zitten.
pi_74910507
Ik zit met een vraag mbt getInstance() eerst zal ik even een stukje code plakken

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
<?php
class db
{
    private static 
$instance;
    private static 
$db;
    
    public function 
getInstance()
    {
        if (
is_null(self::$instance))
        {
            
self::$instance = new db;
        }
        
        return 
self::$instance;
    }
    
    public function 
__construct()
    {
       
mysql_connect('host'etc);
    }

    public function 
query($sql)
    {
    }
}

class 
user
{
    private static 
$db;
   
    public function 
__construct()
    {
        
$db db::getInstance();
    }

    public function 
login($u$p$t)
    {
        
$query self::$db->query("JE QUERY HIER");
    }
}

$u = new user;

print_r($u->login('username','password',true));
?>


nu krijg ik de volgende fout melding in mijn schets

1
2
3
Notice: Undefined variable: db in *\system\classes\class.user.php on line 29

Fatal error: Call to a member function query() on a non-object in *\system\classes\class.user.php on line 29


Waar ga ik de fout in? ik heb al een x aantal tutors gelezen over getInstance en dit lijkt de manier...

}

[ Bericht 0% gewijzigd door Chandler op 22-11-2009 16:05:36 (typo) ]
Just say hi!
pi_74911106
Je moet in de constructor van de class user wel $this->db gebruiken. En bij het inloggen weer. Met self:: verwijs je naar een statische variabele, en dat is $db niet.

Overigens gaat de database class zo ook niet werken, maar da's een (ander) probleem.
pi_74911436
Gatverdamme, kun je dan eens een voorbeeld schetsen die wel zou moeten werken? ik sla blijkbaar gewoon continu de plank mis
Just say hi!
  zondag 22 november 2009 @ 17:23:26 #193
37634 wobbel
Da WoBBeL King
pi_74911506
Is er al een gratis PHP File Manager voor CKeditor? Die van CKeditor is tegenwoordig betaald
pi_74911620
quote:
Op zondag 22 november 2009 17:21 schreef Chandler het volgende:
Gatverdamme, kun je dan eens een voorbeeld schetsen die wel zou moeten werken? ik sla blijkbaar gewoon continu de plank mis :'( :P
Je moet gewoon eerst eens een goed boek kopen. En wat meer lezen over OO.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
class user
{
    private 
$db;
   
    public function 
__construct()
    {
        
$this->db db::getInstance();
    }

    public function 
login($u$p$t)
    {
        
$query $this->db->query("JE QUERY HIER");
    }
}

$u = new user();
?>

Zo zou ik het doen. De verschillen met jouw code mag je zelf uitzoeken.
pi_74911819
Haal die $db variabel uit de class, dat is echt geheugen versmering eerste klas

Wanneer je de DB nodig hebt doe je even DB::functienaam(); en dan query uitvoeren en waarde returnen. Garbage cleaner zorgt er dan zelf weer voor dat DB uit geheugen gaat en niet in de klasse blijft zwerven/.
pi_74912007
quote:
Op zondag 22 november 2009 17:29 schreef Pakspul het volgende:
Haal die $db variabel uit de class, dat is echt geheugen versmering eerste klas

Wanneer je de DB nodig hebt doe je even DB::functienaam(); en dan query uitvoeren en waarde returnen. Garbage cleaner zorgt er dan zelf weer voor dat DB uit geheugen gaat en niet in de klasse blijft zwerven/.
Da's ook een optie. Hoeveel verschil er is in geheugengebruik, weet ik niet.
Ik zou class names ook met een hoofdletter laten beginnen, voor een stukje extra duidelijkheid.
  zondag 22 november 2009 @ 17:49:45 #197
37634 wobbel
Da WoBBeL King
pi_74912685
Ik gebruik inmiddels al 4 jaar een template parser en die is behoorlijk gedateerd heeft er hier iemand een goede template parser? En welke kan ik het beste gebruiken?
  zondag 22 november 2009 @ 18:53:15 #198
152303 hamkaastosti
ook bekend als hamkaastosti
pi_74914024
smarty is geloof ik de meest uitgebreide geloof ik. Zelf maak ik enkel nog gebruik van de beste template engine: php zelf
Tom Jones zong ooit...
she's got style she's got grace, takes a cumshot to the face, she's a lady
laat een berichtje achter in mijn vriendjes en vriendinnetjesboek
grolsch is tof | Aj plat könt praoten, mo-j ut neet laoten
  zondag 22 november 2009 @ 19:07:22 #199
37634 wobbel
Da WoBBeL King
pi_74914468
quote:
Op zondag 22 november 2009 18:53 schreef hamkaastosti het volgende:
smarty is geloof ik de meest uitgebreide geloof ik. Zelf maak ik enkel nog gebruik van de beste template engine: php zelf
Smarty ben ik nu even mee aan het klooien en ziet er goed uit! Vele malen uitgebreider dan m'n huidige template parser
  zondag 22 november 2009 @ 19:10:00 #200
37634 wobbel
Da WoBBeL King
pi_74914557
Is er btw een soort tutorial die mij verteld hoe ik met meerdere categorieen kan werken?
Heb nu een tabel "category" en "subcategory" maar dan houdt het al snel op... (Categorienaam => Subcategorienaam)

Ik wil ook tot wel 7 niveaus verder gaan indien dat mogelijk is...(Kleding => Heren => T-shirts => Merk X => Lijn Y => etc)

Moet ik dan met "nested id's" ofzo iets doen? zoals ik dat ooit een keer gehoord heb ofzo
abonnement Unibet Coolblue
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')