2012年2月25日

CakePHPブログチュートリアル

今までどこにもなかった『CakePHPブログチュートリアル』の説明の決定版!!

-------------------------------------------------------------------------------------------------------------
ちなみにこの記事は
http://book.cakephp.org/ja/view/876/%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB
上記サイト 11 開発例 11.1 CakePHPブログチュートリアル に沿って、CakePHPの導入例を説明します。
-------------------------------------------------------------------------------------------------------------


<どこよりもやさしいCakePHPチュートリアルの操作手順書>

1) CakePHPをダウンロード
CakePHPをダウンロードして、サーバーにアップロードします。

・ CakePHPのダウンロードをしたサイト → http://cakephp.jp/

・ 今回はCakePHPの "ver.1.3.14安定版" を使用します。

・ ダウンロードしたフォルダ名を"cakephp"に変更します。(←本当はフォルダ名は何でもいいです。)

・ "cakephp"フォルダをサーバーのドキュメントルート内にFTPソフト等を使用してアップロードします。

・ アップロードすると以下のようなディレクトリ構成になります。
/cakephp
/app
/cake
/plugins
/vendors
.gitignore
.htaccess
index.php
README



2) ブログデータベースの作成
MySQL(データベース)にテーブルを作成します。

・ MySQLがインストールしてあって、さらにデータベースが存在するものとして話を進めます。

・ 『phpMyAdmin』にログインして、データベース内で以下のSQL文を実行することで"posts"テーブルの作成をします。
CREATE TABLE posts (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(50),    body TEXT,
    created DATETIME DEFAULT NULL,
    modified DATETIME DEFAULT NULL
);

・ 『phpMyAdmin』にログインして、先ほどと同じデータベース内にて
以下のSQL文を実行することで"posts"テーブル内にサンプルとなるレコードを3行追加します。
INSERT INTO posts (title,body,created)
    VALUES ('タイトル', 'これは、記事の本文です。', NOW());
INSERT INTO posts (title,body,created)
    VALUES ('またタイトル', 'そこに本文が続きます。', NOW());
INSERT INTO posts (title,body,created)
    VALUES ('タイトルの逆襲', 'こりゃ本当に面白そう!うそ。', NOW());



3) Cakeのデータベース設定
CakePHP側にMySQL(データベース)への接続情報の設定をします。

・ /app/config/database.php.default のファイルをコピーし、コピーしたファイル名を"database.php"にします。

・ コピーした"database.php"は同一ディレクトリに配置します。

・ "database.php"のファイルを開きます。

・ 76~85行目に記述されている$default配列にCakePHPがデータベースに接続する設定が記述されてます。
host, login, password, databaseにMySQLに接続する設定を記述しす。
//'endoding' => 'utf8', となってるのを"//"を削除し 'encoding' => 'utf8', にします。

・ http://www/.ドメイン名/cakephp/ を開いてみて、下のようなイメージが表示されたら"DB接続"が成功です。
※上記の一連操作はサーバー側で操作するのではなく、ローカル側で操作したものをアップロードしても大丈夫です。





4) 追加の設定
セキュリティハッシュ用のランダムな文字列を、初期値から任意の文字列に変更をします。

・ /app/config/core.php のファイルを開きます。

・ 204行目の Configure::write('Security.salt', '任意の文字列'); を変更します。

・ 209行目の Configure::write('Security.cipherSeed', '任意の文字列'); を変更します。

・ /app/tmp のディレクトリのパーミッションを書き込みできるように変更します。
※上記の一連操作はサーバー側で操作するのではなく、ローカル側で操作したものをアップロードしても大丈夫です。




5) mod_rewriteについて
画面表示がおかしい場合の対処方法です。

・ 問題なく表示できたので割愛します。

・ もし問題が起こったら他の人に助けを求めてください。




6) Postモデルの作成
サンプル(投稿記事)の作成とアップロードをします。

・ 下記のソースを記述した"post.php"というファイルを作成します。
<?php
class Post extends AppModel{
 var $name = 'Post';
}
?>
作成した"post.php"ファイルを/app/modelsディレクトリ内にアップロードします。




7) Postsコントローラの作成
コントローラ側のロジックの作成とアップロードをします。

・ 下記のソースを記述した"posts_controller.php"というファイルを作成します。
<?php
class PostsController extends AppController {
    var $name = 'Posts';
  function index() {
        $this->set('posts', $this->Post->find('all'));
   }
}
?>

・ 作成した"posts_controller.php"ファイルを/app/controllersディレクトリ内にアップロードします。




