システム共通で利用する定数は、どこに定義するべきなのか調べました。

app/config/bootstrap.php に直接書くか、bootstrap.php から定数定義用のファイルを読み込んで、そのファイルに記述するようですね。

まず、const.php を読み込む為 app/config/bootstrap.php に追記。

<?php
config('const');
?>

次に、app/config/const.php ファイルを作成。

ここで注意

CakePHP1.1では下記のように define() で定義するようですが

<?php
define('COMPANY_NAME','株式会社ピザ');
define('COMPANY_SLOGAN','体と心にピザを');
?>

CakePHP1.2 では Configure::write() を使って、アプリケーションの設定データを保存するようです。

<?php
Configure::write('Company.name','株式会社ピザ');
Configure::write('Company.slogan','体と心にピザを');
?>

1.1の情報が多くて、混乱しますね。

thumbnailCakePHP公式マニュアル Cookbook

3.4.3.1 Configureのメソッド

via: http://blog.katsuma.tv/2008/06/cakephp1112.html
via: http://d.hatena.ne.jp/ele-yana/20090215/1235627176

app/view/layouts/admin.ctp という名前でレイアウトファイルを作成する場合、
コントローラのメンバーに以下のように記述する。

<?php
class AdminsController extends AppController {
    var $layout = 'admin';
}
?>

管理者用の共通コントローラや、特殊なユーザ用の共通コントローラを作ろうとしてハマったのでメモ。

app/controllers/admin_controller.php

class AdminController extends AppController {
    // 管理者で共通の処理を記述
}

管理者用の各コントローラは上記のクラスを継承させる。

いざ、実行してみるとこんなエラーが。。

Fatal error: Class ‘AdminController’ not found in /path/to/app/controllers/master/pages_controller.php on line 35

原因は、上記で作成したadmin_controller.phpが読み込まれてないからだと思うのですが、こういったファイルを読み込むには、どこにどういうふうに書けばいいのか、いろいろと検索してみたがわからない。。

bootstrap.phpとかに書くんだと思ってたんですが、どうもうまくいかないので、app_controller.phpに直接記述。

app/app_controller.php

App::import( 'Controller' , 'Admin' );
class AppController extends Controller {
}

う~ん。。正しいかどうかわからないなぁ。後でちゃんと調べないと。。
誰か知ってたら教えてください><

モデルで設定しているアソシエーションを一時的に変更したい場合は、bindModel()やunbindModel()を使います。

気をつける点は、第2引数に false をセットしない限り、bindModel()やunbindModel()は、すぐ次の find 関数にのみ影響するということです。

bindModel()やunbindModel()の後に一度でも、findなどの処理を呼び出した場合、次に呼び出すときには、アソシエーションはモデルで設定された状態に戻っています。

コントローラ内で以下のように使用します。


function someAction() {
	// これは Leader を取得して、Follower も取得します
	$this->Leader->findAll();

	// hasMany を削除しましょう
	$this->Leader->unbindModel(
	array('hasMany' => array('Follower'))
	);

	// ここで find 関数を使用すると、
	// Leaders を返しますが、Follower は返しません。
	$this->Leader->findAll();

	// 注意: unbindModel はすぐ次の find 関数にのみ影響します。
	// その次の find 呼び出しは設定済みの関連情報を使用して
	// 呼び出されます。

	// unbindModel() の後にすでに findAll() を使用してしまったので、
	// ここでは Leader とともに関連する Follower も取得されます。
	$this->Leader->findAll();
}
thumbnailCakePHP公式マニュアル

3.7.6.6 その場でアソシエーションを生成、廃棄

Bakeで焼かれるHTMLは、「送信」「変更」「削除」などのリンクがすべて英語表記になっていたり、レイアウトがデフォルトのままでは使いにくかったりします。

デザインされたテンプレートでBake出来れば、大幅に作業時間を短縮できそうですね。

手順は以下の通り。

  1. cake/console/libs/templates/views を開く。
  2. そこに4つのファイルがあることを確認する。
  3. それらのファイルを、app/vendors/shells/templates/views にコピーする。
  4. “bake” が構築するビューを制御するために、出力される HTML を変更します。

引用元:9.3 Bake で焼かれるデフォルトの HTML を変更する

thumbnailCakePHP 公式マニュアル

9.3 Bake で焼かれるデフォルトの HTML を変更する

CakePHP1.2でアクセス制御をするには、ACLコンポーネントを使うようです。

まずは

公式マニュアルを見てみましょう。

thumbnailアクセス制御リスト(ACL)の公式マニュアル

「指輪物語(ロード・オブ・ザ・リング)」を例に説明してあって、わかりやすい!

  • データベース利用がおすすめ

使い方

  • ACL用テーブルを作成
    cakeコマンドを実行してテーブルを作成する

    cd cake/console/
    ./cake -app アプリケーション名 schema run create DbAcl
    
Welcome to CakePHP v1.2.4.8284 Console
---------------------------------------------------------------
App : app
Path: /home/user/root/app
---------------------------------------------------------------
Cake Schema Shell
---------------------------------------------------------------

The following table(s) will be dropped.
acos
aros
aros_acos

Are you sure you want to drop the table(s)? (y/n)
[n] &amp;gt; y
Dropping table(s).
acos updated.
aros updated.
aros_acos updated.

The following table(s) will be created.
acos
aros
aros_acos

Are you sure you want to create the table(s)? (y/n)
[y] &amp;gt; y
Creating table(s).
acos updated.
aros updated.
aros_acos updated.
End create.
1. DROP TABLE IF EXISTS `acos`;

2. DROP TABLE IF EXISTS `aros`;

3. DROP TABLE IF EXISTS `aros_acos`;

4. CREATE TABLE `acos` (
        `id` int(10) NOT NULL AUTO_INCREMENT,
        `parent_id` int(10) DEFAULT NULL,
        `model` varchar(255) DEFAULT NULL,
        `foreign_key` int(10) DEFAULT NULL,
        `alias` varchar(255) DEFAULT NULL,
        `lft` int(10) DEFAULT NULL,
        `rght` int(10) DEFAULT NULL,    PRIMARY KEY  (`id`));

5. CREATE TABLE `aros` (
        `id` int(10) NOT NULL AUTO_INCREMENT,
        `parent_id` int(10) DEFAULT NULL,
        `model` varchar(255) DEFAULT NULL,
        `foreign_key` int(10) DEFAULT NULL,
        `alias` varchar(255) DEFAULT NULL,
        `lft` int(10) DEFAULT NULL,
        `rght` int(10) DEFAULT NULL,    PRIMARY KEY  (`id`));

6. CREATE TABLE `aros_acos` (
        `id` int(10) NOT NULL AUTO_INCREMENT,
        `aro_id` int(10) NOT NULL,
        `aco_id` int(10) NOT NULL,
        `_create` varchar(2) DEFAULT '0' NOT NULL,
        `_read` varchar(2) DEFAULT '0' NOT NULL,
        `_update` varchar(2) DEFAULT '0' NOT NULL,
        `_delete` varchar(2) DEFAULT '0' NOT NULL,      PRIMARY KEY  (`id`),
        UNIQUE KEY `ARO_ACO_KEY` (`aro_id`, `aco_id`));

続きはのちほど。。