我有一个模特类别。类别有很多本地化。当我存储类别时,我有这些输入:
{{ Form::text('title[en]', Input::old('title')) }}
{{ Form::text('title[ru]', Input::old('title')) }}
我将这样存储在我的控制器中:
// Gett all inputs
$inputs = Input::all();
// Create resource
$item = Category::create([]);
// Create localization
foreach(Input::get('title') as $locale => $title)
{
$locale = new Localization(['locale' => $locale, 'title' => $title]);
$locale = $item->localization()->save($locale);
}
这很有效,但更新此类关系的最佳做法是什么?目前我正在尝试使用Form :: model绑定。
@foreach($locales as $key => $locale)
{{ Form::text('title['.$locale.']', $model->translate($locale)->title, ['class' => 'form-control']) }}
@endforeach
我不知道Input :: old在这种情况下如何工作,所以现在我使用$ model-> translate($ locale) - > title来获取正确的值。基本上更新/验证部分确实不起作用。您可以建议更改以验证此类关系并更新它?
答案 0 :(得分:0)
今天我找到了一个存储/更新验证关系的工作解决方案。我希望这是最好/最简单的方法。我创建了一个带有输入验证的新数组,并相应地更改了视图错误。
这是我的更新控制器。
public function update($id)
{
// Find resource
$item = Category::find($id);
foreach(Input::get('title') as $locale => $title)
{
$v['title_'.$locale] = $title;
}
// Attempt validation
if($item->validate($v))
{
foreach(Input::get('title') as $locale => $title)
{
$localization = $item->translate($locale);
$localization->title = $title;
$localization->save();
}
return Redirect::action('AdminCategoryController@edit', [$item->id]);
}
else
{
// Failure, get errors
$errors = $item->errors();
return Redirect::back()
->withInput()
->with('errors', $errors);
}
}
这是更新视图;
{{ Form::model($model, ['action' => ['AdminCategoryController@update', $model->id], 'method' => 'PUT']) }}
@foreach($locales as $key => $locale)
<div id="{{ $locale }}">
<div class="form-group">
{{ Form::label('title['.$locale.']', _('admin.title_'.$locale)) }}
{{ Form::text('title['.$locale.']', $model->translate($locale)->title, ['class' => 'form-control']) }}
@if($errors->has('title_'.$locale))
<div class="help-block alert alert-danger">{{ $errors->first('title_'.$locale) }}</div>
@endif
</div>
</div>
@endforeach
{{ Form::close() }}
通过这种方式,您可以轻松地在Laravel中验证所有类型的关系(输入数组)。