2013-06-10 3 views
2

Я пытаюсь отредактировать строку в моей базе данных. Я пытаюсь загрузить форму редактирования с содержимым в ней, как показано ниже, но я, кажется, получаю сообщение об ошибке: «Некоторые обязательные параметры отсутствуют (« совпадения »), чтобы создать URL-адрес для маршрута« matches.update ».»Невозможно создать форму редактирования и сохранить в базе данных

@extends('master') 
    @section('content') 
     <h1>Compare Ages</h1> 

     {{ Form::open(array('action' => '[email protected]')) }} 


      {{ Form::label('n1label', 'Person 1: ') }} 
      {{ Form::text('name1', $match->name1) }}<br/> 
      {{ Form::label('v1label', 'Age: ') }} 
      {{ Form::text('val1', $match->val1) }}<br/><br/> 

      {{ Form::label('n2label', 'Person 2: ') }} 
      {{ Form::text('name2', $match->name2) }}<br/> 
      {{ Form::label('v2label', 'Age: ') }} 
      {{ Form::text('val2', $match->val2) }}<br/><br/> 

     {{ Form::submit('Update Pair') }} 

     {{ Form::close() }} 

    @stop 

Это то, что я имею на мой контроллер для редактирования и способа обновления:

public function edit($id) 
{ 
    print_r(Mydata::find($id)); 
    return View::make('matches.edit') 

     ->with('title', 'Edit Match') 
     ->with('match', Mydata::find($id)); 

} 

public function update($id) 
{ 

    $input = Mydata::where('id', Mydata::find($id)); 
    $new_input = array(
     'name1'=>Input::get('name1'), 
     'val1'=>Input::get('val1'), 
     'name2'=>Input::get('name2'), 
     'val2'=>Input::get('val2') 
     ); 
    $input->update($new_input); 


    return Redirect::to('matches') 
    ->with('message', 'Match updated successfully!'); 

} 

Пожалуйста, дайте мне знать, как я могу загрузить содержимое на спичках/формы редактирования и сохранения после редактирования с помощью соответствующего маршрута/обновление затем перенаправить на соответствие/$ id с обновленными данными

ответ

0

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

{{ Form::open(array('route' => array('matches.update', $match->id), 'method' => 'PUT')) }} 

на контроллере MatchesController.php:

public function update($id) 
{ 
    $input = Mydata::find($id); 
    $input->update(array(
     'name1'=>Input::get('name1'), 
     'val1'=>Input::get('val1'), 
     'name2'=>Input::get('name2'), 
     'val2'=>Input::get('val2'), 
     'updated_at'=>new DateTime 
     )); 
    $input->save(); 

    return Redirect::to('matches/'.$id) 
    ->with('message', 'Match updated successfully!'); 

} 

d наконец, как вы можете видеть, я могу перенаправить на представление шоу. Спасибо, Джон!

3

Я думаю, что это для выполнения вашей функции, требующей идентификатора. Я предполагаю, что вам нужно включить идентификатор обновляемого элемента с открытым вызовом формы.

Я не уверен синтаксиса, что вам нужно, возможно, что-то вроде того, что Тейлор упоминает здесь: https://github.com/laravel/framework/issues/844#issuecomment-15996265

или что они говорят здесь: Laravel 4: What to pass as parameters to the Url class?. (Это, конечно, для класса URL, но я предполагаю, что это будет похоже для класса Form)

Edit:

Ok, вот код из функции Form в «getControllerAction», который называется по форме: : открыть, если вы используете параметр «действие».

/** 
* Get the action for an "action" option. 
* 
* @param array|string $options 
* @return string 
*/ 
protected function getControllerAction($options) 
{ 
    if (is_array($options)) 
    { 
     return $this->url->action($options[0], array_slice($options, 1)); 
    } 

    return $this->url->action($options); 
} 

Так это выглядит, как он просто захватывает первый элемент переданного массива для действия контроллера, а затем использует остальные в качестве опции. Таким образом, вы просто должны быть в состоянии пойти:

{{ Form::open(array('action' => '[email protected]', 'id' => $match->id)) }} 

Удачи :)

1

Просто немного подправить: если вы измените

{{ Form::open(array('route' => array('matches.update', $match->id), 'method' => 'PUT')) }} 

с

{{ Form::model($match, array('route' => array('matches.update', $match->id), 'method' => 'PUT')) }} 

Laravel будет заполнить существующие поля формы; приятное удобство для форм, которые необходимо отредактировать. Обратите внимание на использование Форма :: модель, передающая параметр $ совпадение.

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