今までどこにもなかった『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 件のコメント:
コメントを投稿