Hilfsfunktion zur Erstellung mehrsprachiger URLs in CodeIgniter 4
Dies kann nützlich sein, wenn Sie benannte Routen für mehrere Sprachen haben. Im Allgemeinen möchte man denselben Routennamen für verschiedene Sprachen verwenden, aber dazu muss man die Sprache vorangestellt werden. Schauen wir uns an wie.
Inhaltsverzeichnis
Schreiben der Hilfsfunktion route()
Erstellen wir die Datei app/Helpers/route_helper.php:
// app/Helpers/route_helper.php use CodeIgniter\Router\Exceptions\RouterException; if (!function_exists('route')) { function route(string $routeName, ...$params) { $locale = service('request')->getLocale(); $routes = service('routes'); if (strpos($routeName, '{locale}') !== false) { $routeName = strtr($routeName, ['{locale}' => $locale]); } else { $routeName = $locale . '.' . $routeName; } $reverseRoute = $routes->reverseRoute($routeName, ...$params); if (!$reverseRoute) { throw RouterException::forInvalidRoute($routeName); } return $reverseRoute; } }
Wenn wir einen Routennamen wie {locale}.posts.index oder auch nur posts.index verwenden, erhalten wir den Link zu der benannten Route, wenn sie in unserer Routenliste konfiguriert ist.
Registrierung des Helfers
Dann fügen wir den neuen Helfer in unsere BaseController.php ein:
// app/Controllers/BaseController.php // other code... protected $helpers = [ // other helpers... 'route' ]; // other code...
Einstellung der mehrsprachigen Routen
Das Folgende ist nur ein Beispiel dafür, wie Sie Ihre Routen einrichten könnten:
// app/Config/development/Routes.php # Englisch $routes->group('en', function() use ($routes) { $routes->get('/', [HomeController::class, 'index'], ['as' => 'en.home']); $routes->get('posts', [PostController::class, 'index'], ['as' => 'en.posts.index']); $routes->get('posts/new', [PostController::class, 'new'], ['as' => 'en.posts.new']); $routes->get('posts/(:num)', [PostController::class, 'show/$1'], ['as' => 'en.posts.show']); $routes->post('posts/create', [PostController::class, 'create'], ['as' => 'en.posts.create']); }); # Italienisch $routes->group('it', function() use ($routes) { $routes->get('/', [HomeController::class, 'index'], ['as' => 'it.home']); $routes->get('annunci', [PostController::class, 'index'], ['as' => 'it.posts.index']); $routes->get('annunci/nuovo', [PostController::class, 'new'], ['as' => 'it.posts.new']); $routes->get('annunci/(:num)', [PostController::class, 'show/$1'], ['as' => 'it.posts.show']); $routes->post('annunci/crea', [PostController::class, 'create'], ['as' => 'it.posts.create']); });
Den Link zur benannten Route in unseren Ansichten erstellen
Nun können wir den Link in den Views erstellen:
// app/Views/Login/form.php // Wir könnten ein Formular wie dieses erstellen: <?= form_open_multipart(route('login')) ?> ... <?= form_close() ?> // Und Links wie diese: // app/Views/layouts/base.php <ul class="navbar"> <li> <a href="<?= route('home') ?>">Startseite</a> </li> <li> <a href="<?= route('posts.index') ?>">Alle Beiträge</a> </li> <li> <a href="<?= route('posts.new') ?>">Neuer Beitrag</a> </li> </ul>
Auf diese Weise können wir in CodeIgniter 4 das gleiche Verhalten nachbilden , das Laravel mit seiner eigenen route()-Funktion bietet.
Übergabe von Parametern an die route-Funktion
Da wir die Möglichkeit hinzugefügt haben, Parameter zu haben, können wir sie einfach wie folgt übergeben:
<?= route('posts.show', $post->id) ?>
Was meint ihr dazu? Lass es mich in einem Kommentar unten wissen! Wenn dir dieser Artikel gefällt, folge mir auf Facebook und Youtube!