2014-06-07 3 views
0

У меня есть форма, содержащая список настроек, все с их собственными идентификаторами, показанные с помощью простого цикла foreach. Когда пользователь нажимает кнопку обновления, я хочу иметь возможность обновлять все значения, используя Anahkiasen/Former. Однако, похоже, я не могу найти документацию о том, как отправлять более одного набора записей.Обновление нескольких строк сразу с использованием метода Former в Laravel

Например, если я открывала форму для редактирования только один параметр, а не все из них, я бы просто сделать следующее:

{{ Former::open()->method('PUT')->action(URL::to('settings/' . $setting['id'])) }} 

Это направит его к моему «обновление» метода ресурсов и следующий код будет заботиться об обновлении:

public function update($id) 
{ 
    $setting = Setting::findOrFail($id); 

    if ($setting->save()) { 
     return Redirect::back()->with('message', "Setting #$id updated!"); 
    } else { 
     return Redirect::back()->withInput()->withErrors($setting->errors()); 
    } 
} 

можно ли сделать это с помощью нескольких записей сразу и по-прежнему использовать удобные $autoHydrateEntityFromInput и $forceEntityHydrationFromInput особенности?

Я использую Laravel 4.1 и Form 3.4.2.

ответ

0

Это должно было быть сделано, просто помещая значения в массив и заставить существующие значения в шаблоне клинка:

@foreach ($settings as $s) 
<div class="row"> 
    {{ Former::text('values[' . $s['id'] . ']', $s['name'])->forceValue($s['value']) }} 
</div> 
@endforeach 

Затем извлекают значения в контроллере:

public function update() 
{ 
    $values = Input::get('values'); 

    foreach ($values as $id => $val) { 
     $setting = Setting::findOrFail($id); 

     $setting['value'] = $val; 

     if (!$setting->save()) { 
      return Redirect::back()->withInput()->withErrors($setting->errors()); 
     } 
    } 

    return Redirect::back()->with('message', "Settings updated!"); 
} 

Doing это так, стандартный ресурс не будет работать как Route::resource('settings', 'SettingsController');, поэтому вместо этого мне пришлось просто сделать Route::post('settings/update', '[email protected]');

Насколько я могу судить, автогидра также не будет работать в этом случае.

Смежные вопросы