Разбор маршрутов в cakephp для загрузки конкретной модели (возможно ли использовать .htaccess для этого?) - PullRequest
1 голос
/ 01 июня 2011

Первая часть этого вопроса будет выглядеть тривиально, но суть во второй части.

Итак, допустим, у меня есть несколько ссылок в моем приложении:

http://myapp.com/cars-audi
http://myapp.com/cars-opel
http://myapp.com/cars-fiat
http://myapp.com/cars-vw

InВ этих случаях используется модель автомобиля.Итак, в этом случае я хочу избежать использования косой черты в URL.

Тогда у меня будет больше страниц и URL, где будут задействованы дороги, например:

http://myapp.com/roads/germany
http://myapp.com/roads/austria
http://myapp.com/roads/hungary
http://myapp.com/roads/poland

Итак,если он начинается с cars- , в этом случае следует использовать модели автомобилей, а если он начинается с roads / , в игре появятся модельные дороги.

Можно ли делать с некоторыми регулярными выражениями в rout.php или лучше загружать (использовать) одну и ту же модель в обоих случаях и работать с ними таким образом?

Также возможно лиПомощь при разборе URL с использованием файла .htaccess?

1 Ответ

2 голосов
/ 02 июня 2011

Это простой случай маршрутизации URL-адреса на действие контроллера, он вообще не включает модели.

Router::connect('/:carlink',
                array('controller' => 'cars', 'action' => 'view'),
                array('carlink' => 'cars-\w+', 'pass' => array('carlink')));

Этот маршрут говорит любой URL, который соответствует /:carlink, должен быть направлен на данный контроллер и действие . В последней части вы разъясняете, что может быть :carlink с регулярным выражением cars-\w+ («автомобили-», за которым следует любое слово). Вы также передаете это значение своему вызываемому действию.

class CarsController extends AppController {
    public function view($car) {
        if (!preg_match('/cars-(\w+)/', $car, $matches)) {
            // action was accessed with invalid URL, bail out
            $this->cakeError('error404');
        }

        // use $matches[1], which will be 'audi', for example
        …
    }
}

Ваши дорожные URL-адреса будут перенаправляться на RoadsController, как обычно, так:

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