Korzystanie CakePHP v3.3.16Definiowanie CakePHP Route wywołać określony kontroler, czy dane działanie nie istnieje
Chcę napisać trasy zastępczej w taki sposób, że jeśli URL nie jest podłączony do jakiegokolwiek działania następnie go powinien przejść do tej rezerwy.
Utworzony trasy dla SEO friendly URL jak ten
$routes->connect(
':slug',
['prefix'=>'website','controller' => 'Brands', 'action' => 'index'],
['routeClass' => 'DashedRoute']
);
$routes->connect(
':slug/*',
['prefix'=>'website','controller' => 'Products', 'action' => 'index'],
['routeClass' => 'DashedRoute']
);
ale również inclute wszystkie działania kontrolera w niej więc jeśli próbuję połączyć się z kontrolera ex: Koszyk/indeks to będzie www/marki/index/index
Jeśli muszę usunąć je wykluczyć, muszę utworzyć trasę tak/
$routes->connect('/cart',['controller' => 'Cart'], ['routeClass' => 'DashedRoute']);
I tak do drugiego kontrolera, aby uzyskać dostęp.
Przykład: Mam kontroler CartController działanie addCart
CASE 1
jeśli mam dostępu URL my_project/cart/addCart/
Należy przejść do kontrolera koszyka działania
CASE 2
jeśli mam dostępu URL my_project/abc/xyz/
i nie ma kontroler o nazwie abc więc powinien iść do BrandsController działania indeksu
Moja Aktualny routes.php wygląda to
Router::defaultRouteClass(DashedRoute::class);
Router::scope('/', function (RouteBuilder $routes) {
$routes->connect('/', ['prefix'=>'website','controller' => 'Home', 'action' => 'index']);
$routes->connect('/trending-brands', ['prefix'=>'website','controller' => 'Brands', 'action' => 'trending']);
$routes->connect('/users/:action/*',['prefix'=>'website','controller' => 'Users'], ['routeClass' => 'DashedRoute']);
$routes->connect('/cart',['prefix'=>'website','controller' => 'Cart'], ['routeClass' => 'DashedRoute']);
$routes->connect('/cart/:action/*',['prefix'=>'website','controller' => 'Cart'], ['routeClass' => 'DashedRoute']);
$routes->connect(
':slug',
['prefix'=>'website','controller' => 'Brands', 'action' => 'index'],
['routeClass' => 'DashedRoute']
);
$routes->connect(
':slug/*',
['prefix'=>'website','controller' => 'Products', 'action' => 'index'],
['routeClass' => 'DashedRoute']
);
$routes->connect(':controller', ['prefix'=>'website'], ['routeClass' => 'DashedRoute']);
$routes->connect(':controller/:action/*', ['prefix'=>'website'], ['routeClass' => 'DashedRoute']);
$routes->fallbacks(DashedRoute::class);
});
Router::prefix('website', function (RouteBuilder $routes) {
$routes->fallbacks(DashedRoute::class);
});
Plugin::routes();
Naprawdę powinieneś wysyłać nieprawidłowe adresy URL do strony 404. – delboy1978uk
Czy możesz zadać pytanie? Masz na myśli, czy domain.comcart/jakiekolwiek działanie przejdzie do kontrolera koszyka, czy inaczej przejdzie do kontrolera brans? –
Tak, ale jeśli istnieje kontroler koszyka. Np .: JEŚLI trafimy na domain.com/cart/nie i kontroler koszyka nie istnieje, to przejdzie do marek, inaczej przejdzie do kontrolera marek, gdzie koszyk jest traktowany jako ślimak –