CakePHP
**CakePHP**
- ダウンロードしたファイルを展開して公開ディレクトリに入れるだけ
- bake と呼ばれるコンソールプログラムで必要事項を入力するだけ自動生成
- version1.3と2.0以降はプログラムが変わるために注意
- Macメインで記述する
[MVC]
Model(モデル):データベースアクセスを担当するものです。
View(ビュー):画面表示を担当するものです。
Controller(コントローラー):ロジックを担当するものです。
[CoC]
Convention Over Configuration
- 設定よりも規約
------------------------------------------------------------------------------------------------
**設定方法**
- 非常に簡単
- アプリケーションではないのでインストールしなくても良い
- Macは要ファイル権限変更
1. CakePHPをダウンロード
- http://cakephp.org/
- ここにアクセス
- TOPページにある"download"からダウンロード
- zipフォルダを展開してhtdocsへ移動
- フォルダ名を[blog]に変更
2. 設定変更(窓は不要、林檎だけ)
- ファイル書き込み権限を変更しておかなければエラーになる
- 展開したファイル内にある2フォルダを選択して[情報を見る]メニューを選ぶ
- [共有とアクセス権]にある[everyone]のアクセス権を[読み/書き]に変更
// app -> temp
// lib -> Caka -> Cache
------------------------------------------------------------------------------------------------
**ファイル構成**
- 基本は[app]ファイルしか使用しない
[app]
- Webアプリケーションの中心となるフォルダ
- この中のファイルをMVCで所定の場所に作成する
[cake]
- CakePHPが利用するプログラムファイルを保管
- デフォルトでは[tests]
[lib]
- CakePHPライブラリのまとめ
- CakePHPの本体プログラム
- 変更することは無い
[plugins][vendors]
- 触らない
------------------------------------------------------------------------------------------------
**[app]フォルダ詳細**
- MVCのファイルが格納されている
- [Controller],[Model],[View]
[Config]
- CakePHPで使う各種の設定ファイル
- 命名規則を重視するが、ベースとなる設定ファイルは必要
[Console]
- コンソールプログラム
- ファイル自動生成の時に使用
[Controller]
- MVCの"C"
- コントロールプログラムを格納
[Lib]
- ライブラリフォルダ
- デフォルトは空っぽ
[Locale]
- ロケール(国別情報)に関するフォルダ
- 各国語の対応ファイルを入れることで国際化対応可
[Model]
* MVCの"M"
- モデルに関するプログラムを格納
[Plugin]
- プラグインを使って拡張するときに利用
- デフォルトは空っぽ
[Test]
- テストに関するファイルが格納されている
[tmp]
- 一時置き場
- 一時ファイルやログファイルを保存
[Vendor]
- プログラムを拡張するときに用いる
- デフォルトは空っぽ
[View]
* MVCの"M"
- 表示に関するファイル類を内容種類別にフォルダ分けして保存
[webroot]
- ルートで表示されるページのファイル類
- html,css,Javascriptなど
**CakePHPにアクセス**
- CakePHPフォルダを任意の名称に変更しhtdocs内へ格納
- アクセスすると赤・緑・黄色のメッセージが表示
- 上2つは赤くエラーになっている
[セキュリティソルト]
Notice (1024): Please change the value of 'Security.salt' in APP/Config/core.php to a salt value specific to your application. [CORE/Cake/Utility/Debugger.php, line 846]
[セキュリティシード]
Notice (1024): Please change the value of 'Security.cipherSeed' in APP/Config/core.php to a numeric (digits only) seed value specific to your application. [CORE/Cake/Utility/Debugger.php, line 850]
- そのまま使用するとセキュアじゃないから変えなさい…ってこと
- 黄色の注意
Your database configuration file is NOT present.
Rename APP/Config/database.php.default to APP/Config/database.php
- データベースが無いよ…ってこと
DebugKit is not installed. It will help you inspect and debug different aspects of your application.
You can install it from GitHub
- DebugKitが無いよ…ってこと
- debug_kit-masterをダウンロード
https://github.com/cakephp/debug_kit
- [Clone in Desktop]の下にある[Download ZIP]をダウンロードする
- ファイルを展開してapp/Pluginへ格納
- ファイル名を[debug_kit-master]から[DebugKit]に変更
- app/Config/bootstrap.phpの末尾に下記を追記して保存
CakePlugin::load('DebugKit');
- これで緑に変わります
- この[DebugKit]を全てのコントローラーで読み込まれるようにする
- app/Controller/AppController.phpの{}内を追記
class AppController extends Controller {
public $components = array('DebugKit.Toolbar','Session');
}
- これで画面の右上にケーキのアイコンが出現
- ケーキのアイコンをクリックでツールバーが展開
- 'Session'を入れないとsetFlash('メッセージ表示')でエラー発生
- SQLのログも集約する
- app/View/Layouts/default.ctpの最後をコメントアウトする
echo $this->element('sql_dump');
?>
------------------------------------------------------------------------------------------------
**書き込み権限**
- [tmp]フォルダ変更
…よくわからん
------------------------------------------------------------------------------------------------
**データベース作成**
- ターミナルを起動し下記を入力
cd /Applications/MAMP/Library/bin/
- MySQLを実行
./mysql -u root -p
- この後にパスワードを入力
Enter password: 1234
- create文を記述
create database if not exists blog default character set utf8;
- userを設定(ユーザー名: dbuser ,パスワード: 1234)
grant all on blog.* to dbuser@localhost identified by '1234';
- パスを通しておくなら下記を実行(要再起動)
export PATH=$PATH:/Applications/MAMP/Library/bin
**[Config]を変更する**
- app/Config/database.php.defaultを複製(コピー)する
- 複製したファイル名をdatabase.phpに変更し展開
- 下の方(67行目)にあるdefault設定4箇所を変更
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'dbuser', // 変更
'password' => '1234', // 変更
'database' => 'blog', // 変更
'prefix' => '',
'encoding' => 'utf8' // コメントアウトを外す
);
- 86行目の文字コード設定もコメントアウトを外す
public $test = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'user',
'password' => 'password',
'database' => 'test_database_name',
'prefix' => '',
'encoding' => 'utf8' // コメントアウトを外す
);
- これで黄色の注意が消えたかを確認
------------------------------------------------------------------------------------------------
**開発開始**
- 生地…ではなく記事の一覧を表示
- 個別記事を表示
- 追加
- 編集
- 削除
====
Model(Model/post.php)
-- mysql table
Controller(Controller/PostsController.php)
- index
- view
- add
- edit
- delete
View(View/Post/)
- index.php
- view.php
- add.php
- edit.php
**コントローラーの命名規則**
*Controller/PostsController.phpのPostsは複数形表記
*Controllerのメソッド名とViewのファイル名は同一にする
*ファイル名やクラス名などは"キャメル記法"
*大文字小文字が同じでないとダメ
------------------------------------------------------------------------------------------------
**Table作成**
- ターミナルを起動し下記を入力
cd /Applications/MAMP/Library/bin/
- MySQLを実行
./mysql -u root -p
- この後にパスワードを入力
Enter password: 1234
- Databaseを指定
use blog
- Table作成
create table posts(
id int not null auto_increment primary key,
title varchar(50),
body text,
created datetime default null,
modified datetime default null
)character set utf8;
- 正しく作成できているかを確認
desc posts;
- あらかじめデータを入れておく
insert into posts(title,body,created,modified) values
('title1','body1',now(),now()),
('title2','body2',now(),now()),
('title3','body3',now(),now());
- 正しく入力されているかを確認
select * from posts;
------------------------------------------------------------------------------------------------
**雛形作成**
- 先に入れ物を用意しておく
- [Model]と[Controller]に新規phpファイルを作成
- 右クリックで新規ファイル作成が可能になるアプリ → XtraFinder
[Model]
- Post.phpを作成
class Post extends AppModel{
}
?>
[Controller]
- PostController.phpを作成
class PostController extends AppController{
public $scaffold;
// $scaffold; を付与すると、
// http://localhost/blog/posts/ へアクセスで
// phpMyAdminみたいに編集が可能
}
?>
- ブラウザで確認次第、$scaffoldをコメントアウト
------------------------------------------------------------------------------------------------
**記事一覧を表示する**
[Controller]
- PostController.phpを編集
// http://localhost/blog/posts/
class PostController extends AppController{
// public $scaffold;
public $helpers = array('Html','Form');
public function index(){
$this -> set('posts', $this->Post->find('all'));
}
}
?>
- [Controller]-- index-- /blog/Posts/
[View]
- [posts]フォルダを作成
- 作成した[posts]内に[index.ctp]を作成
<h2>
記事一覧
</h2>
<ul>
<?php foreach($posts as $post) : ?>
<li>
<?php
debug($post);
?>
</li>
<?php endforeach; ?>
</ul>
- http://localhost/blog/posts/にアクセス
- 記事一覧が表示されているかを確認
- これをlocalhost/blog/で表示させるようにする
[config]
- routes.php 27行目を編集
Router::connect('/', array('controller' => 'posts', 'action' => 'index', 'home'));
- ページタイトル表示
[View]->[Layouts]->[default.ctp]の25行目を編集
- デフォをコメントアウトして追記
:
fetch('title');*/ ?>
[Controller]->[PostsController.php]
// http://localhost/blog/
class PostsController extends AppController{
// public $scaffold;
public $helpers = array('Html','Form');
public function index(){
$this->set('posts', $this->Post->find('all'));
$this->set('title_for_layout', '記事一覧');
}
}
- http://localhost/blog/ へアクセスし"Title"確認する。
------------------------------------------------------------------------------------------------
**find()** [参考]
- [PostController.php]内で使用しているfind()の利用方法
public function index(){
// 配列化した条件を追記
$piyo= array(
'order' => 'modified desc',
'limit' => 2
);
// find()の第二引数に追記した変数を代入
$this->set('posts', $this->Post->find('all' ,$piyo));
$this->set('title_for_layout', '記事一覧');
}
- 表示が2件でmodified(日時)が降順で表示される
------------------------------------------------------------------------------------------------