[ZEND] Hoe aan te pakken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

PHP Scripter

PHP Scripter

10/04/2012 13:52:30
Quote Anchor link
Ik ben sinds kort bezig met het ZEND Framework en het bevalt mij erg goed alleen loop ik nu op een paar dingen vast waarvoor ik even een topic aanmaak zodat ik een paar vragen kan stellen.

Ik heb een tabel genaamd 'users' met de data van de users en het inlog gedeelte met Zend_Auth (via AJAX) werkt prima! Nu vraag ik mij af hoe ik het beste de data van de user(s) kan gaan uitlezen. Ik heb nu een Auth helper om de gegevens voor de huidige gebruiker uit te lezen:

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
87
88
89
90
91
<?php
/**
 * Auth helper
 *
 * @version     $Revision$
 * @copyright   Copyright (c) 2012
 * @package     Zend_View
 * @subpackage  Helper
 */

class Custom_View_Helper_Auth extends Zend_View_Helper_Abstract {
    /**
     * Zend_Auth variable
     *
     * @access  private
     * @var     Zend_Auth
     */

    private $_auth;
    
    /**
     * Initalize helper
     *
     * @access  public
     * @return  object $this Return itself
     */

    public function auth() {
        $this->_auth = Zend_Auth::getInstance();
        
        return $this;
    }

    
    /**
     * The ID of the user
     *
     * @access  public
     * @return  integer The ID of the user
     */

    public function getUserId() {
        return $this->_auth->getIdentity()->userId;
    }

    
    /**
     * The email address of the user
     *
     * @access  public
     * @return  string The email address of the user
     */

    public function getUserMail() {
        return $this->_auth->getIdentity()->userMail;
    }

    
    /**
     * The first name of the user
     *
     * @access  public
     * @return  string The first name of the user
     */

    public function getUserFirstName() {
        return $this->_auth->getIdentity()->userFirstName;
    }

    
    /**
     * The first name of the user
     *
     * @access  public
     * @return  string The first name of the user
     */

    public function getUserLastName() {
        return $this->_auth->getIdentity()->userLastName;
    }

    
    /**
     * The full name of this user
     *
     * @access  public
     * @return  string The full name of the user
     */

    public function getUserName() {
        return $this->userFirstName() . ' ' . $this->userLastName();
    }

    
    /**
     * The gender of the user
     *
     * @access  public
     * @return  string The gender of the user
     */

    public function getUserGender() {
        return $this->_auth->getIdentity()->userGender;
    }
}

?>


Nu vraag ik mij af of ik deze class zou houden of dat ik een algemen class (helper) ga maken, bijvoorbeeld: 'Custom_View_Helper_User(s)' (meervoud of enkelvoud?) en hier de data uit ga halen doormiddel van 'getUserMail($id)' etc etc.. Wat is verstandig? Aangezien er straks ook andere gebruikers worden aangepast en dan moet die data ook uit te lezen zijn, of zou ik hiervoor 2 apparte helpers maken? Een voor de huidige gebruiker (Auth helper) en een voor de overige gebruikers (User(s) helper).

Het voordeel van een Auth helper is dat ik niet continu het ID hoef mee te geven aan de helper, maar dit zou ik kunnen oplossing door in de User(s) helper standaard het ID van de huidige gebruiker mee te geven.

Het nadeel van een Auth helper is dat alles uit de sessie wordt gehaald waardoor na het aanpassen van de data in de database (of gebruiker wijzigt zijn eigen gevens) deze sessie niet meer up-to-date is, natuurlijk kun je dit opnieuw wegschrijven naar de sessie.

Ik hoop dat het een beetje duidelijk is, ik vindt het een lastige keuze..

Fijne dag!
 
PHP hulp

PHP hulp

20/04/2024 08:49:42
 
PHP Scripter

PHP Scripter

11/04/2012 13:58:57
Quote Anchor link
Bumpy. Het zou fijn zijn als iemand zou willen helpen, thanks!
 
PHP Scripter

PHP Scripter

12/04/2012 20:54:26
Quote Anchor link
Bumpy. Het zou fijn zijn als iemand zou willen helpen, thanks!
 
Wouter J

Wouter J

12/04/2012 20:56:51
Quote Anchor link
Ik denk dat je even een PM naar Kees of Niels moet sturen om goed antwoord te krijgen, niet heel veel mensen hebben hier denk ik ervaring metZF.
 
PHP Scripter

PHP Scripter

16/04/2012 10:34:58
Quote Anchor link
Oke, zal Kees of Niels even aanspreken. Hoop dat er alsnog iemand kan reageren zodat de rest er ook wat aan heeft.
 
Kees Schepers

kees Schepers

16/04/2012 11:02:03
Quote Anchor link
Ik ga er zo even naar kijken! Eigenlijk zouden ZF vragen bij mij bovenaan moeten staan :p
 
Niels K

Niels K

16/04/2012 19:28:38
Quote Anchor link
Hoi PHP scripter,

Waarom niet gewoon een User model? En die naar de view toe parsen?
Of begrijp ik dan jouw vraag verkeerd?

Weet je wat een helper precies moet doen? En waarom je evt voor een helper moet kiezen? Een helper maak je wanneer je bepaalde functionaliteit in meerdere controllers / actions nodig hebt.

Niels
Gewijzigd op 16/04/2012 19:29:56 door Niels K
 
