Merhabalar,
mcamara/laravel-localization kullanıyorum. URL'lere belli formatlarda farklı dillere göre route uyguladım. Fakat bir noktada işin içinden çıkamadım.
Rotalar:
Yukarıdaki 3 rota da aynı Controller'ı tetikliyor. Ve modelden istediğim değeri slug adı
na göre getiriyor. Fakat ben bu url'lerden çektiğim bir veriye, sayfamdaki sidebar-menu.blade.php
içinden sabit olarak erişmek istiyorum.
Burada yaşadığım sorun şu;
sidebar-menu.blade.php
gibi her sayfada gözükecek olan ve dile göre sürekli değişen içeriğe nasıl parametre aktaracağım?
Mesela /en/pages/privacy
şeklinde bir url'im var. Fakat privacy
olan kısım lang_code
'a göre değişir
sidebar-menu.blade.php:
<li class="nav-item">
<a href="{{ trans_url('routes.pages.show', ['page' => 'bu-modeli-temsil-eden-degişleni-nasıl-elde-etmeli?']) }}"
class="nav-link {{ request()->routeIs('pages.*') ? 'active' : '' }}">
<i class="fa fa-user-shield nav-icon"></i>
<p>{{ __('Privacy') }}</p>
</a>
</li>
SluggableTrait.php
namespace App\Traits\Models;
use Spatie\Sluggable\HasSlug;
use Spatie\Sluggable\SlugOptions;
// Laravel Sluggable Trait
trait SlugableTrait {
use HasSlug;
// Slug olarak işlenecek field
public $slugable_field = 'title';
// Slug oluşturmak için seçenekleri verir
public function getSlugOptions(): SlugOptions {
return SlugOptions::create()
->generateSlugsFrom($this->slugable_field)
->saveSlugsTo('slug')
->slugsShouldBeNoLongerThan(255);
}
// Get the route key for the model.
public function getRouteKeyName() {
return 'slug';
}
// Get the value of the model's localized route key.
// Model implements \Mcamara\LaravelLocalization\Interfaces\LocalizedUrlRoutable
public function getLocalizedRouteKey($locale) {
return $this->where('lang_code', $locale)->firstOrFail()->slug;
}
// Retrieve the model for a bound value.
public function resolveRouteBinding($value, $field = null) {
return $this->where('slug', $value)->where('lang_code', current_locale_key())->firstOrFail();
}
}
PageController.php
public function show(Page $page) {
// trans_url'i test etmek için
return trans_url('routes.pages.show', compact('page'));
}
web.php
Route::prefix(LaravelLocalization::setLocale() . "/admin")
->name('admin.')
->namespace('Admin')
->middleware(['localize', 'localeSessionRedirect', 'localizationRedirect', 'auth', 'verified'])
->group(function () {
// Pages:
Route::get(trans_route('routes.pages.show'), 'PageController@show');
Route::get(trans_route('routes.pages.edit'), 'PageController@edit');
});
helper.php
if (!function_exists('trans_route')) {
/**
* Laravel'de tanımlı route'a aktif olan dile göre yeni bir route oluşturur
*
* @param string route name
* @return string trans_route('routes.pages.edit');
*/
function trans_route($routeName) {
return LaravelLocalization::transRoute($routeName);
}
}
if (!function_exists('trans_url')) {
/**
* Laravel'de tanımlı route'a aktif olan dile göre yeni bir url oluşturur
*
* @param string route name
* @return string trans_url('routes.pages.edit');
*/
function trans_url($routename, $attributes = [], $forceDefaultLocation = false) {
return LaravelLocalization::getURLFromRouteNameTranslated(LaravelLocalization::getCurrentLocale(), $routename, $attributes, $forceDefaultLocation);
}
}
Ek bilgi gerekirse lütfen bildirin. Yardımınız için şimdiden teşekkür ederim.