4.コントローラを作る#3表示用のアクションを作る

4.コントローラを作る#3表示用のアクションを作る

そんでもってアクションを作るんですがここからがCakePHPの本領発揮というか、便利な関数がたくさんあるようです

参照URL:CakePHPマニュアル:ビューとの連携
参照URL:CakePHPマニュアル:CakePHPブログチュートリアル»Postsコントローラの作成

とてもよく使われているのが

set($var, $value);
$valueの値を$varに変数として入れてくれる
中身は配列でもなんでもOK

ってことなので…

今回は、テーブルの値(配列)を全て変数に放り込みたいですのでコレ使います。ってか、ビューにデータを渡すのは基本的にはコレみたい

そんで…テーブルの値をとってくるのは

findAll($conditions,$fields,$order,$limit,$page,$recursive)
$conditions:配列そのものまたはwhere文
$fields:フィールド
$order:並び
$limit:読む数
$page:読むページ数
$recursive:モデルのアソシエーションを何階層表示するか(??)
参考URL:http://sandman.s6.xrea.com/nucleus/item-72.html
findAllは1.2から非推奨となっています。代わりにfind('all')を使います
参照URL:CakePHPマニュアル:findAll

を使います。はっきり言って最後の変数とか意味不明だけども

で。$board って変数に、テーブルboardの値全部を放り込むから…
テーブルboardの値全部は全部だから変数指定しないで

$this->Board->findl('all');

それを変数に放り込むから

$this->set("boards",$this->Board->findl('all'));

結果…
■/app/controllers/boards_controller.php■編集

<?php
class BoardsController extends AppController
{
   var $name ="Boards";
   var $uses = array("Board");

   function index(){
      $this->set("boards",$this->Board->find('all'));
   }
   function write(){
      //書き込むのよ
   }
}
?>

としました。。。こんだけ?こんだけです。w03.gif

で。書き込みのアクションを作ってみたいんですが…

どんな風にデータが受け渡されて表示されるかを見てみたいんでここでとりあえずいったんビューに行きますですkira01.gif

続きます




4.コントローラを作る#2コントローラの中身

4.コントローラを作る#2コントローラの中身

とりあえず

<?php
class BoardsController extends AppController
{
・・・・いろんな処理
}
?>

のいろんな処理の所を作っていきます
いろんなサイトを調べたら

var $name = “なんとか”;
var $uses = array(”なんとか”);

てのを必ず入れているようです…調べたら

$nameはphp4で現在のクラス名をきちんと返してくれない時に指定しましょう
$usesはモデル名を指定しましょう(ただしきちんとクラス名を「名前複数形+Controller」にしていれば自動的にモデルを読み込む)
[array]を使ってるんでもちろん、配列として扱ってくれるので複数OK

とのことなんで…「php5の環境下で動かす」&「名前はきっちりつけた」&「使うモデルは1個」の今回の場合は無くてもいいような気がするんですがおまじない的に付けてみるですよ

なんで…

<?php
class BoardsController extends AppController
{
var $name = "Boards";
var $uses = array("Board");
}
?>

としました

ここまではただ変数を指定してあげただけなんで、これから本題の動き(アクション)を作っていきます

アクションはfunctionで作っていってあげるようなので、今回やりたい「書き込む(write)と見る(view)」を作るんですが…

ここで名前のつけかた

function hogehoge(){
  いろんな作業
}

「hogehoge.ctp」というビュー(後で作る)を作ることでそのアクションが呼び出される

ということなんで、一番最初はやっぱり一覧表示よねheart02.gifということで、閲覧表示は「view」ではなくて「index」で作ることにします

なんでこんな骨組みを作りました

■/app/controllers/boards_controller.php■編集

<?php
class BoardsController extends AppController
{
   var $name = "Boards";
   var $uses = array("Board");

   function index(){
      //表示するのよ
   }
   function write(){
      //書き込むのよ
   }
}
?>

続きます




4.コントローラを作る#1コントローラって何?

4.コントローラを作る#1コントローラって何?

ここまでで…テーブルができた。モデルができてテーブル指定した。次はコントローラ。

コントローラってのは…
動きを設定するらしいので、多分動きのキモになる分かと予想。

参照URL:CakePHPマニュアル:コントローラ

で。命名規則と作る場所は…

/app/controllers/テーブル名の複数形小文字_controller.php

になるらしいので

/app/controllers/boards_controller.php

としました

で中身

<?php
class クラス名 extends AppController
{
   //・・・・いろんな処理
}
?>

【クラス名の命名規則】
1.大文字で始める
2.複数形で指定して「Controller」を末尾につける

となるようなので…

■/app/controllers/boards_controller.php■

<?php
class BoardsController extends AppController
{
   //・・・・いろんな処理
}
?>

とクラス名をつけてあげます

で…やりたいことは掲示板だし

・書き込み
・一覧を見せる

とりあえずこの2点。まぁ、他にも編集とか削除とか色々あるけども今はとりあえずシンプルにこの2点

次に続きますw01.gif




3.モデルを作る

ここからが未知の世界…hatena03.gif

モデルとやらを作ります。
まずまずモデルの命名規則と、どこに作ったらいいか。。

app/models/テーブル名の単数形.php

としなければいけないようです。
なので、今回作ったテーブルは「boards」なんで、

app/models/ ディレクトリ内に、

app/models/board.php

を作成します

中身はというと…

<?php
class モデルの名前の最初を大文字にしたやつ extends AppModel {
   var $name = 'モデルの名前の最初を大文字にしたやつ';
}
?>

になるそうなので

■app/models/board.php■

<?php
class Board extends AppModel {
   var $name = 'Board';
}
?>

としました




2.データベースを作る

2.データベースを作る

CakePHPでデータベースも作れるのかと…勘違いhatena02.gif

テーブル自体はCakePHPでは作れないようなので…
普通にphpmyadminで作成することにします

enpitu02.gif ここでテーブル名の命名規則

1. なるべく英単語を使う。
2. テーブル名は複数形で。
3. 単語の区切りはアンダーバー(_)を使う。複数形になるのは最後尾の単語のみ

で…複数形は「s」を付けるだけじゃダメできちんとした複数形でなくてはいけないです

なので、今回はbbsと付けたかったんですが、複数形が分からない(英語苦手)のでboardの複数形「boards」という名前のテーブルを作成します。

enpitu02.gif フィールド名の命名規則

フィールド名は自由に付けれるようですが以下のような便利な命名規則があります。めんどいけども…naku01.gif

全部小文字の英語で…

id
主キーとして扱われる

created
レコードの作成日時 (初期値Nullにすること)
updated,modified
レコードの修正日時 (初期値Nullにすること)

psword,passwd, password
パスワードとして認識される

title,name
リスト表示で見出しとして使用される

以上をふまえて、こんなSQLでテーブルを作りました

CREATE TABLE `boards` (
   `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
   `title` VARCHAR( 50 ) NOT NULL ,
   `contributor` VARCHAR( 50 ) NOT NULL ,
   `comment` TEXT NOT NULL ,
   `created` TIMESTAMP NOT NULL
) ENGINE = MYISAM ;

内容はすっごくシンプルに
id が主キーで、titleは題名、contributorは投稿者、commentがコメント、createdが投稿日
のテーブルです

さて。次からようやくCakePHPを使っていくのかな。モデルとやらにとりかかります。

CakePHPのテーブル作成/参照URL
http://book.cakephp.org/ja/view/68/Creating-Database-Tables




1.CakePHPで作る掲示板の構成を考える

1.とりあえず掲示板の構成

項目:題名/名前/コメント/日付
動き:レス無し/削除なし/編集なし

初めてだし、とっても簡単にしてみた
そして開発の順序

1. データベースにテーブル作る
2. モデルとやらを作る
3. コントローラとやらを作る
4. ビューとやらを作る
5. 完成star.gif

らしい…

CakePHPはMVCという構成でできてる…意味わかんないけども。

M はモデル
V はビュー
C はコントローラ

意味は…いろんなところを見る限り…

1.モデルとは…
 データベースを指定して定義してやるやつ
2.ビューとは…
 表示するやつ
3.コントローラ
 いろんな動きをプログラミングしてやるやつ

みたいなイメージ。あくまでイメージ。だからあってるかどうかはこれから作りながら確認

そんで…それぞれ名前を付ける法則が全部決まってるらしい。
その法則でこのモデルではこのデータベース使うよとか、コントローラ使うよとか
内部で動くみたいなので、名前はきっちり付けなくちゃいけないみたい。

命名についてはそれぞれ作るときに確認しながら作るですよkusyami01.gif




3.インストール成功

ファイルの書き換えが終わったら

http://cake.chorochoro.com/

に接続してみます

install

こんな風に全部が緑になってればOKです~♪(* ̄ー ̄)v

エラーがあると、赤になってるので赤の時は内容を見たら解決できるです
私はapp/tmpディレクトリの属性で何度かひっかかりましたが…( p_q)

とりあえずこれでCORESERVERへのインストールは完了です

なんだかちゃんと動いてるちっくなんでうれしいです

続けて…XAMPPを使ってローカルでCakePHPの中身を作りながら勉強していこうと思うです




2.CakePHPのインストール時のファイル書換

2.CakePHPのインストール時のファイル書換

一番簡単なインストール方法

root
└public_html
 └cake.chorochoro.com
   ├app
   ├cake
   ├vender
   ├.htaccess
   └index.php
(CORESERVERの場合)

であれば、書き換えファイルはひとつで済みます

●データベース接続用ファイル
app/config/databese.php.defalt→app/config/databese.php にリネームし

class DATABASE_CONFIG {
var $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'hogehoge',←データベース名
'password' => 'hogehoge_pass',←データベースパスワード
'database' => 'hogehoge',←データベース名
'prefix' => ”,←接頭辞を付けるときはこれ(※1)
'encoding' => 'utf8',←付けたし(※2)

);

以上のように書き換えます。

※1接頭辞ですが、データベースが一個しか設置できないときなどは便利なようなのですが、どうもまだ初心者のうちは接頭辞をつけるとモデルでテーブルを呼び出したりするときにエラーが起きてしまうので今は省きました

※2これは元のファイルには無い項目なのですが、最初これをつけずにテスト作成したところ、文字化けが起きてしまったので、おまじない的につけています。

今回は

root
├public_html
│└cake.chorochoro.com
│  ├app
│  │├・・・いろんなファイル/ディレクトリ
│  │└webroot
│  │ ├・・・いろんなファイル/ディレクトリ
│  │ └index.php ←これを書き換える
│  ├index.php ←これを書き換える
│  └.htaccess
├log
├Maildir
└lib
 └cake_core ←この場所を指定してあげる

  ├vender
  └cake

こんな構成にしたので、後2つのファイルを書き換えてあげます
cakeのコアの部分を呼び出す場所をかえてあげなくちゃいけないんで

●/app/webroot/index.php

の57行目あたり
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
define('CAKE_CORE_INCLUDE_PATH', ROOT);
}

if (!defined('CAKE_CORE_INCLUDE_PATH')) {
define('CAKE_CORE_INCLUDE_PATH', DS.'virtual'.DS.'CORESERVERのユーザー名'.DS.'lib'.DS.'cake_core' );
}

●/index.php

の40行目あたり
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
//define ('CAKE_CORE_INCLUDE_PATH', FULL PATH TO DIRECTORY WHERE CAKE CORE IS INSTALLED DO NOT ADD A TRAILING DIRECTORY SEPARATOR';
define('CAKE_CORE_INCLUDE_PATH', ROOT);
}

if (!defined('CAKE_CORE_INCLUDE_PATH')) {
//define ('CAKE_CORE_INCLUDE_PATH', FULL PATH TO DIRECTORY WHERE CAKE CORE IS INSTALLED DO NOT ADD A TRAILING DIRECTORY SEPARATOR';
define( 'CAKE_CORE_INCLUDE_PATH', DS.'virtual'.DS.'CORESERVERのユーザー名'.DS.'lib'.DS.'cake_core' );
}

に書き換えます

参考URL:http://cakephp.jp/doc/ch03s04.html
今回のインストール方法は3.4.3高度なセットアップ:その他のインストール方法を参考にしています




1.cakePHPのインストール

1.cakePHPのインストール

動かすサーバーはCORESERVERですのでとりあえずそちらにインストール

まずここからcakePHPをダウンロード
寄付金つきと寄付金なしバージョンがありますがごめんなさい…寄付金無しバージョンをいただきます
http://cakephp.jp/

でサーバーにアップロードするわけですが、アップロード方法が色々
一番簡単なのはrootの下にディレクトリ作るやり方のようですが、これは開発環境にはいいけど、公開環境には向かないと書いてあります

ではどうしろと。

で、ぐぐってみた結果、
http://www.lab.its55.com/?p=7
こちらのサイト様の方法でやってみることにしました

要は…
CakePHPのコアの部分(app以外)を普通にアクセスできない部分において、
app(モデルとかコントローラとかビューとか置くとこ)をwebrootで見える部分に置く
みたいな感じ

root
├public_html
│└cake.chorochoro.com
│  ├app
│  │├・・・いろんなファイル/ディレクトリ
│  │└webroot←ここが新しいウェブルートになる
│  ├index.php
│  └.htaccess
├log
├Maildir
└lib←このディレクトリを作る
 └cake_core
  ├vender
  └cake

とりあえず上の構成の通りアップロード

そんで

app/tmp内のディレクトリの属性757に変更

これしないと、エラーになっちゃいますので重要♪最初は606にして見たんですが(チュートリアルに書き込み権限与えろって書いてあったから)606ではエラーがでてしまってどうしても直らないので757にしました

次は各ファイルを書き換えてあげます




AUTHOR

  • footerWrite up a little something about yourself here. Something short and sweet, or longer if you'd like.

FLICKR

  • add flickr code here, or delete this and use the widget version.

TWEETS

  • add twitter code here, or delete this and use the widget version.

Pets