カテゴリー : プログラミング
mySQLを利用する。
「app」「config」にあるdatabase.phpをまず修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | class DATABASE_CONFIG { var $default = array( 'driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'port' => '', 'login' => '', 'password' => '', 'database' => 'mydata', 'prefix' => '', 'schema'=>'', 'encoding'=>'UTF-8' ); var $test = array( 'driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'user', 'password' => 'password', 'database' => 'test_database_name', 'prefix' => '', ); } |
port,login,passwordはサーバー任意のモノを入力してください。
まずはモデルを作成します。
「app」「models」のフォルダの中にファイルを作ります。
1 2 3 4 5 6 7 8 9 10 11 | <?php class Board extends AppModel{ var $name='Board'; } ?> |
作成するファイル名は使用するデータベースのテーブル名と同じものにします。
次にコントローラ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php class BoardsController extends AppController{ public $name = 'Boards'; function index(){ $data = $this->Board->find('all'); $this -> set('data',$data); } } ?> |
モデルのメソッドを呼び出し($name)、ビュー渡しています。(set)
モデルはコントローラの中ではメンバ変数として利用することができます。今回は「$this->Board」の形で利用しています。「find」はモデルクラスのメソッドになります。
最後にビューです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
コントローラから受け取った「$data」を使っています。
HTMLヘルパーを使っています。
おまけ
scaffoldを使えば、モデルとビューなしでデータベース管理するためのシステムを自動生成してくれます。
1 2 3 4 5 6 7 8 9 10 | <?php class BoardsController extends AppController{ public $name = 'Boards'; public $scaffold; } ?> |
レコードの追加
コントローラ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?php class BoardsController extends AppController{ public $name = 'Boards'; function index(){ $data = $this->Board->find('all'); $this->set('data',$data); } function addRecord(){ if(!empty($this->data)){ $this->Board->save($this->data); } $this->redirect('.'); } } ?> |
ビュー
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <?php echo $form->create(null,array('type'=>'posr','action'=>'./addRecord')); echo $form->text("Board.name"); echo $form->text("Board.title"); echo $form->textarea("Board.content"); echo $form->submit("送信"); echo $form->end(); ?> <br/> <hr /> <br/> <table> <?php for($i=0;$i < count($data);$i++){ echo $html->tableCells($data[$i]['Board'],array(),array(),true); } ?> </table> |
レコードの検索
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?php class BoardsController extends AppController{ public $name = 'Boards'; function index(){ $data=null; if(!empty($this->data)){ $data = $this->Board->find('all',array('conditions' => array('Board.id' => $this->data['Board']['id']))); }else{ $data=$this->Board->find('all'); } $this->set('data',$data); } } ?> |
大きくはコントローラーが変わっています。
find(第一引数、第二引数)
ビューは「app」「views」
コントロールは「app」「controllers」
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <?php class HelloController extends AppController{ public $name='Hello'; public $uses = null; public $layout = "hello"; function index(){} function sendForm(){ $str = $this->params['url']['text1']; $result = ""; if($str != ""){ $result = "you type:".$str; }else{ $result = "empty."; } $this->set("result",$result); } } ?> |
$str = $this->params['url']['text1'];では各種情報を管理するparamsを使っています。
今回は「url」を使ってGETで送信されたフォームの内容を取得しています。
$this->set(“result”,$result);では先ほど取得した変数をビューに渡しています。
1 2 3 4 5 | App::import('Sanitize'); .......................... $this->set("result",Sanitize::stripAll($result)); |
CAKEphpのライブラリである。Sanitizeクラスを使います。
今回はstripAllを使いましたが、の他stripScriptやstripImageなどがあります。
ここまではビューテンプレートに直接フォームを記述していましたが、Cakephpにはタグを自動生成する「Fromヘルパー」という機能があります。
1 2 3 4 |
最初にcreate()、最後にend()をつける。実際の記述は$formで行います。