閲覧総計:12785  (本日:1  昨日:0)

PHPフレームワークの機能概要を把握するのに適した4つの課題が提示されている。
(原典:英語)http://www.onekay.com/blog/archives/35
(和訳)http://phpspot.org/blog/archives/2008/12/php_114.html
この4つの課題をCakePHP1.2でやってみた。 09/01/11

【目次】(項目をクリックすると、そこに飛べます)


1. hello world してみよう

CakePHPでのHTMLでの表示方法が確認出来る。

/cakephp/test/controllers/nodbs_controller.php

<?php
class NodbsController extends AppController {

    var $name = 'Nodbs'; //controllerの名前を定義
    var $uses = array(); //modelを使用しない
    
    function index() {

    }
    
}
?>

/cakephp/test/views/nodbs/index.ctp

hellow world

http://localhost/cakephp/test/nodbs
hellow_world表示.JPG


選択肢 投票
参考になった 1  
ふつう 2  
参考にならなかった 1  

2. 四則計算をしてみよう

フォームから値を入力して、足し算、引き算、掛け算、割り算の結果を表示させてみる。
これで、フォームからのパラメータの受け取り方や、controller内での処理の行い方、
viewへの値の渡し方がわかる。

/cakephp/test/controllers/nodbs_controller.php

<?php
class NodbsController extends AppController {

    var $name = 'Nodbs'; //controllerの名前を定義
    var $uses = array(); //modelを使用しない
    
    function index() {

    }
    
    function add() {
        if (!empty($this->data)) {
            switch ($this->data['sign']) {
                case 0: //足し算
                    $result = $this->data['num1'] + $this->data['num2'];
                    break;
                case 1: //引き算
                    $result = $this->data['num1'] - $this->data['num2'];
                    break;
                case 2: //掛け算
                    $result = $this->data['num1'] * $this->data['num2'];
                    break;
                case 3: //割り算
                    $result = $this->data['num1'] / $this->data['num2'];
                    break;
                default:
                    $result = 9999;
            }
         } else {
            $result = 0;
        }
        
        $this->set('result', $result); //$resultの内容を変数resultにセットしviewに渡す。
        $this->render('index'); //index.ctpを表示する
    }
    
}
?>

/cakephp/test/views/nodbs/index.ctp

<h1>四則計算を行い結果を表示する</h1>
<?php echo $form->create(); ?>
数字1:<?php echo $form->text('num1'); ?>
<?php echo $form->radio('sign', array('0'=>'+', '1'=>'−', '2'=>'×', '3'=>'÷')); ?><br>
数字2:<?php echo $form->text('num2'); ?>
<br>
<br>
<?php if (isset($result)): ?>
      答: <?php echo h($result); ?>
<?php endif; ?>

<?php echo $form->end('計算する'); ?>

http://localhost/cakephp/test/nodbs
LH_四則計算.JPG


選択肢 投票
参考になった 1  
ふつう 1  
参考にならなかった 0  

3. ゲストブックを作成する

書き込みフォームを用意して書き込み可能なサービスにしてみる。
controller内のルーチンはわかったので、今度はモデルを作ってDBやファイルに対してデータを保存
してみようというもの。

テーブルの作成

phpMyAdminを利用し、MySQLにデータベースblogを作成し、以下のSQLでテーブルguestbooksを作成する。

/* テーブルguestbooksの作成 */
CREATE TABLE guestbooks (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    comment TEXT,
    created DATETIME DEFAULT NULL,
    modified DATETIME DEFAULT NULL
) DEFAULT CHARSET=ujis;

/* データの登録 */
INSERT INTO guestbooks (name, comment, created)
    VALUES ('山田 太郎', 'はじめまして。', NOW());
INSERT INTO guestbooks (name, comment, created)
    VALUES ('鈴木 花子', 'よろしく。', NOW());
INSERT INTO guestbooks (name, comment, created)
    VALUES ('田村 次郎', 'こんにちは。', NOW());
テーブルguestbook作成.JPGテーブルguestbookデータ.JPG

データベースの接続設定

/cakephp/test/config/database.php

<?php
class DATABASE_CONFIG {

    var $default = array(
        'driver' => 'mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'root',
        'password' => '',
        'database' => 'blog',
        'encoding' => 'ujis'
    );
}
?>

modelの作成

/cakephp/test/models/guestbook.php

<?php
class Guestbook extends AppModel
{
    var $name = 'Guestbook';
}
?>

controllerの作成

/cakephp/test/controllers/guestbooks_controller.php

<?php
class GuestbooksController extends AppController {

    var $name = 'Guestbooks'; //controller名の定義

    function index() {
        $this->set('guestbooks', $this->Guestbook->find('all'));
    }

    function add() {
        if (!empty($this->data)) {
            if ($this->Guestbook->save($this->data)) {
                $this->flash('投稿内容を保存しました。', '/guestbooks');
            }
        }
    }

}
?>

viewの作成

/cakephp/test/views/guestbooks/index.ctp

<h1>ゲストブック<h1>
<p><?php echo $html->link('新規投稿', '/guestbooks/add'); ?></p> 
<table>
    <tr><th>Id</th><th>名前</th><th>コメント</th><th>訪問日</th></tr>
    <?php foreach ($guestbooks as $guestbook): ?>
        <tr>
            <td><?php echo $guestbook['Guestbook']['id']; ?></td>
            <td><?php echo $guestbook['Guestbook']['name']; ?></td>
            <td><?php echo $guestbook['Guestbook']['comment']; ?></td>
            <td><?php echo $guestbook['Guestbook']['created']; ?></td>
        </tr>
    <?php endforeach; ?>
</table>

/cakephp/test/views/guestbooks/add.ctp

