福岡のIT系の会社で働くエンジニアのブログです。

技術雑記

[PHP][CakePHP][携帯] Router::connect と$form->create ではまった件。

Twitter bookmark Facebook LINE Pocket Feedly RSS

CakePHP- 高速開発 php フレームワーク。 HomeCakePHP 1.2.5 で モバイルサイトを構築しています。
そこでViewにてformヘルパーでcreateすると、URLにprefixが勝手について困っていました。

まずは携帯サイトの構築という事で、いろいろなブログを参考にしてみました。


prefixでURLを切り分けるといいみたい。

app/config/routes.php
Router::connect('/m/:controller/:action', array('prefix' => 'mobile'));

実装してみました。
しかしPC用のViewにてformヘルパーでcreateすると、URLにprefixが勝手について困っていました。

以下みたいにすると
<?php echo $form->create('Foo', array('action' => 'bar')); ?>

できあがるHTMLが
<form prefix="" id="FooBarForm" method="post" action="/m/foo/bar">

となって、困った困った。

HTMLベタ書きしか駄目なんかな、とか思っていたんですが、答えは以下にありました。

Routes::connect設定時の$form->createや$html->linkの挙動について" フォーラム - CakePHP Users in Japan
Router::connect('/m/:controller/:action', array('prefix' => 'mobile'));

ではなくて、
Router::connect('/m/:controller/:action', array('prefix' => 'mobile', 'mobile' => true));

が正解らしい。

Viewでは以下のようにするそうです。
<?php
// link
echo$html->link('hogefuga', array('controller' => 'users', 'action' => 'mobile_login', 'mobile' => true));
?>

フォーラムには書いてなかったけど、formの場合は
<?php
// form
echo $form->create('User', array('action' => 'mobile_login', 'url' => array('mobile' => true ) ));
?>

でいけました。

もっと簡単に解決するには
[cakephp1.2]CakePHP1.2でprefixルーティング設定時の注意点。[携帯]

にかかれていた

app/config/routes.php
if (preg_match("/\/m\//", $_SERVER['REQUEST_URI'])) Router::connect('/m/:controller/:action/*', array('prefix' => 'mobile'));

の方法でもいいかも。力技というか。

各ブログにCakePHPで携帯サイト構築の記事を書かれている皆さんは$form->createは使わないのかなぁ。

CakePHP1.2系で携帯サイト時にはまたはまる可能性が高いので、メモしておきました。

追記
以下の記事もありました。
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=2057&forum=8&post_id=5074

Twitter bookmark Facebook LINE Pocket Feedly RSS