Замена строки в маршрутах CakePHP - PullRequest
2 голосов
/ 27 января 2010

В моем приложении у меня есть несколько контроллеров с одинаковым префиксом. Для примера предположим, что они:

my_posts
my_users
my_letters

URL-адреса, сгенерированные для них, очевидно:

/my_posts/view/1
/my_users/add
/my_letters/whatever

Я бы хотел настроить некоторую настраиваемую маршрутизацию, чтобы я мог использовать URL-адреса следующим образом:

/my/posts/view/1
/my/users/add
/my/letters/whatever

Таким образом, в основном, если URL начинается с /my/, то контроллер для передачи должен быть my_{whatever_comes_next}.

Я просматривал документацию , но до сих пор не могу понять.

Ответы [ 2 ]

3 голосов
/ 27 января 2010
Router::connect(
    '/my/posts/:action/*',
    array(
        'controller'=>'my_posts',
        'action'=>'index'
    )
);
Router::connect(
    '/my/users/:action/*',
    array(
        'controller'=>'my_users',
        'action'=>'index'
    )
);
[..]

согласился, что это не совсем удобно, но оно должно работать ..

1 голос
/ 27 января 2010

Не уверен, что это возможно, но почему бы не использовать промежуточный маршрутизатор?

Router::connect (
    '/my/*', 
    array (
        'controller' => 'my_router', 
        'action' => 'route',
    )
);

class MyRouterController extends AppController {
    ... 
    function route ()
    {
        $args = func_get_args ();
        $controller = array_shift ($args);
        $this->requestAction (
            'my_'.$controller.'/'.implode('/', $args), 
            array ('return' => true)
        );
    }
}
...