Laravel 4中同一视图中的两种形式

时间:2016-11-29 13:00:59

标签: php laravel-4

我已尝试过其他帖子中的大量解决方案,但仍然无法使其发挥作用。

我在页面上有两个表单(查看)

{{ Form::open(array('action' => 'AdminController@shopMode')) }}
   ....// form fields

   <button type="submit" class="btn btn-primary">Change</button>
{{ Form::close() }}           
    <hr/> 
{{ Form::open(array('action' => 'AdminController@preferencesSubmit')) }}
   ....// second form fields

   <button type="submit" class="btn btn-primary">Save Changes</button>
{{ Form::close() }}

然后我有路线

Route::post('/admin/preferences', ['uses' => 'AdminController@preferencesSubmit', 'before' => 'csrf|admin']);
Route::post('/admin/preferences', ['uses' => 'AdminController@shopMode', 'before' => 'csrf|admin']);

当我按下提交按钮时,数据库中没有任何变化。只是页面刷新,即使我提交第二个,我也会从FIRST表单获得成功消息。

是因为这两个帖子的路线中的网址都相同吗?

更新:第一个表单输入字段:

<input type="checkbox" name="onoffswitch" class="onoffswitch-checkbox" id="myonoffswitch" <?php if ($settings['preferences_shop_mode'] == 0){ ?> checked="checked" value="1"<?php }else{ ?> value="0" <?php } ?>>

这里我检查首选项是否= 0将值设置为1,否则值= 0.在源代码中,我看到该值为=1这是正确的,因为在数据库中我有0

<input type="checkbox" name="onoffswitch" class="onoffswitch-checkbox" id="myonoffswitch" checked="checked" value="1">

这是控制器

public function shopMode() {

    $preferences = Preferences::where('preferences_id', 1)->first();
    if (!$preferences) {
        App::abort(404);
    }

    Input::merge(array_map('trim', Input::all()));

    $preferences->preferences_shop_mode = Input::get('onoffswitch');          
    $preferences->save();
    return Redirect::to('/admin/preferences')->with('message', 'Shop mode changed successfully.');
} 

知道为什么没有在数据库中更新?

1 个答案:

答案 0 :(得分:3)

路由以级联方式读取。由于两条路径具有相同的路径,因此第一条路径优先(找到一个条目,因此不需要进一步的路由查找)。

您应该使用不同的路径拆分它们,例如:

Route::post('/admin/preferences/general', ['uses' => 'AdminController@preferencesSubmit', 'before' => 'csrf|admin']);
Route::post('/admin/preferences/shop', ['uses' => 'AdminController@shopMode', 'before' => 'csrf|admin']);