У меня есть веб-сайт электронной коммерции, который доступен на нескольких языках через несколько доменов.Например: 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?К сожалению, я не могу найти достаточно документации по этому вопросу ...