[ZEND] Hoe aan te pakken
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)
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
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;
}
}
?>
/**
* 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!
Bumpy. Het zou fijn zijn als iemand zou willen helpen, thanks!
Bumpy. Het zou fijn zijn als iemand zou willen helpen, thanks!
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.
Oke, zal Kees of Niels even aanspreken. Hoop dat er alsnog iemand kan reageren zodat de rest er ook wat aan heeft.
Ik ga er zo even naar kijken! Eigenlijk zouden ZF vragen bij mij bovenaan moeten staan :p
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
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.
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
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
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.
Gewijzigd op 19/04/2012 08:41:18 door PHP Scripter
Ooit gehoord van het Zend_Db_Table principe? Misschien leuk om dat te gebruiken?
Niels
Code (php)
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
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;
}
}
?>
/**
* @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
Ik zou database entiteiten altijd enkelvoud aanhouden, dus in dat geval een class 'user' en tabel 'user' (is misschien wel reserved word voor MySQL)
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
Denk aan Row objecten?
Niels, over die functies had je gelijk.. De manier die jij nu hanteert zijn toch DataMappers?