20090307cakephphandson 016. 公式サイト
http://www.cakephp.org/
6
27. 対処方法
(推奨)httpd.conf を変更し、apache再起動
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule rewrite_module modules/mod_rewrite.so
コメント解除
LoadModule setenvif_module modules/mod_setenvif.so
Apacheの設定が変更できない場合は core.php
//Configure::write('App.baseUrl', env('SCRIPT_NAME'));
コメント解除
後者の場合は今後のURLに常にindex.phpを付ける事に
/pages/home → index.php/pages/home
27
28. データベーステーブルの作成 (10.1.2)
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());
28
30. 設定ファイル (database.php)の作成(10.1.3)
var $default = array(
'driver' => 'mysql',
'persistent' => 'false',
'host' => 'localhost',
'port' => '',
'login' => 'cakeBlog',
'password' => 'c4k3-rUl3Z',
'database' => 'cake_blog_tutorial',
'schema' => '',
'prefix' => '',
'encoding' => 'utf8'//日本語ではencodingを指定しましょう。
);
app/config/database.php.default をコピーして作成
30
36. Controllerへのアクションの追加
<?php
class PostsController extends AppController {
var $name = 'Posts';
//var $scaffold; //丌要なので消す
function index() {
$this->set('posts', $this->Post->find('all'));
}
}
Viewに対してpostsという名前でデータを渡す
?>
Index メソッドを追加した事により、/posts/index へアク
セスされた場合に実行する処理を定義できます
36
41. /posts/index の実行結果
/posts/view/{id} へのリンク
PostsControllerにviewアクションはないのでリンク先はエ
ラー画面
41
42. Controllerへのアクションの追加
<?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());
}
}
?>
/posts/view 時の処理を追加
42
43. Viewの追加 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>
/posts/view 時の画面を追加
43
46. Viewの追加 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');
?>
/posts/add 時の画面を追加
FormHelperでフォームを出力
46
47. validateの追加 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))
);
}
?>
47
51. Controllerへのアクションの追加(抜粋)
class PostsController extends AppController {
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');
}
}
}
51
52. Viewの追加 edit.ctp
<h1>Edit Post</h1>
<?php
echo $form->create('Post',array(‘action’=>’edit’));
echo $form->hidden(‘id’);
echo $form->input('title');
echo $form->input('body', array('rows' => '3'));
echo $form->input('id', array('type'=>'hidden'));
echo $form->end('Save Post');
?>
/posts/edit 時の画面を追加
ほとんどAddと同じだが、少しだけ違う
52
60. シュガーを使うと
array(‘action’ => ‘edit’, ‘method’ => ‘GET’))
aa(‘action’,‘edit’,’method’,’GET’))
echo htmlspecialchars($hoge,ENT_QUOTES);
e(h($hoge));
煩雑なコードを大胆に短くできる
60
65. 実行結果
あとは自由にCSSなどを設定すればOK
Copyright © YusukeAndo. 2009 - . All rights reserved.
70. 対象テーブル・主キーの指定例
class User extends AppModel {
var $name = ‘User';
var $useTable = ‘user_account’; 使用するテーブル名
var $primaryKey = ‘login_id’; 主キーのカラム名
}
暗黙的なルールに従うよりも把握しやすい場合も
既存のテーブルでCakeを使う場合の必須TIPS
70
72. データ取得
class PostsController extends AppController {
function hoge() {
$param = array(
'conditions' => aa(
'id >',1
),
'order' => 'title DESC'
);
$data = $this->Post->find('all',$param);
$this->set('posts',$data);
$this->render('index');
}}
パラメータの渡し方によってさまざまなクエリを実行する事が可能
72
76. ヘルパーの使用例
class PostsController extends AppController {
$helpers = array(‘Html’,’Form’,’Text’);
}
<style>
.highlight{
background-color:#FFFF00;
}
</style>
<p><?php echo $text->highlight($post['Post']['body'],quot;本文
quot;)?></p>
76
84. 質疑応答
ご静聴ありがとうございました。
84