8) Postビューの作成
ビューファイルの作成とアップロードと記事の表示をします。

・ 下記のソースを記述した"index.ctp"というファイルを作成します。
<h1>ブログの投稿</h1>
<table>
    <tr>
        <th>Id</th>
        <th>タイトル</th>
        <th>作成日</th>
    </tr>
    <!-- ここから、$posts配列をループして、投稿記事の情報を表示 -->
    <?php foreach ($posts as $post): ?>
    <tr>
        <td><?php echo $post['Post']['id']; ?></td>
        <td>
            <?php echo $html->link($post['Post']['title'], "/posts/view/".$post['Post']['id']); ?>
        </td>
        <td><?php echo $post['Post']['created']; ?></td>
    </tr>
    <?php endforeach; ?>
</table>

・ /app/viewsディレクトリ内に新たに/postsディレクトリを作成します。
※ディレクトリ構成は多分こんな感じになります。
/app
/views
      /element
      /errors
      /heopers
      /layouts
      /pages
      /posts ←コレを作成
      /scaffolds

・ 作成した"index.ctp"ファイルを/app/views/postsディレクトリ内にアップロードします。

・ http://ドメイン名/cakephp/posts/index を開くと下記のようなイメージが表示されます。
※ただし、タイトル部分のリンクをクリックすると、エラーが表示されます。




・ /app/controllersディレクトリ内にある"posts_controller.php"ファイルを下記のソースに変更(追記)します。
<?php
class PostsController extends AppController {
    var $name = 'Posts';
    function index() {
        $this->set('posts', $this->Post->find('all'));
        }
    function view($id = null) {
        $this->Post->id = $id;
        $this->set('post', $this->Post->read());
    }
}
?>

・ 下記のソースを記述した"view.ctp"というファイルを作成します。
<h1><?php echo $post['Post']['title']?></h1>
<p><small>Created: <?php echo $post['Post']['created']?></small></p>
<p><?php echo $post['Post']['body']?></p>

・ 作成した"view.ctp"ファイルを/app/views/postsディレクトリ内にアップロードします。

・ http://ドメイン名/cakephp/posts/index 再度を開き、タイトル部分のリンクをクリックします。

・ 今度はエラーではなく、下のようなイメージが表示されるようになります。





9) 記事の追加
記事の投稿をできるようにします。

・ /app/controllersディレクトリ内にある"posts_controller.php"ファイルを下記のソースに変更(追記)します。
<?php
class PostsController extends AppController {
    var $name = 'Posts';
    function index() {
        $this->set('posts', $this->Post->find('all'));
        }
    function view($id = null) {
        $this->Post->id = $id;
        $this->set('post', $this->Post->read());
    }
    function add() {
        if (!empty($this->data)) {
            if ($this->Post->save($this->data)) {
            $this->flash('記事は保存されました。','/posts');
            }
        }
    }
}
?>



10) データのバリデーション
記事の投稿をできるようにします。

・ 下記のソースを記述した"add.ctp"というファイルを作成します。
<h1>記事の追加</h1>
<?php
echo $form->create('Post');
echo $form->input('タイトル');
echo $form->input('本文', array('rows' => '3'));
echo $form->end('記事の保存');
?>

・ 作成した"add.ctp"ファイルを/app/views/postsディレクトリ内にアップロードします。

・ 以下の操作は11:投稿記事の削除の作業後に行うと確認できます。

・ http://ドメイン名/cakephp/posts/index 再度を開きます。

・ 画面左上に新たに表示された"記事の追加"というリンクをクリックします。

・ http://www/.ドメイン名/cakephp/posts/add を開きます。

・ /app/modelsディレクトリ内の"post.php"ファイルを下記のソースに変更(追記)します。
<?php
class Post extends AppModel {
    var $name = 'Post';
    var $validate = array(
        'titile' => array(
            'rule' => array('minLength', 1)
        ),
        'body' => array(
            'rule' => array('minLength', 1)
        )
    );
}
?>

