コントローラの index() に引数をつけるとメソッド扱いされてしまう件

久々に CakePHP をいじりを再開してみたら、コントローラの index() に引数をつけるとメソッド扱いされてしまう件にぶち当たりました。


手抜きをして以前のものを使うと、以下のような URL にアクセスするとエラーになります。


↓コントローラの index 。

function index($id=null)
{
	$this->set('task', $this->Task->findById($id));
}

↓アクセスするとこうなります。

Fatal: Confirm you have created the TasksController::777() in file : app/controllers/tasks_controller.php

<?php
class TasksController extends AppController {
   function 777() {
   }
}
?>

Routesを使えばいいらしい

同じような問題に悩んでいた人がフォーラムにいました。

  • indexに対するパラメータ

http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1119&forum=8

「/users/*」のアクセスをUsersコントローラのindexアクションを実行するようにRouteを設定します。
4.3. Routes の設定のPagesControllerの例が近いと思います。
http://www.cakephp.jp/doc/ch04s03.html

なるほど。「app/config/routes.php」を以下のような感じにすればいいみたい。

$Route->connect('/Tasks/*', array('controller' => 'Tasks', 'action' => 'index', 'index'));

これで、http://xxx/Task/111 とかにアクセスすると正しく動作するようになった。
でも、http://xxx/Task/infos/ とかにすると 引数で指定したアクション index() に行ってしまうけど。
複数のアクションで使うことは自分ではあまりないのでまあいいかなあ。