Как правильно маршрутизировать при передаче аргумента в функцию? - PullRequest
0 голосов
/ 24 февраля 2012

У меня есть маршрут:

Router::connect('/restaurants/*', array('controller'=>'restaurants', 'action' => 'view'));

, что когда пользователь заходит на site.com/restaurants/Seafood, он получает список ресторанов морепродуктов.Проблема в том, что теперь я хочу добавить функцию редактирования в мой контроллер, а site.com/restaurants/edit/4 направляет функцию просмотра моего контроллера.Как мне указать мои маршруты для отправки / ресторанов / редактирования в функцию edit ()?

Я понимаю, что жадная звезда была плохой идеей, но я не знал, как сделать свою функциюfor view () работает правильно без него.Вот мой взгляд код:

public function view($type=null) {
$this->set('title', $type.' restaurants in and near Gulf Shores');
$this->paginate['Restaurant']=array(
   'limit'=>9,
    'order'=>array(
        'id'=>'asc'
        ),
    'joins' => array(
         array( 
           'table' => 'cuisines_restaurants', 
           'alias' => 'CuisinesRestaurant', 
           'type' => 'inner',  
           'conditions'=> array('CuisinesRestaurant.restaurant_id = Restaurant.id') 
         ), 
         array( 
           'table' => 'cuisines', 
           'alias' => 'Cuisine', 
           'type' => 'inner',  
           'conditions'=> array( 
               'Cuisine.id = CuisinesRestaurant.cuisine_id'
               )
           )
      )
    ); 
$this->set('restaurantType',$this->paginate($this->Restaurant, array('cuisine_type'=>$type)));

}

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Это правильный способ сделать такие маршруты:

Router::connect(
    '/restaurants/:type',
    array('controller'=>'restaurants', 'action' => 'view'),
    array(
        'pass'=>array('type'),
        'type'=>'regexHere'
    )
);

Router::connect(
    '/restaurants/edit/:id',
    array('controller'=>'restaurants', 'action' => 'view'),
    array(
        'pass'=>array('id'),
        'id'=>'[0-9]+'
    )
);

Еще одна яркая сторона этого пути - то, что вы можете выполнять маршрутизацию в соответствии с регулярным выражением, поэтому, если кто-то попытается получить доступ к вашему сайту / ресторанам /edit / notanumber не будет перенаправлен на страницу редактирования.

0 голосов
/ 24 февраля 2012

Если у вас мало контроллеров, где вам нужно реализовать эту функцию, вы можете сделать это «быстрым и грязным» способом, то есть явными маршрутами:

Router::connect('/restaurants/edit/*', array('controller'=>'restaurants', 'action' => 'edit'));

(не забудьте поставить эту строку над вашей жадной в маршрутах .php)

Если вам нужна эта функциональность для многих контроллеров и действий, тогда более универсальная маршрутизация будет иметь больше смысла.

...