注册对象
由于所有的请求都要通过 index.php 文件,因而该文件成为创建数据库连接和注册的最合适的地方。
清单 27. 创建数据库连接
复制内容到剪贴板
代码:
<?php
include 'Zend.php';
include 'Zend/Db.php';
Zend::loadClass('Zend_Controller_Front');
$params = array(
'host' => 'localhost',
'username' => 'chompuser',
'password' => 'chomppassword',
'dbname' => 'chomp'
);
$DB = Zend_Db::factory('pdoMysql', $params);
Zend::register('DB', $DB);
$controller = Zend_Controller_Front::getInstance();
$controller->setControllerDirectory('controllers');
$controller->dispatch();
?>在这里,我们仅像往常一样创建了一个数据库连接,使用 register() 函数将其添加到注册簿,并用 DB 为其命名。现在,如果需要改变用户名、密码或其他信息,我们只需在这里进行更改即可。您可能想把这个信息存储在一个仅仅包含它的不易受损的文件中。
访问注册对象
数据连接一经注册,即可轻松访问。此刻,UserController 是使用数据库的惟一文件。
清单 28. 访问注册库
复制内容到剪贴板
代码:
<?php
require_once 'Zend/Db.php';
Zend::loadClass('Zend_Controller_Action');
Zend::loadClass('Zend_View');
class UserController extends Zend_Controller_Action
{
...
function authenticateAction()
{
$DB = Zend::registry('DB');
$select = $DB->select();
$select->from('users', '*');
$select->where('Username = ?', $_POST['username']);
$select->where('Password = ?', $_POST['password']);
$sql = $select->__toString();
$rowsFound = $DB->fetchAll($select);
if (isset($rowsFound[0]['username']))
{
session_start();
$_SESSION['RSS_SESSION'] = session_id();
$_SESSION['firstname'] = $rowsFound[0]['firstname'];
$_SESSION['username'] = $rowsFound[0]['username'];
echo "Login successful. Please <a href='/'>continue</a>.";
}
else
{
echo "Login information incorrect. \
Please <a href='/user/login'>try again</a>.";
}
}
function logoutAction()
{
echo 'This is the logoutAction.';
}
function registerAction()
{
$view = new Zend_View();
$view->setScriptPath('views');
echo $view->render('register.php');
}
function createAction()
{
$DB = Zend::registry('DB');
$row = array(
'FirstName' => $_POST['fName'],
'LastName' => $_POST['lName'],
'EmailAddress' => $_POST['email'],
'Username' => $_POST['user'],
...请注意,我们所做的是调用注册库来替代数据库连接信息,该调用用以寻找在字符串 DB 下注册的对象。一旦找到了这个对象,就可以像以前一样使用它了。