Zend Framework – Projektbeispiel (Zend_View, Zend_Layout, Zend_Auth, MVC…)

Gepostet am Februar 3, 2012

Ich möchte nun ein Beispiel für den Aufbau einer Zend-Anwendung für kleine Projekte erstellen. Kleine Projekte, da die Struktur sehr flach gehalten ist und nur wenige Module des riesigen Gesamtumfangs Verwendung finden. Zusätzlich wird eine Authentifizierung eingebaut (im Beispiel ohne DB-Anbindung).

Die Anwendung erfordert beim Aufruf (domain.de/admin) einen Login. Dann wird eine Index-Seite aufgerufen, welche über Layout, View, Models und Helper zusammengesetzt wird. Somit eine gute Grundlage zur Weiterentwicklung.

Login: tester — Passwort: test

Folgende Verzeichnisstruktur sollte erstellt werden (Achtung das Projekt enthält im Root-Pfad das Verzeichnis admin):
htdocs/admin/*

1
2
3
4
5
6
/admin/controller
/admin/helper
/admin/models
/admin/views/scripts/auth
/admin/views/scripts/index
/lib/

1. Zend Lib Downloaden und in das „/lib“-Verzeichnis kopieren

1
/lib/Zend/...hier liegen die Dateien/Ordner von Zend

2. „/admin/index.php“ anlegen:

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
<?php
//Include
set_include_path($_SERVER['DOCUMENT_ROOT'].'/lib/');
require_once 'Zend/Loader.php';
require_once 'Zend/Loader/Autoloader.php'; 
require_once 'Zend/Loader/Autoloader/Resource.php';
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
    'basePath'  => $_SERVER['DOCUMENT_ROOT'].'/admin/',
    'namespace' => '',
));
$resourceLoader->addResourceType('acl', 'acls/', 'Acl')
               ->addResourceType('form', 'forms/', 'Form')
               ->addResourceType('model', 'models/', 'Model');
 
//Layout
Zend_Layout::startMvc();
 
// Registry init
Zend_Loader::loadClass("Zend_Registry");
 
//Controller
Zend_Loader::loadClass('Zend_Controller_Front');
Zend_Loader::loadClass('Zend_Controller_Router_Rewrite');
$controller = Zend_Controller_Front::getInstance();
$controller->throwExceptions(true);
$controller->setControllerDirectory($_SERVER['DOCUMENT_ROOT'].'/admin/controller');
$controller->setParam('noErrorHandler', TRUE);
$controller->dispatch();

3. „/admin/.htaccess“ anlegen:

1
2
3
4
Options +FollowSymLinks
RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
RewriteBase /admin/

################## CONTROLLER #################

4. „/admin/controller/IndexController.php“ anlegen:

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
<?php
 
class IndexController extends Zend_Controller_Action {
 
    public function indexAction() {
		//Login Checken
		if(!Zend_Auth::getInstance()->hasIdentity()) $this->_redirect('auth/index');  
 
		//Model Einbinden
		$modeltest = new Model_ModelTest(); 
 
		//Befüllt einen Inhaltsbereich im Layout ($this->layout()->content wird Standardgemäß mit der index.phtml befüllt)
		$layout = Zend_Layout::getMvcInstance();
		$layout->test = $modeltest->getOutput();
 
		//Helper
		$layout->test2 = $this->_helper->Printdata->testPrint("Lorem ipsum");
 
		//Befüllen einer Template-Variable in der index.php
                $this->view->testMessage = "Mon message de test";
 
		//Fügt eine Action hinzu
		$this->_helper->actionStack('test');
    }
 
	public function testAction() {
        //fügt zusätzlich test.phtml an nach actionStack
    }
 
}

5. „/admin/controller/AuthController.php“ anlegen:

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
<?php
 
class AuthController extends Zend_Controller_Action {
	var $username;
	var $password;
	var $auth;
 
	public function init() {
		$this->auth = Zend_Auth::getInstance();
	}
 
	public function indexAction() {
		//wenn eingeloggt leite gleich weiter zum index
		if($this->auth->getInstance()->hasIdentity()) $this->_redirect('index'); 
    }
 
	public function loginAction() {
		$username = $this->getRequest()->getParam('user');
		$password = $this->getRequest()->getParam('password');
		if (empty($username) || empty($password)) $this->_redirect('auth/index');  
 
		// Initialize Adapter
		$authAdapter = new Model_AuthAdapter($username,$password);
		$result = $this->auth->authenticate($authAdapter);
		if ($result->isValid()) $this->_redirect('index');  
		else $this->_redirect('auth/index');  
 
		//keine View phtml Benötigt (wenn kein _redirect)
		$this->getHelper('viewRenderer')->setNoRender();
    }
 
	public function logoutAction() {
  		$this->auth->clearIdentity();
		$this->_redirect('auth/index'); 
 
		//keine View phtml Benötigt (wenn kein _redirect)
		$this->getHelper('viewRenderer')->setNoRender();
	}
}

################## HELPER #################

6. „/admin/helper/Printdata.php“ anlegen:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
class Hellohelper_Printdata extends Zend_Controller_Action_Helper_Abstract {
 
	public function testPrint($passData){
		if($passData != ""){
			return "Nachricht aus Hellohelper_Printdata: ". $passData;
		} else {
			return "Nachricht aus Hellohelper_Printdata";
		}
	} 	
 
}

################## MODELS #################

7. „/admin/models/AuthAdapter.php“ anlegen:

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
<?php
class Model_AuthAdapter implements Zend_Auth_Adapter_Interface {
    /**
     * Username
     *
     * @var string
     */
    protected $username = null;
 
    /**
     * Password
     *
     * @var string
     */
    protected $password = null;
 
    /**
     * Class constructor
     *
     * The constructor sets the username and password
     *
     * @param string $username
     * @param string $password
     */
    public function __construct($username, $password) {
        $this->username = $username;
        $this->password = md5($password);
    }
 
    /**
     * Authenticate
     *
     * Authenticate the username and password
     *
     * @return Zend_Auth_Result
     */
    public function authenticate() {
        // Try to fetch the user from the database using the model
		// example:
        $username = 'tester';
		$password = '098f6bcd4621d373cade4e832627b4f6'; //test
 
        // Initialize return values
        $code = Zend_Auth_Result::FAILURE;
        $identity = null;
        $messages = array();
 
        // Do we have a valid user?
        if (($username == $this->username) && ($password == $this->password)) {
            $code = Zend_Auth_Result::SUCCESS;
            $identity = $username;
        } else {
            $messages[] = 'Authentication error';
        }
 
        return new Zend_Auth_Result($code, $identity, $messages);
    }
 
}

