CakePHP ブログチュートリアル

line

今更ですが、CakePHPの公式ブログチュートリアルをやってみました!

環境及びバージョン
・CentOS: 5.4
・CakePHP: 1.3.3
・MySQL: 5.0.77

ダウンロード

1
2
3
4
5
6
cd /tmp/
wget http://github.com/cakephp/cakephp/tarball/1.3.3
tar xvzf cakephp-cakephp-1.3.3-0-gf01b4ae.tar.gz -C /var/www/www.yourdomain.jp/
cd /var/www/www.yourdomain.jp
mv cakephp-cakephp-efb6e08 cakephp133
rm /tmp/cakephp-cakephp-1.3.3-0-gf01b4ae.tar.gz

Apacheの設定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cd /etc/httpd/conf.d/
 
vi ○○.conf
<VirtualHost xxx.xxx.xxx.xxx:80>
  ServerName www.yourdomain.jp:80
  DocumentRoot /var/www/www.yourdomain.jp/cakephp133
  ServerAdmin webmaster@yourdomain.jp
  ErrorLog logs/error_log-www.yourdomain.jp
  CustomLog logs/access_log-www.yourdomain.jp combined env=!no_log
</VirtualHost>
<Directory /var/www/www.yourdomain.jp/cakephp133>
  AllowOverride All
  Options -MultiViews
  Order allow,deny
  Allow from all
</Directory>
 
service httpd configtest
service httpd restart

データベースの作成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE DATABASE blog_test;
GRANT ALL PRIVILEGES ON blog_test.* TO 'test01'@'localhost' IDENTIFIED BY 'pass01';
 
use blog_test;
CREATE TABLE posts (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(50),
    body TEXT,
    created DATETIME DEFAULT NULL,
    modified DATETIME DEFAULT NULL
);
 
#サンプルデータ
INSERT INTO posts (title,body,created) VALUES ('タイトル', 'これは、記事の本文です。', NOW());
INSERT INTO posts (title,body,created) VALUES ('またタイトル', 'そこに本文が続きます。', NOW());
INSERT INTO posts (title,body,created) VALUES ('タイトルの逆襲', 'こりゃ本当に面白そう!うそ。', NOW());

データベースの設定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cd app/config/
cp database.php.default database.php
 
vi database.php
var $default = array(
    'driver' => 'mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'test01',
    'password' => 'pass01',
    'database' => 'blog_test',
    'prefix' => '',
    'encoding' => 'utf8',
);

その他の設定

1
2
3
4
5
6
#/tmpディレクトリを書き込めるようにする。
chown -R apache ../tmp
 
#セキュリティ設定
vi core.php
Configure::write('Security.salt', 'ランダムな文字列');

mod_rewriteの確認

1
2
3
LoadModule rewrite_module libexec/httpd/mod_rewrite.so
AddModule mod_rewrite.c
AllowOverride All

Postモデルの作成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cd ../models
touch post.php
 
vi post.php
<?php
class Post extends AppModel
{
    var $name = 'Post';
 
    var $validate = array(
        'title' => array(
            'rule' => array('minLength', 1)
        ),
        'body' => array(
            'rule' => array('minLength', 1)
        )
    );
}
?>

Postコントローラの作成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
cd ../controllers
touch posts_controller.php
 
vi 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('Your post has been saved.','/posts');
            }
        }
    }
    //記事の削除
    function delete($id) {
        $this->Post->delete($id);
        $this->flash('The post with id: '.$id.' has been deleted.', '/posts');
    }
    //記事の編集
    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('Your post has been updated.','/posts');
            }
        }
    }
}
?>

Postビューの作成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
cd ../views
mkdir posts
cd posts
touch index.ctp
touch view.ctp
touch add.ctp
touch edit.ctp
 
vi index.ctp
<h1>Blog posts</h1>
<p><?php echo $html->link("Add Post", "/posts/add"); ?></p>
<table>
    <tr>
        <th>Id</th>
        <th>Title</th>
        <th>Created</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']);?>
            <?php echo $html->link(
                'Delete',
                "/posts/delete/{$post['Post']['id']}", 
                null,
                'Are you sure?'
            )?>
            <?php echo $html->link('Edit', '/posts/edit/'.$post['Post']['id']);?>
        </td>
        <td>
        <td>
            <?php echo $post['Post']['created']; ?>
        </td>
    </tr>
    <?php endforeach; ?>
</table>
 
vi 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>
 
vi add.ctp
<h1>Add Post</h1>
<?php
echo $form->create('Post');
echo $form->input('title');
echo $form->input('body', array('rows' => '3'));
echo $form->end('Save Post');
?>
 
vi edit.ctp
<h1>Edit Post</h1>
<?php
    echo $form->create('Post', array('action' => 'edit'));
    echo $form->input('title');
    echo $form->input('body', array('rows' => '3'));
    echo $form->input('id', array('type'=>'hidden')); 
    echo $form->end('Save Post');
?>

ルーティング

1
2
3
4
cd ../../config
vi routes.php
//Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::connect ('/', array('controller'=>'posts', 'action'=>'index'));

表示確認

http://www.yourdodmain.jp/

はい、記事の閲覧、追加、編集、削除、すべて正しく動作しました~! (^_^)/~

(2022/06/01) トラックバックも一時無効にしました。
(2022/01/29) コメントスパムが多くなりましたので、コメントの投稿を一時無効にしました。