CakePHP で個人的にはまった所の解決策
さいしょに
「/var/www/html/admin/」は僕のCakePHPのRootフォルダになります。
適当に読み替えて下さい…。
JSON の出力
# app / Config / routes.php (末尾に追加)
# 「controller名/action名.json」でアクセスすると「json」出力された
Router::parseExtensions('json');
# app / Controller / ApisController.php
# 「$this->viewClass = 'Json';」を入れとくと「controller名/action名」で「json」が出力された
public function index() { $json = array(); // if ( $this->request->query['app'] == 'なんか' ) { // $getJson = $this->Model->find('first'); // $json = $getJson; // } $this->viewClass = 'Json'; $this->set(compact('json')); $this->set('_serialize', 'json'); }
JSON の読み込み / 出力
public function get(){ $json = array(); $path = 'http://json.json'; // $json = json_decode(file_get_contents($path), true); $file = new File($path); $file_read = $file->read(true, 'r'); $json = json_decode($file_read); $this->viewClass = 'Json'; $this->set(compact('json')); $this->set('_serialize', 'json'); }
File の書き出し
public function put(){
$data = '{"key8768768":"value54234324"}';
$file = new File(WWW_ROOT.'app/'.'cat.json', true);
$file->write($data);
}
Controller から webroot を参照する
// webroot の path が入ってる定数
WWW_ROOT
// webroot 内にフォルダを作成する例
$folder = new Folder(WWW_ROOT.'app_img/', true, 0777);
// webroot 内のフォルダを削除する例
$folder = new Folder(WWW_ROOT.'app_img/');
$folder->delete();
// フォルダの操作時は「App::uses('Folder', 'Utility');」の記入を忘れずに
.htaccess でCakePHP全体にBASIC認証かけて、webroot以下のフォルダを一部解除する
# /var/www/html/admin/.htaccess
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L] </IfModule> AuthType Basic AuthName "login" AuthUserFile /var/www/html/admin/.htpasswd require valid-user
# /var/www/html/admin/app/webroot/app_img/.htaccess
以下記入すると「app_img/」以下が一般公開されるけど、よく調べてない…
satisfy any
GET / POST のパラメータを所得
# ブラケット使ってアクセス
// GET用 $query = $this->request->query; // POST用 $post = $this->request->data; // 値入ってないときにエラー出力されるの嫌だったら「if」で囲えば… if ( !empty($post) ) { // 処理 }
Controller から DB に値を保存する
# 「id」入れるとUpdateになると思う
$this->Model->set(array( // 'id' => 2, 'table_1' => 'a', 'table_2' => 'b', 'table_3' => 'c', )); $this->Model->save();
View でログイン時と非ログイン時で処理を分ける
# 以下の場合だとログイン時に「userSession」に「1」入ってくる
# View側 で「if ( isset($userSession) )」使うと、ログイン時と非ログイン時で表示が変えれた
class AppController extends Controller { public $components = array( 'Auth' => array( 'authenticate' => array( 'all' => array( 'fields' => array( 'username' => 'email', 'password' => 'password', ), ), 'Form', ), ), 'Session', 'DebugKit.Toolbar' ); public function beforeFilter() { $userSession = $this->Auth->user('id'); $this->set(compact('userSession')); } }
ほか
# アサーションで紐づけられたデータを所得する
$params = array( 'recursive' => 2, // 数値変更 ); $getData = $this->Model->find('all', $params);
おわり