そこでViewにてformヘルパーでcreateすると、URLにprefixが勝手について困っていました。
まずは携帯サイトの構築という事で、いろいろなブログを参考にしてみました。
- CakePHP 1.2 でモバイルサイトを構築する最初の手順まとめ
- [cakePHP1.2]モバイルサイトとPCの切り分け その1
- [cakePHP1.2]モバイルサイトとPCの切り分け その2
- [CakePHP]モバイル用などprefixを指定したときのroutes.phpの設定
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