Как использовать динамические URL / маршруты в зависимости от домена? - PullRequest
0 голосов
/ 09 июля 2019

У меня есть веб-сайт электронной коммерции, который доступен на нескольких языках через несколько доменов.Например: example.com (английский), example.fr (французский) и т. Д. ... Я хочу, чтобы динамические URL-адреса были такими: example.com/product/shoes-54, example.com/produit/chaussures-54.Как объявить эти маршруты в зависимости от домена, зная, что / produit должен быть доступен только на example.fr и /product только на example.com?

Я пытался объявить эти маршруты в случае переключения в зависимостидомена.

<?php
$domainName = isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : '';
switch($domainName) {
    case 'example.fr':
    case 'www.example.fr':
        $routes->connect('/ajoutez-votre-experience', ['controller' => 'Home', 'action' => 'add']);
        $routes->connect('/contact', ['controller' => 'Home', 'action' => 'contact']);
        $routes->connect('/conditions-d-annulation', ['controller' => 'Home', 'action' => 'refund']);
        $routes->connect('/hote/:slug', ['controller' => 'Host', 'action' => 'index'])->setPass(['slug']);
        $routes->connect('/experience/:slug', ['controller' => 'Experience', 'action' => 'index'])->setPass(['slug']);
        $routes->connect('/region/:region', ['controller' => 'Location', 'action' => 'index'])->setPass(['region']);
        $routes->connect('/region/:region/:region_sub', ['controller' => 'Location', 'action' => 'index'])->setPass(['region','region_sub']);
        $routes->connect('/region/:region/:region_sub/:city', ['controller' => 'Location', 'action' => 'index'])->setPass(['region','region_sub','city']);
        $routes->connect('/recherche', ['controller' => 'Search', 'action' => 'index']);
        break;
    case 'example.com':
    case 'www.example.com':
    case '':
    default:
        $routes->connect('/add-your-business', ['controller' => 'Home', 'action' => 'add']);
        $routes->connect('/contact', ['controller' => 'Home', 'action' => 'contact']);
        $routes->connect('/cancellation-condition', ['controller' => 'Home', 'action' => 'refund']);
        $routes->connect('/host/:slug', ['controller' => 'Host', 'action' => 'index'])->setPass(['slug']);
        $routes->connect('/experience/:slug', ['controller' => 'Experience', 'action' => 'index'])->setPass(['slug']);
        $routes->connect('/location/:region', ['controller' => 'Location', 'action' => 'index'])->setPass(['region']);
        $routes->connect('/location/:region/:region_sub', ['controller' => 'Location', 'action' => 'index'])->setPass(['region','region_sub']);
        $routes->connect('/location/:region/:region_sub/:city', ['controller' => 'Location', 'action' => 'index'])->setPass(['region','region_sub','city']);
        $routes->connect('/search', ['controller' => 'Search', 'action' => 'index']);
        break;
}

Работает нормально, кроме случаев, когда мне нужно получить конкретный URL-адрес продукта в моих задачах CRON.Поскольку я не нахожусь в определенном домене, я не могу «угадать» URL-адрес и маршрут.

Я думал об именовании своих маршрутов, но я имею в виду, что мне нужно объявить все темы, чтобы получить егов моей задаче CRON, которая мне не подходит, потому что я не хочу, чтобы французский веб-сайт был доступен на example.fr/product/shoes-54.

Каков наилучший способ обработки нескольких маршрутов доменов / языков в приложении CakePHP?К сожалению, я не могу найти достаточно документации по этому вопросу ...

...