WebプログラミングV

 目次へ 前へ 次へ

2014/1/27 久米

VCakePHP

6. アプリケーション作成

 

6.1 猫掲示板 -ソート順-

テーブル名:neko_bbs

    コード例 クラス
order

逆順ソートで
DBから読み込み
(昇順はdescでなくasc)

コントローラ内のindexメソッドで
$datas =
$this->NekoBb->find('all', array('order' => array('id' => 'desc')));
AppController
validate データ保存前に
入力値のチェック
モデル内で
public $validate = array(
'msg'=>array(
'rule'=>'notEmpty',
'message'=>'本文を入力してください。'
)
);
AppModel

 

6.2 猫LINE -ページ割り-

テーブル名:neko_lines

    コード例 クラス
PaginatorComponent ページ分割
コントローラ内で
public $components = array('Paginator');

コントローラ内のindexメソッドで
$this->Paginator->settings = array(
'limit' => 10,
'order' => array('id' => 'desc')
);
$datas = $this->Paginator->paginate();


ビューのindex.ctpで
echo $this->Paginator->prev('< 前へ', array(), null, array('class' => 'prev disabled'));
echo " ".$this->Paginator->numbers(array('separator' => ' '))." ";
echo $this->Paginator->next('次へ >', array(), null, array('class' => 'next disabled'));
PaginatorComponent

 

6.3 猫画像投稿 -画像アップロード-

テーブル名:neko_gazos

  1. CakePHPプラグイン UploadPack をダウンロード
  2. 解凍したフォルダを upload_pack にリネーム
  3. 上記upload_packを app>Plugin のフォルダに入れる
     
  4. テーブル作成 例 neko_gazos
  5. テーブルの画像名保存用の列を次の名前で作成。適当な文字_file_name 例 photo_file_name varchar(255) null値OK
     
  6. app/Config/bootstrap.php
    最終行に以下の記述「設置したプラグインを自働で読み込む命令」を追加
    CakePlugin::loadAll();
    コード例 クラス
UploadPack.Upload 画像アップロード
ヘルパー
コントローラ内で
public $helpers = array('UploadPack.Upload');

モデル内で
public $actsAs = array(
'UploadPack.Upload' => array(
'photo' =>
array( 'quality' => 95, 'styles' => array( 'thumb' => '85x85', 'hutu' => '120x120')) ),
);


ビューのindex.ctpで (なお$dはfindで読み込まれた1行)
<?php echo $this->Upload->uploadImage($d,'NekoGazo.photo', array('style'=>'hutu')); ?>
type fileをformで送る
fileの参照
ビューのadd.ctpで
echo $this->Form->create(array('type' => 'file'));//モデル名省略可
echo $this->Form->input('photo',array('type'=>'file','label'=>'画像'));
echo $this->Form->end('投稿');
 

 

演習6

  1. 画像掲示板を作ってみよ

 

 

コラム 認証Auth使用時のはまる点

  • テーブル users は固定(変更は可だが・・)
  • 列名 username password は固定(変更は可だが・・)
  • passwordは暗号化して保存するので
    1. 一番最初だけ、だれでも登録できるように設定し、
    2. adminユーザを一つ登録し、
    3. その後、adminユーザだけが登録できるように変更する。

 

 

コラム Googleで検索する時

  • CakePHPは1.x系と2.x系で少し記述方法が違う。
  • よって、検索結果を見るときは、2.x系かどうか気にすべし。
  • また、検索条件を過去1年くらいに設定して検索するとよい。

 

 

コラム ネット公開時のメモ

■CakePHPのトップを見せなくする方法
app\View\Pages\home.ctp
<?php
header("Location: index.html");
exit();
?>
に変える

■デバック情報を非表示にする方法
app\Config\core.php
Configure::write('debug', 0);

※ただし0の場合、表構造変更が、長期間反映されなくなる。

■管理者用ページを作成する方法
app\Config\core.php
Configure::write('Routing.prefixes', array('admin'));

app\Controller\AppController.php
class AppController extends Controller{
public $components = array(
'Session',
'Auth'
);
function beforeFilter(){
if(empty($this->request->params['admin'])){
// adminルーティングではない場合、認証を通さない(allow)
$this->Auth->allow($this->request->params['action']);
}
}
}

app\Controller\RelayTeamsController.php
public function admin_edit(){
}
のようなメソッドを作れば、管理者ログインでのみ実行
http://ホスト名/cakephpフォルダ/admin/app名/edit