Bonjour à tous,
Références :
http://julien-pauli.developpez.com/t...s/?page=page_2
http://www.kitpages.fr/zf_helper_plugin.php
http://akrabat.com/zend-framework-tutorial/
http://akrabat.com/zend-auth-tutorial/
Débutant en Php, j'appuie mes développements sur la logique du Zend F et, entre autres, les références ci-dessus.
Comme nombre sites, je souhaite un module de connexion, d'authentification. En revanche, je ne souhaite pas une page dédiée à la connexion mais plutôt un formulaire situé dans un cadre au-dessus de mon menu gauche, par exemple.
Cette authentification doit être accessible depuis plusieurs formulaires et donc le code se doit d'être centralisé et non redondant dans chacune des pages.
Après mes diverses lectures sur les Plu-gins, Aides de Vue ou Aides de Controller, voici ce que je suis arrivé à pondre et dont je ne suis pas satisfait bien que cela fonctionne.
...\application\Bootstrap.php
...\application\controllers\IndexController.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 .../... protected function _initViewHelpers() { .../... $view->addHelperPath(APPLICATION_PATH . '/views/helpers'); .../... $view->user = Zend_Auth::getInstance()->getIdentity(); } .../...
...\application\controllers\AidenavigationController.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <?php class IndexController extends Zend_Controller_Action { function preDispatch() { if ($this->view->monlogin($this)) { $this->_redirect(); } } public function indexAction() { $this->view->title = "Accueil"; //à dispo pour la vue si souhaite afficher un titre : mettre la page en cours $this->view->headTitle($this->view->title, 'PREPEND'); //rajoute le titre dans onglet et barre de titre de la page //concatène au titre du site défini dans le bootstrap : $view->headTitle } }
...\application\views\helpers\MonLogin.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 <?php class AidenavigationController extends Zend_Controller_Action { function preDispatch() { if ($this->view->monlogin($this)) { $this->_redirect(); } } public function indexAction() { $this->view->title = "Aide à la Navigation"; $this->view->headTitle($this->view->title, 'PREPEND'); } }
Qu'est ce qui ne me va pas ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?php class Zend_View_Helper_Monlogin { public $thisencours; function monlogin($thisindex) { $auth = Zend_Auth::getInstance(); if (!$auth->hasIdentity()) { $this->thisencours = $thisindex; return $this->loginAction(); } } public function loginAction() { $form = new Form_Login(); $form->submit->setLabel('Connexion'); $this->thisencours->view->form = $form; if ($this->thisencours->getRequest()->isPost()) { $formData = $this->thisencours->getRequest()->getPost(); if ($form->isValid($formData)) { $id = (int)$form->getValue('id'); $username = $form->getValue('username'); $password = $form->getValue('password'); if (empty($username)) { $this->thisencours->view->message = 'Renseigner un nom d\'utilisateur.'; } else { $authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter()); $authAdapter->setTableName('users') ->setIdentityColumn('username') ->setCredentialColumn('password') ->setCredentialTreatment("MD5(CONCAT(?,id))") ->setIdentity($username) ->setCredential($password); // Authentication $auth = Zend_Auth::getInstance(); $result = $auth->authenticate($authAdapter); if ($result->isValid()) { // REUSSITE : on mémorise session ouverte et on se balade sur le site $data = $authAdapter->getResultRowObject(null, 'password'); $auth->getStorage()->write($data); return true; } else { // ECHEC: on recommence $this->thisencours->view->message = 'Login Incorrect.'; } } } else { $this->thisencours->view->message = 'Renseigner un nom d\'utilisateur.'; } } } }
1 - la désagréable sensation d'avoir créé un hybride, mélange de Aides d'Action, Plugin... fruit sans doute de ma mauvaise compréhension de ces outils.
Il me semble que je devrais créer un Plugin mais comment, vu la question n° 2 ?
2 - Voyez ce "public $thisencours" et le passage en paramètre de $this à ma fonction monlogin() : je suis persuadé que l'on peut faire sans mais je n'y arrive pas et c'est là que j'implore votre aide et votre pardon pour mon ignorance.
3 - redondance du preDispatch dans chaque page : alors qu'un vrai plugin devrait être initié je pense dans le Bootstrap, si encore je savais identifié le $this du point 2.
Voilà pour aujourd'hui l'épine du pied que je vous confie. Merci d'avance.
Partager