Herkese merhaba,
Projemde çok dil için şu paketi kullanıyorum; https://github.com/Astrotomic/laravel-translatable
Bu paket sabit alanları ana tabloda, çevirilecek alanları ilişkili ikincil tabloda tutmamızı istiyor.
Paketi rahatlıkla kullanabiliyorum ancak bir yerde tıkandım.
Form Request kullandığımda, prepareForValidation metodu ile, doğrulamaya gitmeden önce müdahale etmek istediğim bir veri var. Bunu bir türlü diziye yansıtamıyorum.
public function rules(): array
{
$rules = [
'category_id' => ['required',Rule::in(SubCategory::pluck('id'))], //ana tablodaki sabit alan
'en.name' => 'required|max:60',
'en.slug' => 'nullable|min:3|unique:sub_category_translations,slug',
'en.meta_title' => 'required|max:255',
'en.meta_description' => 'required|max:255',
'en.meta_keywords' => 'required|max:255'
];
foreach (config('translatable.locales') as $locale) {
$rules[$locale . '.name'] = 'required|max:60';
$rules[$locale . '.slug'] = 'nullable|min:3|unique:sub_category_translations,slug';
$rules[$locale . '.meta_title'] = 'required|max:255';
$rules[$locale . '.meta_description'] = 'required|max:255';
$rules[$locale . '.meta_keywords'] = 'required|max:255';
}
return $rules;
}
Burada gördüğünüz gibi sabit alan dışındaki alanları en. keyi ile belirledikten sonra, paketin config ayarındaki dil tanımlarından yararlanarak foreach ile döndürüp eziyoruz.
Bu noktada Model::create($request->validated());
yapmamız yetiyor.
Benim tıkandığım ise; örneğin buradaki meta_keywords 'e müdale edip mesela Str::lower() kullanmak istediğimde, bu değişikliği yansıtamıyorum.
Nasıl bir yol izlemem gerekiyor?
protected function prepareForValidation()
{
$meta_keywords = [
'en.meta_keywords' => 'asd'
];
foreach (config('translatable.locales') as $locale) {
$meta_keywords[$locale.'.meta_keywords'] = Str::lower($this->input($locale.'.meta_keywords'));
}
$this->merge([$meta_keywords]);
dd($meta_keywords);
}
Örneğin bu şekilde dd($meta_keywords); yaparsam değerler gerçekten küçük harfe dönüşüyor. Ama dd() yi kaldırıp DB'ye gönderdiğim an, prepareForValidation'a hiç sokmamışım gibi davranıyor.