▼ 2008/02/12(火) ヘルパーのurl,acitonの違い。プラグインではまったこと。
プラグイン開発中にformヘルパーではまったのでメモ。
今、controllerの名前が、SpoksControllerとすると、出力されるhtmlは以下のようになる。
では、問題。
プラグイン(plugin)の一般的なアクセス方法は、
すると、$this->params['controller']の値がnullになる。urlにコントローラー名がないから。
で、上記A,Bで出力されるhtmlを比べると。。。。
つまり、$option=array('action'=>'acta')で指定してしまうと、勝手にコントローラー名をつけてしまうので、特例D方式でアクセスしても、次にフォームで飛んだ先は、通常アクセスURLになってしまう。
それを避けるためには必ず、 $option=array('url'=>'acta') で指定しなければならない。
プラグイン&規約違いコントローラー名&特例URLアクセス下で、formをcreateし、そこのオプションで、$option=array( 'action' => 'acta' ) とすると、Rueter:url 内で、ご親切に、モデル名(ModelName)から、複数化関数(infletor::puluralize)によって、コントローラー名を「規約通り」に作ってしまう。
すると、
A)・・・action = ' / プラグイン名 / 意図しないコントローラー名 /acta'
ということになりエラーがでてしまう。
なので、
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' )とするように。
▼ コメント(0件)
- TB-URL http://www.cpa-lab.com/tech/076/tb/