■ここでときたいこと
mysqlからデータを取得して、ページを表示する方法。
■テーブルの生成
※通常ですと、zf create db-table User
としたいところですが、ここでは、テーブルの作成から入っています。
※Mysql Query Browserを利用してつくります。が、別に何でもいいです。
※CHARSET=utf8にしています。
適当にデータを入れます。
-------------------------
user_id : 1
user_uid : NULLGWDOCOMO
user_utn : UTN
user_guid : GUID
user_name : ビー玉のお京
user_pass : qwerty
user_created_ts : 2010-05-17 00:00:00
user_enabled : 1
-------------------------
■/application/config/application.configの設定
DB接続するための設定をコンフィグファイルに書き込みます。
---------------------------------------------------------------
resources.db.adapter = "PDO_MYSQL"
resources.db.params.host = "localhost"
resources.db.params.dbname = "zf_001"
resources.db.params.username = "root"
resources.db.params.password = "自分でつけたパスワード"
resources.db.params.charset = "utf8"
---------------------------------------------------------------
ここでもutf8に設定しています。
■/application/models/User.php
モデルクラスUserをつくります。
t_userのフィールドと、get/setを作っています。
---------------------------------------------------------------
■/application/models/UserMapper.php
User.phpとDBのt_userとのマッピングを行うクラスです。
■/application/controller/User.php
コントローラクラスです。これは、
controllerは、コマンドから生成しています。
アプリケーションのホームディレクトリにて実行します。
---------------------------------------------------------------
C:\svn\www\zf_001>zf create controller User
Creating a controller at C:\svn\www\zf_001/application/controllers/UserControlle
r.php
Creating an index action method in controller User
Creating a view script for the index action method at C:\svn\www\zf_001/applicat
ion/views/scripts/user/index.phtml
Creating a controller test file at C:\svn\www\zf_001/tests/application/controlle
rs/UserControllerTest.php
Updating project profile 'C:\svn\www\zf_001/.zfproject.xml'
C:\svn\www\zf_001>
---------------------------------------------------------------
■/application/views/user/index.phtmlの編集
つづいてviewの編集です。
通常
$user->getUserId()
は
viewないでは、
$entry->userid
getがとれて、大文字小文字もなくなっていることに注意です。
■一度apacheを再起動して確認。
http://dev.zf_001/user/
にアクセスをして確認。
---------------------------------------------------------------
User Entries:
user_id : 1
user_uid : NULLGWDOCOMO
user_utn : UTN
user_guid : GUID
user_name : ビー玉のお京
user_pass : qwerty
user_created_dt : 2010-05-17 00:00:00
user_enabled : 1
---------------------------------------------------------------
と表示されます。
※User/UserMapperの修正には気をつけましょう。
結構間違える。
エラー画面が出てくると思うので、都度確認しましょう。
■これまでに解決したこと
[OK]windows+mysql+apache+php+zendframeworkでページを表示する方法。
[OK]mysqlからデータを取得して、ページを表示する方法。
[OK]DBの文字コードの設定方法。
■疑問点
[NG]複数DBへの接続の設定方法。
[NG].zfproject.xmlって何の役割をするの?
mysqlからデータを取得して、ページを表示する方法。
■テーブルの生成
※通常ですと、zf create db-table User
としたいところですが、ここでは、テーブルの作成から入っています。
※Mysql Query Browserを利用してつくります。が、別に何でもいいです。
DROP TABLE IF EXISTS `zf_001`.`t_user`;
CREATE TABLE `zf_001`.`t_user` (
`user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_uid` text NOT NULL,
`user_utn` text NOT NULL,
`user_guid` text NOT NULL,
`user_name` text NOT NULL,
`user_pass` text NOT NULL,
`user_created_dt` datetime NOT NULL,
`user_enabled` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
※CHARSET=utf8にしています。
適当にデータを入れます。
-------------------------
user_id : 1
user_uid : NULLGWDOCOMO
user_utn : UTN
user_guid : GUID
user_name : ビー玉のお京
user_pass : qwerty
user_created_ts : 2010-05-17 00:00:00
user_enabled : 1
-------------------------
■/application/config/application.configの設定
DB接続するための設定をコンフィグファイルに書き込みます。
---------------------------------------------------------------
resources.db.adapter = "PDO_MYSQL"
resources.db.params.host = "localhost"
resources.db.params.dbname = "zf_001"
resources.db.params.username = "root"
resources.db.params.password = "自分でつけたパスワード"
resources.db.params.charset = "utf8"
---------------------------------------------------------------
ここでもutf8に設定しています。
■/application/models/User.php
モデルクラスUserをつくります。
t_userのフィールドと、get/setを作っています。
---------------------------------------------------------------
<?php
// application/models/User.php
class Application_Model_User
{
protected $_user_id;
protected $_user_uid;
protected $_user_utn;
protected $_user_guid;
protected $_user_name;
protected $_user_pass;
protected $_user_created_dt;
protected $_user_enabled;
public function __construct(array $options = null)
{
if (is_array($options)) {
$this->setOptions($options);
}
}
public function __set($name, $value)
{
$method = 'set' . $name;
if (('mapper' == $name) || !method_exists($this, $method)) {
throw new Exception('Invalid guestbook property');
}
$this->$method($value);
}
public function __get($name)
{
$method = 'get' . $name;
if (('mapper' == $name) || !method_exists($this, $method)) {
throw new Exception('Invalid guestbook property');
}
return $this->$method();
}
public function setOptions(array $options)
{
$methods = get_class_methods($this);
foreach ($options as $key => $value) {
$method = 'set' . ucfirst($key);
if (in_array($method, $methods)) {
$this->$method($value);
}
}
return $this;
}
public function setUserId($text){
$this->_user_id = (string) $text;
return $this;
}
public function getUserId(){
return $this->_user_id;
}
public function setUserUid($text){
$this->_user_uid = (string) $text;
return $this;
}
public function getUserUid(){
return $this->_user_uid;
}
public function setUserGuid($text){
$this->_user_guid = (string) $text;
return $this;
}
public function getUserUtn(){
return $this->_user_utn;
}
public function setUserUtn($text){
$this->_user_utn = (string) $text;
return $this;
}
public function getUserGuid(){
return $this->_user_guid;
}
public function setUserName($text){
$this->_user_name = (string) $text;
return $this;
}
public function getUserName(){
return $this->_user_name;
}
public function setUserPass($text){
$this->_user_pass = (string) $text;
return $this;
}
public function getUserPass(){
return $this->_user_pass;
}
public function setUserCreatedDt($text){
$this->_user_created_dt = (string) $text;
return $this;
}
public function getUserCreatedDt(){
return $this->_user_created_dt;
}
public function setUserEnabled($text){
$this->_user_enabled = (string) $text;
return $this;
}
public function getUserEnabled(){
return $this->_user_enabled;
}
}
?>
---------------------------------------------------------------
■/application/models/UserMapper.php
User.phpとDBのt_userとのマッピングを行うクラスです。
---------------------------------------------------------------
<?php
// application/models/UserMapper.php
class Application_Model_UserMapper
{
protected $_dbTable;
/**
* これはデフォルト。たぶんスーパークラスで持たせるほうがよい。
*/
public function setDbTable($dbTable)
{
if (is_string($dbTable)) {
$dbTable = new $dbTable();
}
if (!$dbTable instanceof Zend_Db_Table_Abstract) {
throw new Exception('Invalid table data gateway provided');
}
$this->_dbTable = $dbTable;
return $this;
}
/**
* これはデフォルト
*/
public function getDbTable()
{
if (null === $this->_dbTable) {
$this->setDbTable('Application_Model_DbTable_User');
}
return $this->_dbTable;
}
public function save(Application_Model_User $user)
{
$data = array(
'user_id' => 'default',
'user_uid' => $user->getUid(),
'user_guid' => $user->getGuid(),
'user_utn' => $user->getUtn(),
'user_name' => $user->getName(),
'user_pass' => $user->getPass(),
'user_created_dt' => 'default',
'user_enabled' => 'default',
);
if (null === ($id = $user->getUserId())) {
unset($data['id']);
$this->getDbTable()->insert($data);
} else {
$this->getDbTable()->update($data, array('user_id = ?' => $user_id));
}
}
public function find($user_id, Application_Model_User $user)
{
$result = $this->getDbTable()->find($user_id);
if (0 == count($result)) {
return;
}
$row = $result->current();
$user->setUserId($row->user_id)
->setUserUid($row->user_uid)
->setUserUtn($row->user_utn)
->setUserGuid($row->user_guid)
->setUserName($row->user_name)
->setUserPass($row->user_pass)
->setUserCreatedDt($row->user_created_dt)
->setUserEnabled($row->user_enabled);
}
public function fetchAll()
{
$resultSet = $this->getDbTable()->fetchAll();
$entries = array();
foreach ($resultSet as $row) {
$entry = new Application_Model_User();
$entry->setUserId($row->user_id)
->setUserUid($row->user_uid)
->setUserUtn($row->user_utn)
->setUserGuid($row->user_guid)
->setUserName($row->user_name)
->setUserPass($row->user_pass)
->setUserCreatedDt($row->user_created_dt)
->setUserEnabled($row->user_enabled);
$entries[] = $entry;
}
return $entries;
}
}
?>
---------------------------------------------------------------
■/application/controller/User.php
コントローラクラスです。これは、
controllerは、コマンドから生成しています。
アプリケーションのホームディレクトリにて実行します。
---------------------------------------------------------------
C:\svn\www\zf_001>zf create controller User
Creating a controller at C:\svn\www\zf_001/application/controllers/UserControlle
r.php
Creating an index action method in controller User
Creating a view script for the index action method at C:\svn\www\zf_001/applicat
ion/views/scripts/user/index.phtml
Creating a controller test file at C:\svn\www\zf_001/tests/application/controlle
rs/UserControllerTest.php
Updating project profile 'C:\svn\www\zf_001/.zfproject.xml'
C:\svn\www\zf_001>
---------------------------------------------------------------
■/application/views/user/index.phtmlの編集
つづいてviewの編集です。
通常
$user->getUserId()
は
viewないでは、
$entry->userid
getがとれて、大文字小文字もなくなっていることに注意です。
---------------------------------------------------------------
<!-- application/views/scripts/user/index.phtml -->
User Entries:
<dl>
<?php foreach ($this->entries as $entry): ?>
<dt><?php echo $this->escape($entry->userid) ?></dt>
<dd><?php echo $this->escape($entry->useruid) ?></dd>
<dd><?php echo $this->escape($entry->userutn) ?></dd>
<dd><?php echo $this->escape($entry->userguid) ?></dd>
<dd><?php echo $this->escape($entry->username) ?></dd>
<dd><?php echo $this->escape($entry->userpass) ?></dd>
<dd><?php echo $this->escape($entry->usercreateddt) ?></dd>
<dd><?php echo $this->escape($entry->userenabled) ?></dd>
<?php endforeach ?>
</dl>
---------------------------------------------------------------
■一度apacheを再起動して確認。
http://dev.zf_001/user/
にアクセスをして確認。
---------------------------------------------------------------
User Entries:
user_id : 1
user_uid : NULLGWDOCOMO
user_utn : UTN
user_guid : GUID
user_name : ビー玉のお京
user_pass : qwerty
user_created_dt : 2010-05-17 00:00:00
user_enabled : 1
---------------------------------------------------------------
と表示されます。
※User/UserMapperの修正には気をつけましょう。
結構間違える。
エラー画面が出てくると思うので、都度確認しましょう。
■これまでに解決したこと
[OK]windows+mysql+apache+php+zendframeworkでページを表示する方法。
[OK]mysqlからデータを取得して、ページを表示する方法。
[OK]DBの文字コードの設定方法。
■疑問点
[NG]複数DBへの接続の設定方法。
[NG].zfproject.xmlって何の役割をするの?