PHP Scripter

PHP Scripter

18/04/2012 11:21:57
Quote Anchor link
Hey Niels,

Dus dan kan ik beter een Users Model aanmaken en deze via de controller naar de view sturen? Ik weet waar helpers voor zijn maar ik vondt deze View Helper ook wel kunnen omdat ik dit in bijna elke view nodig ga hebben.

Gr.
 
John Cena

John Cena

18/04/2012 12:53:02
Quote Anchor link
De normale gang van zaken is wel een User model aanmaken etc. Dat is het MVC principe uiteraard.

Om je op gang te helpen: http://akrabat.com/zend-auth-tutorial/
 
Niels K

Niels K

18/04/2012 20:54:03
Quote Anchor link
Hoi PHP Scripter,

Ja inderdaad. Daarnaast, om te controleren of iemand identity heeft, kan je wel een view helper gebruiken. (miss overdosis, maar om even een view helper uit te leggen)

Niels
 
PHP Scripter

PHP Scripter

19/04/2012 08:39:36
Quote Anchor link
Niels Kieviet op 18/04/2012 20:54:03:
Hoi PHP Scripter,

Ja inderdaad. Daarnaast, om te controleren of iemand identity heeft, kan je wel een view helper gebruiken. (miss overdosis, maar om even een view helper uit te leggen)

Niels


De database table heet 'Users', moet ik dan een User model maken of is het dan een Users model? Nooit over nagedacht.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $this->user->getNameById(); ?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $this->users->getNameById(); ?>
Gewijzigd op 19/04/2012 08:41:18 door PHP Scripter
 
Niels K

Niels K

19/04/2012 10:32:04
Quote Anchor link
Hoi PHP Scripter,

Ooit gehoord van het Zend_Db_Table principe? Misschien leuk om dat te gebruiken?

Niels
 
PHP Scripter

PHP Scripter

19/04/2012 14:04:59
Quote Anchor link
Niels, momenteel ziet mijn Users model er 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
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
<?php
/**
 * @version     $Revision$
 * @copyright   Copyright (c) 2012
 */

class Application_Model_DbTable_Users extends Zend_Db_Table_Abstract {
    /**
     * Table name
     *
     * @access  protected
     * @var     string $_name Table name
     */

    protected $_name = 'users';
    
    /**
     * Add record
     *
     * @access  public
     * @param   array $data Data array with the user data
     * @return  boolean True or false
     */

    public function addUser($data) {
        if ($this->insert($data))
            return true;
    }

    
    /**
     * Get record
     *
     * @access  public
     * @param   integer $userId ID of the user
     * @return  array Result from database
     */

    public function getUser($userId) {
        if ($this->fetchRow('userId = ' . (int)$userId)->toArray())
            return true;
    }

    
    /**
     * Update record
     *
     * @access  public
     * @param   integer $userId ID of the user
     * @param   array $data Data array with the user data
     * @return  boolean True or false
     */

    public function updateUser($userId, $data) {
        if ($this->update($data, 'userId = ' . (int)$userId))
            return true;
                
    }
    
    
    /**
     * Delete record
     *
     * @access  public
     * @param   integer $userId ID of the user
     * @return  boolean True or false
     */

    public function deleteUser($userId) {
        if ($this->delete('userId = ' . (int)$userId))
            return true;
    }
}

?>


EDIT: Hoe kan ik dan het beste de gegevens gaan uitlezen in de view? Ik bedoel zegmaar de voornaam en achternaam uitlezen en weergeven (userFirstName, userLastName). Met de Auth helper ging dat heel gemakkelijk omdat ik daar overal een functie voor had gemaakt.
Gewijzigd op 19/04/2012 14:10:46 door PHP Scripter
 
Kees Schepers

kees Schepers

19/04/2012 14:07:10
Quote Anchor link
Ik zou database entiteiten altijd enkelvoud aanhouden, dus in dat geval een class 'user' en tabel 'user' (is misschien wel reserved word voor MySQL)
 
PHP Scripter

PHP Scripter

19/04/2012 14:17:24
Quote Anchor link
Kees Schepers op 19/04/2012 14:07:10:
Ik zou database entiteiten altijd enkelvoud aanhouden, dus in dat geval een class 'user' en tabel 'user' (is misschien wel reserved word voor MySQL)


Binnen PHP is 'DbTable_User' inderdaad beter, maar ik weet niet of het ook zo logisch is om dit binnen MySQL te doen, het gaat immers om meerdere gebruikers, en niet een gebruiker.

EDIT: Na wat doorlezen van engelse fora toch besloten om de database structuur ook in het enkelvoud te schrijven.

http://stackoverflow.com/questions/338156/table-naming-dilemma-singular-vs-plural-names
Gewijzigd op 19/04/2012 14:20:25 door PHP Scripter
 
Niels K

Niels K

19/04/2012 16:05:20
Quote Anchor link
Functies zijn overbodig?

Denk aan Row objecten?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

// Nieuwe gebruiker
$row = $table->createRow();
// Zet gegeves
$row->setFromArray($data);
// Opslaan
$row->save();
 
PHP Scripter

PHP Scripter

19/04/2012 18:04:57
Quote Anchor link
Niels, over die functies had je gelijk.. De manier die jij nu hanteert zijn toch DataMappers?
 



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.