11) 投稿記事の削除
記事の削除をできるようにします。
・ /app/controllersディレクトリ内にある"posts_controller.php"ファイルを下記のソースに変更(追記)します。
<?php
class PostsController extends AppController {
 var $name = 'Posts';
    function index() {
     $this->set('posts', $this->Post->find('all'));
        }
    function view($id = null) {
       $this->Post->id = $id;
        $this->set('post', $this->Post->read());
    }
    function add() {
        if (!empty($this->data)) {
            if ($this->Post->save($this->data)) {
         $this->flash('記事は保存されました。','/posts');
            }
        }
    }
    function delete($id) {
        $this->Post->del($id);
        $this->flash('id:'.$id.'の記事は削除されました。', '/posts');
    }
}
?>
・ /app/views/postsディレクトリ内の"index.ctp"ファイルを下記のソースに変更(追記)します。
<h1>ブログの投稿</h1>
<p><?php echo $html->link('記事の追加', '/posts/add'); ?></p>
<table>
    <tr>
        <th>Id</th>
        <th>タイトル</th>
        <th>操作</th>
        <th>作成日</th>
    </tr>
    <!-- ここから、$posts配列をループして、投稿記事の情報を表示 -->
    <?php foreach ($posts as $post): ?>
    <tr>
        <td><?php echo $post['Post']['id']; ?></td>
        <td>
            <?php echo $html->link($post['Post']['title'], "/posts/view/".$post['Post']['id']); ?>
        </td>
        <td>
        <?php echo $html->link('削除', "/posts/delete/{$post['Post']['id']}", null, '削除しますか?'); ?>
        </td>
        <td><?php echo $post['Post']['created']; ?></td>
    </tr>
    <?php endforeach; ?>
</table>

・ http://ドメイン名/cakephp/posts/index 再度を開きます。

・ 操作の削除のリンクをクリックします。




12) 投稿記事の編集
記事の編集をできるようにします。

・ /app/controllersディレクトリ内にある"posts_controller.php"ファイルを下記のソースを追記します。
※追記する位置はコレまでのposts_controller.phpへの追記手順を参照してください。
※頭を使わないと覚えないから、作業の意味がない。
function edit($id = null) {
    $this->Post->id = $id;
    if (empty($this->data)) {
        $this->data = $this->Post->read();
    } else {
        if ($this->Post->save($this->data['Post'])){
        $this->flash('その記事は既に投稿されています。','/posts');
        }
    }
}

・ 下記のソースを記述した"edit.ctp"というファイルを作成します。
<h1>記事の編集</h1>
<?php
echo $form->create('Post', array('action' => 'edit'));
echo $form->input('タイトル');
echo $form->input('本文', array('rows' => '3'));
echo $form->input('id', array('type'=>'hidden'));
echo $form->end('記事の保存');
?>

・ 作成した"edit.ctp"ファイルを/app/views/postsディレクトリ内にアップロードします。

・ /app/views/postsディレクトリ内の"index.ctp"ファイルを下記のソースに変更(追記)します。
<h1>ブログの投稿</h1>
<p><?php echo $html->link('記事の追加', '/posts/add'); ?></p>
<table>
    <tr>
        <th>Id</th>
        <th>タイトル</th>
        <th>操作</th>
        <th>作成日</th>
    </tr>
    <!-- ここから、$posts配列をループして、投稿記事の情報を表示 -->
    <?php foreach ($posts as $post): ?>
    <tr>
        <td><?php echo $post['Post']['id']; ?></td>
        <td><?php echo $html->link($post['Post']['title'], "/posts/view/".$post['Post']['id']); ?>
        </td>
        <td><?php echo $html->link('削除', "/posts/delete/{$post['Post']['id']}", null, '削除しますか?'); ?>
            <?php echo $html->link('編集', "/posts/edit/".$post['Post']['id']); ?>
        </td>
        <td><?php echo $post['Post']['created']; ?></td>
    </tr>
    <?php endforeach; ?>
</table>

・ http://ドメイン名/cakephp/posts/index 再度を開きます。

・ 操作項目の"編集"のリンクをクリックすると下のようなイメージ画面に遷移します。




13) ルーティング(Routes)
ルートの設定をデフォルトからユーザー設定に変更します。

・ 飛ばします。

・ ルートの設定が必要だと思ったら、勉強します。




14) まとめ
やったことのおさらいをします。

・ CakePHPをダウンロードしてアップロード

・ MySQLにテーブルの作成

・ database.phpにデータベース接続情報の設定

・ core.phpのセキュリティ部分の記述のデフォルト値の変更

・ /app/tmpディレクトリのパーミッションの変更

・ 新規、変更、削除、表示といった基本機能の割り振りを記述したposts_controller.phpの作成

・ トップページとなるindex.ctpの作成

・ 操作で遷移する画面 view.ctp add.ctp edit.ctp の作成

・ モデル post.php の作成



以上です。

プログラムをはじめて45日目の初心者が作成したマニュアルですが
初心者は初心者の気持ちがわかる!!
きっとかゆいところに手が届いたはずです。

0 件のコメント:

コメントを投稿