<h1>訪問の記録</h1>
<?php echo $form->create('Guestbook'); ?>
<?php echo $form->input('name'); ?>
<?php echo $form->input('comment', array('rows'=>'3')); ?>
<?php echo $form->end(' 送信 '); ?>

完成画面

http://localhost/cakephp/test/guestbooks
LH_ゲストブック一覧.JPG

LH_ゲストブック投稿.JPG


選択肢 投票
参考になった 0  
ふつう 0  
参考にならなかった 0  

4. RSSをパースしてページわけしてみよう

RSSをパースして、ページわけしてみるというもの。たとえば30件RSSがあったら5個ごとに
ページわけしてみる。
フレームワークにはパース機能やページわけの機能が内包されている場合もあるので、フレ
ームワークでのライブラリの利用法なんかもわかってきそうです。 09/01/20

CakePHP1.2でのrss情報の表示

先ずはrss情報を取得する。
web_model.phpとrss.phpの2つの部品を用いる方法で行う。

↓参考としたページは2つ
http://blog.non-style.com/2007/06/cakephprss.html
http://mt-systems.rdy.jp/mtsys/homes/view/cakeRSSRead

web_modelをダウンロードし、
http://cakeforge.org/snippet/detail.php?type=package&id=18
/cakephp/test/models/web_model.phpのファイル名で保存した。
rssをダウンロードし、
http://cakeforge.org/snippet/detail.php?type=snippet&id=78
/cakephp/test/models/rss.phpのファイル名で保存した。

web_model画面.JPGrss_php画面.JPG

次に↓の手順に従い cURL機能をenabledにする。
http://phpspot.org/blog/archives/2008/02/xamppcurlopenss.html

↓<?php phpinfo() ?>で確認した画面
curl画面.JPG

【CakePHP1.2のコードの作成】
/cakephp/test/controllers/rsspages_controller.php

<?php
class RsspagesController extends AppController {

    var $name = 'Rsspages'; //controller名の定義
    var $uses = array('Rss'); //model Rssを使用

    function index() {
        $rss = $this->Rss->findAll("http://www.cakephp.jp/modules/rss/rss.php", 5, '+1 hour');
        if (!empty($rss['Error'])) {
            die("Error:{$rss['Error']}");
        }

        $this->set('items', $rss['Items']);
    }

}
?>

/cakephp/test/views/rsspages/index.ctp

<ul>
    <?php foreach ($items as $item): ?>
        <li>
            <?php e($html->link($item['title']['value'], $item['link']['value'])) ?>
        </li>
    <?php endforeach; ?>
</ul>

【実行画面】
CakePHPユーザ フォーラムのrssを5件表示したもの。 09/01/25 13:00現在
http://cakephp.jp/modules/newbb/
rss表示画面.JPG


選択肢 投票
参考になった 0  
ふつう 0  
参考にならなかった 0  

CakePHP1.2でのページわけ表示

CakePHP1.2には「paginet」ヘルパーが標準装備されている。
これはSQLでページわけを実現する。今回は「3.」で作成した「ゲストブック」で
paginetの使い方を確認した。 09/01/25

【CakePHP1.2のコードの作成】
/cakephp/test/controllers/guestbooks_controller.php

<?php
class GuestbooksController extends AppController {

    var $name = 'Guestbooks'; //controller名の定義

    function index() {
        $this->Guestbook->recursive = 0;
        $this->paginate['limit'] = 5;
        $this->set('guestbooks', $this->paginate());

    }

    function add() {
        if (!empty($this->data)) {
            if ($this->Guestbook->save($this->data)) {
                $this->flash('投稿内容を保存しました。', '/guestbooks');
            }
        }
    }

}
?>

/cakephp/test/views/guestbooks/index.ctp

<h1>ゲストブック<h1>
<p><?php echo $html->link('新規投稿', '/guestbooks/add'); ?></p> 
<table>
    <tr><th>Id</th><th>名前</th><th>コメント</th><th>訪問日</th></tr>
    <?php foreach ($guestbooks as $guestbook): ?>
        <tr>
            <td><?php echo $guestbook['Guestbook']['id']; ?></td>
            <td><?php echo $guestbook['Guestbook']['name']; ?></td>
            <td><?php echo $guestbook['Guestbook']['comment']; ?></td>
            <td><?php echo $guestbook['Guestbook']['created']; ?></td>
        </tr>
    <?php endforeach; ?>
</table>
<div class="paging">
    <?php echo $paginator->prev('<< 前へ', array(), null, array('class'=>'disabled')); ?>
    <?php echo $paginator->numbers(); ?>
    <?php echo $paginator->next('次へ >>', array(), null, array('class'=>'disabled')); ?>
</div>

【実行画面】
http://localhost/cakephp/test/guestbooks
paginate実行画面1.JPG

paginate実行画面2.JPG


選択肢 投票
参考になった 0  
ふつう 0  
参考にならなかった 0  

他者の解答例

他者の解答例も参考になります。
http://d.hatena.ne.jp/bobchin/20081218


選択肢 投票
参考になった 0  
ふつう 0  
参考にならなかった 0  

添付ファイル: filepaginate実行画面2.JPG 520件 [詳細] filepaginate実行画面1.JPG 543件 [詳細] filerss表示画面.JPG 530件 [詳細] filecurl画面.JPG 604件 [詳細] filerss_php画面.JPG 615件 [詳細] fileweb_model画面.JPG 598件 [詳細] fileLH_ゲストブック投稿.JPG 593件 [詳細] fileLH_ゲストブック一覧.JPG 585件 [詳細] fileテーブルguestbookデータ.JPG 645件 [詳細] fileテーブルguestbook作成.JPG 14186件 [詳細] fileLH_四則計算.JPG 671件 [詳細] filehellow_world表示.JPG 610件 [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-12-25 (水) 20:50:20 (1586d)