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(日時)が降順で表示される

------------------------------------------------------------------------------------------------

[Education]
ProgramDeveloped.

[MHW]
MONSTER HUNTER: WORLD

[Links]
My Links.

[GoogleSearch]

[Special Thanks]
ちょびネット