// スネーク記法のテーブル名をキャメル記法のモデル名に変更する
$tbl_name = 'neko_mutexes'; // テーブル名:英語の特殊複数形(sでなくesになっている)
$model_name = Inflector::singularize($tbl_name); // 英語の単数形に変換する。例:NekoMutexes → NekoMutex
$model_name= Inflector::camelize($model_name); // キャメル記法に変換する
var_dump($model_name); // → NekoMutex
// キャメル記法のモデル名をスネーク記法のテーブル名に変換する
$tbl_name2 = Inflector::pluralize($model_name); // 英語の複数形にする。 例:NekoMutex → NekoMutexes
$tbl_name2 = Inflector::underscore($tbl_name2); // スネーク記法に変換する
var_dump($tbl_name2); // → neko_mutexes
コントローラのメソッド(アクション)でビューを指定する
public function test_action(){
$data = array('id'=>999,'name'=>'ヤンバルクイナ');
$this->set('jsonData',$data);
$this->render('/Elements/json_ajax',false);
}
/app/View/Elements/json_ajax.ctp
<?php
$json_str = json_encode($jsonData,JSON_HEX_TAG | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_HEX_APOS);
echo $json_str;
?>
/**
* 自動採番が連番になるようauto_incrementをリセットする。
*
* @param $tbl_name テーブル名
*/
private function resetAutoIncrement($tbl_name){
// 最大IDを取得する
$max_id_sql = "SELECT MAX(id) AS max_id FROM {$tbl_name}";
$res = $this->query($max_id_sql);
$max_id = 0;
if(!empty($res)){
$max_id = $res[0][0]['max_id'];
if(empty($max_id)){
$max_id = 0;
}
}
$next_id = $max_id + 1;// 次ID
// 順位・日集計テーブルの自動採番(auto_increment)をリセットする
$reset_sql = "ALTER TABLE {$tbl_name} AUTO_INCREMENT = {$next_id}";
$this->query($reset_sql);
}
App::uses('DaoForCake','Model');
$dao = new DaoForCake();
App::uses('Model', 'Model');
App::uses('IDao', 'Vendor/Wacg');
/**
* CakePHP用のDao
*
* @date 2018-5-31
* @version 1.0
*
*/
class DaoForCake extends AppModel implements IDao{
public $useTable = false; // 特定のテーブルと関連づけない。
public function sqlExe($sql){
return $this->query($sql);
}
}
interface IDao{
public function sqlExe($sql);
}
class LionComponent extends Component{
public function __construct($collection){
parent::__construct($collection);
}
public function bark(){
debug('ガオーと吠える');
}
}
class CrudBaseController extends AppController {
public $components = ['Lion']; // コンポーネントの登録
...略...
$this->Lion = $this->Components->load('Lion');
$this->Lion->bark();
class AppController extends Controller {
public $uses = array();
public $components = array(
'Security',
);
public function beforeFilter(){
// httpsにリダイレクトする処理 (if文はログアウト時に起こるエラー対策)
if(!empty( $this->Security)){
$this->Security->blackHoleCallback = 'forceSSL';
$this->Security->requireSecure();
$this->Security->validatePost = false; // httpsでもPOSTが動くようにする
$this->Security->csrfCheck = false; // httpsでもPOSTが動くようにする
}
}
// httpsにリダイレクトする
public function forceSSL() {
$this->redirect('https://' . env('SERVER_NAME') . $this->here);
}
旧式
.htaccessに記述する方式はAjax通信で不具合がでるので使えない
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Configure::write('Session', array(
'defaults' => 'php',
'timeout' => 10 // 分を指定
));
App::uses('AppController', 'Controller');
class UsersController extends AppController {
// public $components = null;// ←これするとAuthがnullになり、エラーになるので注意
public function test(){
$id = 4; // ログイン対象のユーザーID
// ユーザーエンティティ
$user = $this->User->find('first', [
'conditions' => ['User.id' => $id],
'recursive' => -1
]
);
// パスワードは削除
unset($user['User']['password']);
// ログインする。
if ($this->Auth->login($user['User'])) {
echo 'login success';
}else{
echo 'login false';
}
die();
}
UsersControllerコントローラクラス以外でも実現可能。
Configure::write('Session', array(
'cookie'=>'neko_prj', // ← プロジェクトごとに任意の文字列を入力
'defaults' => 'php'
));
echo $this->name; // コントローラ名
echo $this->action; // アクション名
$this->redirect($this->Auth->logout());