2016-11-02 11 views
0

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

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

мое лезвие

{{ Form::open(array('url' => 'admin/inv')) }} 
     {{ Form::open(array('url' => 'admin/inv/multiPC')) }} 
     <table class="table table-bordered"> 
      <tbody> 
      <tr> 
       <td><input type="checkbox" name="delete[]" value="{{ $product->product_id }}"> </td> 
       <td><strong>${{ $product->price }}</strong><input type="number" name='price[]' class="form-control"/></td> 
      </tr> 
      </tbody> 
     </table> 
    <button type="submit" href="{{ URL::to('/admin/del') }}?_token={{ csrf_token() }}">Delete</button> 
    <button type="submit" href="{{ URL::to('/admin/multiPC') }}?_token={{ csrf_token() }}">Update Price</button>  
    {{ Form::close() }} 
{{ Form::close() }}  

Те обе функции

public function pDelete() { 


    $delete = Input::only('delete')['delete']; 
    $pDel = Product::whereIn('product_id', $delete)->delete(); 

    return Redirect::to('/admin/inv')->with('message', 'Product(s) deleted.'); 
} 

public function priceUpdate() { 


    $pchanges->price = Input::only('price')['price']; 
    $pChange = Product::whereIn('product_id', $pchanges); 

    $pChange->save(); 
    return Redirect::to('/admin/inv')->with('message', 'Product(s) price changed.'); 
} 

И маршрут

Route::post('/admin/inv', ['uses' => '[email protected]', 'before' => 'csrf|admin']); 
Route::post ('/admin/inv/multiPC', ['uses' => '[email protected]', 'before' => 'csrf|admin']) 

Что произойдет, когда я проверить продукт и нажмите Delete продукт кнопки удаляется. Но когда я ввожу цену в поле ввода по цене и удаляю Update Price, страница обновляется только и цена не изменяется.

Есть ли способ сделать это без использования JS?

+0

Я думаю, что это должно быть возможно и в некоторые браузеры. Однако некоторые другие браузеры будут отклонять вложенные формы. Я считаю, что Chrome и IE имеют проблемы с этим. – CptMisery

+2

Насколько я знаю, вложенная форма не допускается. – reza

+0

Почему вы не можете писать обе логики только в одном методе, а не в двух формах? – iCoders

ответ

1

попробовать этот тип подхода

<form method="POST" class="form-horizontal" action="myapplication/personal"> 
    <input type="number" name='price[]' class="form-control"/> 
    <input type="checkbox" name="delete[]" value="{{ $product->product_id }}"> 

    <button type="submit" name="step[0]" value="Delete">Delete</button> 
    <button type="submit" name="step[1]" value="Update">Update Price</button> 
</form>  

от контроллера проверьте значение шага и сделать, как вам нравится

public function formProcess() { 
$action = request::get('step'); // i forgot laravel 4 syntex. used laravel 5 instead here :D 

if($action == 'Delete') 
{ 
    // do delete operation 
} 
else 
{ 
    //do update operation 
} 

} 

надеюсь, что это помогает