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