ようこそゲストさん

CPA-LABテクニカル

メッセージ欄

分類 【Cakeプラグイン】 で検索

一覧で表示する

2008/02/12(火) ヘルパーのurl,acitonの違い。プラグインではまったこと。

プラグイン開発中にformヘルパーではまったのでメモ。
A) $form->create(' モデル名 ',array('action'=' acta '));
B) $form->create(' モデル名 ',array('url'=' acta '));
の違い。
今、controllerの名前が、SpoksControllerとすると、出力されるhtmlは以下のようになる。
A)<form name=・・・・method=・・・action = ' /spoks/acta'>
B)<form name=・・・・method=・・・action = '/acta/'>
となる。
では、問題。
プラグイン(plugin)の一般的なアクセス方法は、
C)  http://(baseurl)/ プラグイン名 / コントローラー名 / アクション名

C')  http://(baseurl)/spoks/spoks/acta 
だけれども、以下の方法でもアクセスできる。
D)  http://(baseurl)/ プラグイン名 / アクション名 

D')  http://(baseurl)/spoks/acta 
(ただし、プラグイン名と同名のコントローラーがあることが条件)

すると、$this->params['controller']の値がnullになる。urlにコントローラー名がないから。

で、上記A,Bで出力されるhtmlを比べると。。。。
A)<form name=・・・・method=・・・・・・action = ' /spoks/spoks/acta'>
B)<form name=・・・・method=・・・・・・action = 'spoks/acta/'>
となる。
つまり、$option=array('action'=>'acta')で指定してしまうと、勝手にコントローラー名をつけてしまうので、特例D方式でアクセスしても、次にフォームで飛んだ先は、通常アクセスURLになってしまう。


それを避けるためには必ず、 $option=array('url'=>'acta') で指定しなければならない。

規約と異なるコントローラー名の時の注意

上記でも意図せざるURLとはいえ、アクセスはできるし、コンテンツは問題なく表示される。URLだけの問題だった。しかし。。。
プラグイン&規約違いコントローラー名&特例URLアクセス下で、formをcreateし、そこのオプションで、$option=array( 'action' => 'acta' ) とすると、Rueter:url 内で、ご親切に、モデル名(ModelName)から、複数化関数(infletor::puluralize)によって、コントローラー名を「規約通り」に作ってしまう。
すると、

A)・・・action = ' / プラグイン名 / 意図しないコントローラー名 /acta'

ということになりエラーがでてしまう。

なので、
プラグイン&規約違いコントローラー名&特例URLアクセス下で、formをcreate
する場合には
$option=array( 'action' => 'acta' )
ではなく
$option=array( 'url' => 'acta' )
とするように。

2008/02/11(月) プラグインモデルを読み込まない?Missing Database Table

プラグインのコントローラーでCakePHPの規約と異なるデータベースのテーブルを使用する場合、usesの書き方を間違えると、モデルをうまく読み込まず、Missing Database Tableのエラーが出る。モデルをうまく読み込めないから、「モデルがない」というエラーが出そうなものだけど、なぜかこうなる。
Missing Database Table
Error: Database table ・・・・ for model ・・・・ was not found.
というエラーがでる。
なので、

var $uses=array( 'モデル名' );
ではなく、
var $uses=array( 'プラグイン名.モデル名' );
と、小数点(ドット)で、プラグインの名前とモデル名をつながなくてはならない。
それはルール通りなんだろうけど、エラーメッセージがちょっと的外れなので、かなり時間を食ってしまった。

CakePHP version 1.2.0.6311 beta

1: ひでまん 『ありがとうございます。すごい役に立ちます。』 (2008/04/11 18:53)

2: ぜー 『私もすごく時間の節約になりました ありがとうございます』 (2010/07/16 10:22)