CakePHP1.3のScaffold優先順位についてまとめ

CakePHP1.3のScaffold機能が便利なので、管理機能なんかはほとんど丸投げしちゃえて楽な感じです。ただ公式ドキュメントやGoogle先生で調べてみると、予想を遙かに超えて柔軟にカスタマイズできるようなので、個人的な備忘録を兼ねてまとめてみることにします。

ちなみに今知ってること、ネットで見つけたことがほとんどでソースはピンポイントでしか追っていないので、まだまだ隠されている機能があるかもしれません。恐ろしい子ッ…!

  1. コントローラーにvar $scaffoldが定義されていればscaffold機能を使用する。その際に自動で動作するアクションは「‘index’, ‘list’, ‘view’, ‘add’, ‘create’, ‘edit’, ‘update’, ‘delete’」の8つ。(でもindex=list、add=create、edit=updateみたいだから、実質5つ…のはずなのに、listだけviewがないって怒られる。バグ?)
  2. var $scaffold = ‘admin’のようにRouting.prefixesで設定されている値が使用されていれば、自動で動作するアクションは$scaffoldで設定されたprefix名が付加されたものになる。この例だと「’admin_index’, ‘admin_list’, ‘admin_view’ … ‘admin_update’, ‘admin_delete’」の8つが動作する。この場合、prefixがつかない方のアクション(index, viewなど)は動かないので注意。
  3. var $scaffold = array(‘index’, ‘view’)のようにscaffoldで任意で動作させたいアクション名を配列で指定可能。この例だと、indexとviewはscaffoldで動くが、add,edit,deleteの3つは(コントローラーで定義しないと)動作しない。
  4. var $scaffold = array(‘admin_index’, ‘admin_view’)もいけるかと思ったけど、prefix付きのアクションは動作せず。自分の設定ミス?それともバグ?仕様??
  5. 各コントローラーにアクションを記述した場合、scaffoldで自動生成されるアクションよりも優先される。基本scaffoldでいいけど、indexだけカスタマイズしたい場合はfunction index()を記述すればそちらが使用される。

コントローラーについてサクっとまとめると

  • var $scaffoldの記述なし(scaffold使用しない)
  • var $scaffold;
  • var $scaffold = ‘admin’;
  • var $scaffold = array(‘index’, ‘view’);

の4パターンの指定が可能で、scaffoldの利用に関わらず、各コントローラーにアクションが定義されていればそれが最優先ってことらしい。多分。

Scaffoldで使用されるビューの優先順位

  1. 例えばposts_controllerでvar $scaffoldが定義されていて、アクションを上書きしていない場合(function index()などの記述がない)は、app/view/posts/scaffold.index.ctp -> app/view/scaffolds/index.ctp -> cake/libs/view/scaffolds/indexctpの順に探しにいく。
  2. 各コントローラーでアクションを上書きした場合は、scaffoldsのビューは使用されない。例えばfunction index()を記述した場合は、app/view/posts/index.ctpを用意してあげる必要があります。ないと怒られます。

ビューに関してまとめると、コントローラーで自分で定義したアクションについては、必ず対応するビューを用意する必要があるって事でいいのかな。scaffoldで自動生成されたアクションに関しては、上の優先順位1のように探しにいきます。

CakePHP1.3のScaffold機能、コントローラー単位、アクション単位、ビュー単位で柔軟にカスタマイズできそうなので、上手く利用できれば作業がかなり楽になりそうです。使いこなすぞー!

それではまた。

蕎麦湯の正しい飲み方

突然ですが蕎麦が好きです。そばと言えばざる蕎麦な食べ方が一番好きなんですが、蕎麦湯…くれますよね。今まで何となく探り探り楽しんでいたけど、気になって調べてみました。そしたら教えてGooで正解っぽい答えを書いている方がいたので、まとめてみます。

蕎麦湯の飲み方 – その他(料理・グルメ) – 教えて!goo

  1. 食後、そばつゆに蕎麦湯を流し込む。量は適当、好みでOK
  2. 飲む
  3. まだ蕎麦湯が残っていれば流し込む
  4. 飲む
  5. 何ならそばつゆが無くなっても、蕎麦湯だけで飲んでもOK
  6. 好みで青ネギやしょうが、ゴマなどの薬味をプラスしてもOK

まとめると、そばつゆと足して飲んで良し、蕎麦湯だけで飲んで良し、好みで薬味を足して良し…つまり自由に楽しめばいいみたいです(笑)

さすがに蕎麦湯をお蕎麦がまだ残っているザルにぶっかけて食べるようなド外道、いや破廉恥な食べ方をする人はいないでしょう!いませんよね?自分も今まで何となく飲んでた方法で間違ってなかったみたいで安心しました。薬味をあえて足した事はなかったので、次からはあればやってみようと思います。健康にもいいみたいなので、ぜひ素晴らしい蕎麦湯ライフを!

それではまた。

CakePHP1.3で携帯電話(ガラケー)とiPhone,Androidを振り分ける方法

ミッション

CakePHPサイトをガラケー対応させること。とりあえずはガラケーとiPhone&Androidの振り分けまで。

手順

MASA-P/KtaiLibrary · GitHub

  1. 上記からファイルをZIPダウンロードして解凍
  2. 解凍したファイルのvendorsディレクトリの下にある「ecw」ディレクトリを「vendors」又は「app/vendors」ディレクトリ下に丸ごとコピー
  3. 解凍したファイルの「app/controllers/components/ktai.php」を、同じ「app/controllers/components」ディレクトリ下にコピー
  4. コントローラーで下記のコードにより振り分け可能

コントローラーの使用コンポーネントにKtaiを追加

[php]
var $components = array(‘Ktai’);
[/php]

振り分け処理を記述

[php]
if ($this->Ktai->is_ktai()) {
// ガラケー用の処理
} else if ($this->Ktai->is_iphone() || $this->Ktai->is_android()) {
// iPhone,Android用の処理
} else {
// それ以外、PCなどの処理
}
[/php]

これだけです!簡単でしょう?サイト全体に適用するならapp_controller.phpのbeforeFilterやbeforeRenderあたりでレイアウトやテーマの設定をごそっとしてあげると便利かと思われます。

それではまた!

※参考にしたサイト

phyMyAdminでrootログインできないようにする手順メモ

作業経緯

場所を問わずphpMyAdminからDBを操作したいので、IP制限はしたくない。でも個人使用で複数DBにまたがった作業をするので、root同等の権限は欲しい、でもrootでphpMyAdminにログインできるのはあまりに危険。

作業した手順

  1. phpMyAdminにrootでログインして、「特権 -> 新しいユーザを追加する」から全権限を付与したユーザーを作成。(ユーザ名とパスワードは複雑に、ホストはlocalhost、ユーザ専用データベースは不要、グローバル特権はすべてチェック)
  2. phpmyadmin/config.inc.phpに「$cfg[‘Servers’][$i][‘AllowRoot’] = false;」を追記(作業前に念のためconfig.inc.php.bakなどでバックアップを取っておく。自分の場合、config.inc.phpは/usr/share/にありました。)

これだけ。もはやphpMyAdminにrootでは入れません。限定的ではあるけど、ちょっとだけセキュリティがマシになるかな…ぐらい。もちろん全権限を付与したユーザーが割れたら元も子もないので、そちらのセキュリティはしっかりと。