CakePHP & PHP 2008/04/10 22:42
CakePHP 1.2で携帯用ビューを表示する
CakePHP1.2ではCakePHP 携帯用ビューを表示するで利用していたwebservicesの機能が無くなります。
1.2-betaでRouting.webservicesをonにすると以下のようなメッセージが表示されます。
-
Deprecated: webservices routes are deprecated and will not be supported in future versions. Use Router::parseExtensions() instead.
The prefix automagic in CakePHP routingで紹介されているように、1.2からはwebservicesに替わりprefixをURLルーティングで使用するようです。
そこで実際にどのように使用するかを試してみました。
1. URLルーティングでprefixを設定する
Router::connect()の第2引数ではパラメータを連想配列で設定できるのですが、そこに'prefix'というキーで値を設定しておくと、対象URLにアクセスがあればこの機能が有効となります。
下記の例では[/m/foo/bar]へアクセスがあると、prefix=mobileが有効となります。
[app/config/routes.php]
2. prefix用アクションを作成する
prefixが有効な状態だと、アクションとして[prefix + _ + action]が呼ばれるので、アクションを実装します。
1. の設定で[/m/foo/bar]へアクセスされると、prefix='mobile'が有効となるので、FooController#mobile_bar()がアクションとして呼ばれます。
[app/controllers/foo_controller.php]
-
<?php
-
class FooController extends AppController {
-
public function mobile_bar() {
-
// 通常のアクションを実装
-
}
-
}
-
?>
3. prefix用ビューを作成する
2.で実装したアクション同様にビューテンプレートを作成します。
これは通常どおり2.で作成したアクションに対応するビューテンプレートを作成するだけです。
注意点は$html->link()などでURLを指定する際は、アクションにprefixが付いたアクション(mobile_bar)を指定するという事です。下の例なら「/m/foo/bar」がURLとして出力されます。
[app/views/foo/mobile_bar.ctp]
△prefix用Component/Helperが読まれない
携帯電話では入出力文字エンコーディングを変換する事が多いのですが、webservicesを使用すると読み込まれるComponent/Helperで実装していました。
今のところprefixではこの機能が無いようなので、Controller#beforeFilter()/afterFilter()等で自前で実装する必要がありそうです。
そのリクエストで設定されているprefixはController#$params['prefix']で確認できます。(@see 1.2 の WEBSERVICES パラメータ)
○prefix用アクションは直接呼ばれない
prefixに設定したアクションは直接呼ぶことができず、prefixで設定したURLでないとアクセスできません。
つまり1.のような設定の場合、[/foo/mobile_bar]へアクセスしてもprivate methodとして扱われてエラーとなります。
これによりprefixが設定されず、prefixアクション(mobile_bar)が呼ばれるのを防ぎます。
このあたりの挙動はRouting.adminと同じですね。:-D
webservicesは中々便利な機能だったので無くなるのは残念ですが、代替機能があるのは嬉しいことです。
■Related Posts
- CakePHP解説本を書きました
- CakePHP1.1.12.4205&1.2.0.4206_devリリース
- CakePHP Screencastまとめ
- CakeMatsuriにまつわる7つの疑問
- CakePHPのコーディング規約




on 24 2月 2009 at 19:00 1.[CakePHP] 携帯サイトの作り方まとめ - ElectronicBrain is eating BreakFast said …
[...] CakePHP 1.2で携帯用ビューを表示する | Shin x blog [...]
on 05 2月 2010 at 13:59 2.[cakephp1.2] 携帯対応したい時ようのtips « のぶじゃすBLOG said …
[...] 一番参考にしたのは下記のサイトCakePHP 1.2で携帯用ビューを表示する | Shin x blog基本的には上記のサイトを参考にすれば出来ます。僕が書いたのはモバイルによってHTML置き換えたりとか。 [...]