8. „/admin/models/ModelTest.php“ anlegen:

1
2
3
4
5
6
<?php
class Model_ModelTest {
	public function getOutput() {
		return 'Nachricht aus ModulTest';	
	}
}

################## VIEWS #################

9. „/admin/views/scripts/auth/index.phtml“ anlegen:

1
2
3
4
5
6
<form method="post" action="login">
    Login:<br />
    Benutzer: <input name="user" type="text"  />
    Passwort: <input name="password" type="text"  />
    <input type="submit" value="Login" />
</form>

10. „/admin/views/scripts/index/index.phtml“ anlegen:

1
2
3
4
################### CONTENT VIEW ########################<br/>
Text dfdsf dsgffg fdgdfg dsfg<br/>
message = <?= $this->testMessage; ?><br/>
################### END CONTENT VIEW ####################<br/>

11. „/admin/views/scripts/index/test.phtml“ anlegen:

1
Das kommt aus der Test.phtml

12. „/admin/views/scripts/footer.phtml“ anlegen:

1
<br/>FOOTER

13. „/admin/views/scripts/layout.phtml“ anlegen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?= $this->headTitle() ?>
</head>
 
<body>
<h1>Layout Test</h1><br/>
<strong>Layout Content:</strong><br/>
<?= $this->layout()->content ?><br/>
<strong>Layout Test:</strong> <?= $this->layout()->test ?><br/>
<strong>Layout Test2:</strong> <?= $this->layout()->test2 ?><br/>
<strong>Footer einfügen:</strong> <?php echo $this->render('footer.phtml') ?>
</body>
</html>

################## AUSGABE NACH AUFRUF #################

1
2
3
4
5
6
7
8
9
10
11
12
Layout Test
 
Layout Content:
################### CONTENT VIEW ########################
Text dfdsf dsgffg fdgdfg dsfg
message = Mon message de test
################### END CONTENT VIEW ####################
Das kommt aus der Test.phtml
Layout Test: Nachricht aus ModulTest
Layout Test2: Nachricht aus Hellohelper_Printdata: Lorem ipsum
Footer einfügen:
FOOTER

Download der Beispielextension

Download

Tags: , , ,

Leave a Reply

 

Posts of Current Category



Facebook: