2014年07月11日
2014/07/10 CakePHP2 -1-Controllerどこをいじればいいの。。。
Cake使えば、コーディングしなくてもいいや!とか甘いと思いながらも、そのハニーポッドに手を突っ込んでしまっているわけですが。。。
そんな事はないわけです。
そもそも、なんてフレームワークとか使うの?って話は、コーディングしたくないからwwwですよ。
その割には、内部のソースコードとか見ないといけないので、逆につらいときもありますけど。。。
「2014/07/09 CakePHP2をインストールと自動生成」(前回)bakeして、自動生成しました。
その、生成したファイルをどの様に編集すれば、いいのかわかりませんので、思い通りに修正する事ができませんw
Model-View-Controller(MVC)について話を進めていきます。分からない方は「MVCとは」を参照してください。
1.Controllerについて
まずは、触らなければならない対象のファイルの場所です。
C:\pleiades\xampp\htdocs\cakephp2 ←CakePHP2インストールフォルダ
\app\Controller ←コントローラの場所
\PostsController.php ←アプリケーション名Controller.php
URLを指定する時は
原則:http://ドメイン/CakePHPのディレクトリ/アプリケーション/アクション
例:http://localhost/cakephp2/アプリケーション/アクション
と指定します。この時「New Post(アプリケーション名)」ボタンをクリックすると、
http://localhost/cakephp2/posts/add
にアクセスします。addがメソッド(アクション名)なわけですね。
このファイル(ここでは、PostsController.php)の中身を見ると、以下のメソッド(Action)があります。
分かるところは、コメント書いておきます。
ここで分かるところは、データの準備までを各メソッド(アクション)で行うのかな?
変段基準は、edlitとaddのメソッドの違いで、addは初回のデータの準備の必要ですからねw
今回はコントローラに関しての調査で終了しちゃいましたw
----------------------------
追加
----------------------------
追記します。
コントローラで使用されるメソッド
render()メソッド
指定されたView(*.cpt)を読み込んで画面を表示します。
アクションメソッド内でrender()を実行しない場合、アクション名Action名と同名のViewを表示します。
set()メソッド
ControllerからViewにデータを受け渡す場合に使用します。
Modelから取得した情報をset()メソッドを使い値をセットした後、Viewにrender()で画面に表示します。
redirect()メソッド
指定たURLに移動します。
flash()メソッド
redirect()に似ているが、redirectする前に指定したメッセージを表示してからredirectします。
ただし、デバッグが有効の場合は、メッセージをクリックする事でredirectします。
setFlash()メソッド
$this->Session->setFlash()メソッドを使用すれば、転送先のページでメッセージが表示します。
そんな事はないわけです。
そもそも、なんてフレームワークとか使うの?って話は、コーディングしたくないからwwwですよ。
その割には、内部のソースコードとか見ないといけないので、逆につらいときもありますけど。。。
「2014/07/09 CakePHP2をインストールと自動生成」(前回)bakeして、自動生成しました。
その、生成したファイルをどの様に編集すれば、いいのかわかりませんので、思い通りに修正する事ができませんw
Model-View-Controller(MVC)について話を進めていきます。分からない方は「MVCとは」を参照してください。
1.Controllerについて
まずは、触らなければならない対象のファイルの場所です。
C:\pleiades\xampp\htdocs\cakephp2 ←CakePHP2インストールフォルダ
\app\Controller ←コントローラの場所
\PostsController.php ←アプリケーション名Controller.php
URLを指定する時は
原則:http://ドメイン/CakePHPのディレクトリ/アプリケーション/アクション
例:http://localhost/cakephp2/アプリケーション/アクション
と指定します。この時「New Post(アプリケーション名)」ボタンをクリックすると、
http://localhost/cakephp2/posts/add
にアクセスします。addがメソッド(アクション名)なわけですね。
このファイル(ここでは、PostsController.php)の中身を見ると、以下のメソッド(Action)があります。
分かるところは、コメント書いておきます。
ここで分かるところは、データの準備までを各メソッド(アクション)で行うのかな?
変段基準は、edlitとaddのメソッドの違いで、addは初回のデータの準備の必要ですからねw
public function index() {
$this->Post->recursive = 0;
//posts・・・この名前で検索結果を設定する。
//$this->Paginator->paginate()・・・array形式で検索結果を取得する。条件を指定するならここ。
$this->set('posts', $this->Paginator->paginate());
}
public function view($id = null) {
if (!$this->Post->exists($id)) {
throw new NotFoundException(__('Invalid post'));
}
//$idにはプライマリキーを指定されているので、1件抽出する。
$options = array('conditions' => array('Post.' . $this->Post->primaryKey => $id));
//postに検索結果を代入する
$this->set('post', $this->Post->find('first', $options));
}
public function add() {
//???
if ($this->request->is('post')) {
//???
$this->Post->create();
//リクエストデータを取得し、DBにインサートする
if ($this->Post->save($this->request->data)) {
$this->Session->setFlash(__('The post has been saved.'));
return $this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The post could not be saved. Please, try again.'));
}
}
}
public function edit($id = null) {
//データがなければエラー
if (!$this->Post->exists($id)) {
throw new NotFoundException(__('Invalid post'));
}
//???
if ($this->request->is(array('post', 'put'))) {
//DBに保存
if ($this->Post->save($this->request->data)) {
//update
$this->Session->setFlash(__('The post has been saved.'));
return $this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The post could not be saved. Please, try again.'));
}
} else {
//DBよりデータ取得し、表示する
$options = array('conditions' => array('Post.' . $this->Post->primaryKey => $id));
$this->request->data = $this->Post->find('first', $options);
}
}
public function delete($id = null) {
$this->Post->id = $id;
if (!$this->Post->exists()) {
throw new NotFoundException(__('Invalid post'));
}
$this->request->allowMethod('post', 'delete');
if ($this->Post->delete()) {
$this->Session->setFlash(__('The post has been deleted.'));
} else {
$this->Session->setFlash(__('The post could not be deleted. Please, try again.'));
}
return $this->redirect(array('action' => 'index'));
}
今回はコントローラに関しての調査で終了しちゃいましたw
----------------------------
追加
----------------------------
追記します。
コントローラで使用されるメソッド
render()メソッド
指定されたView(*.cpt)を読み込んで画面を表示します。
アクションメソッド内でrender()を実行しない場合、アクション名Action名と同名のViewを表示します。
例1) index.cptをします。
$this->render();
例2) URL直接指定
$this->render("http://cakephp.org/");
例3) 指定のアプリ/Viewを指定し、移動
$this->render(
array(
"controller" => "posts",
"action" => "index"
));
set()メソッド
ControllerからViewにデータを受け渡す場合に使用します。
Modelから取得した情報をset()メソッドを使い値をセットした後、Viewにrender()で画面に表示します。
例1) 単独値を設定
$color = "pink";
$this->set("color", $color);
例2) 連想配列を展開してViewに渡す方法(はじめに連想配列を指定した場合は展開される)
$data = array(
"city" => "Nagoya",
"maker" => array("HONDA", "YAMAHA", "SUZUKI")
);
$this->set($data);
redirect()メソッド
指定たURLに移動します。
例1) 絶対パス指定
$this->redirect("http://cakephp.org/");
例2) ・・・/posts/indexにredirect
$this->redirect(
array(
"controller" => "posts",
"action" => "index"
));
flash()メソッド
redirect()に似ているが、redirectする前に指定したメッセージを表示してからredirectします。
ただし、デバッグが有効の場合は、メッセージをクリックする事でredirectします。
例1) 絶対パス指定
$this->flash("http://cakephp.org/");
例2) 10秒後にredirect
$this->flash(
array(
"controller" => "posts",
"action" => "index"
),
10
);
setFlash()メソッド
$this->Session->setFlash()メソッドを使用すれば、転送先のページでメッセージが表示します。
例1) 転送先のページでメッセージ表示
$this->Settion->setFlash("入力を受け付けました。");
$this->redirect(
array(
"controller" => "posts",
"action" => "index"
));
Posted by MJ at 00:16│Comments(0)
│CakePHP2
※このブログではブログの持ち主が承認した後、コメントが反映される設定です。