なんかできたよー。

Web系Tipsを適当につづるBlog.

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');」の記入を忘れずに

 

.htaccessCakePHP全体に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);


おわり