2013-06-27 45 views
5

Tôi có một số hành vi lạ với các biểu mẫu trong Laravel 4. Tôi có một trang "cài đặt" với hai biểu mẫu, mỗi (được cho là) ​​POST với một phương thức điều khiển, cập nhật cơ sở dữ liệu và trở về trang cài đặt. Tuy nhiên, có vẻ như là một vấn đề, với cách thức các biểu mẫu của tôi đang hoạt động hoặc các tuyến đường của tôi.Laravel 4 - Nhiều biểu mẫu trên cùng một trang?

Sau đây là cách nó được, đơn giản hóa:

Cài đặt page: (site.com/settings)

<div id="form-one" class="form-area"> 

{{ Form::open(array('action' => '[email protected]')) }} 
    {{ Form::text('optionvalue', 'Default')) }} 
    {{ Form::submit('Save Changes') }} 
{{ Form::close() }} 

</div> 

<div id="form-two" class="form-area"> 

{{ Form::open(array('action' => '[email protected]')) }} 
    {{ Form::text('pagevalue', 'Default')) }} 
    {{ Form::submit('Save Changes') }} 
{{ Form::close() }} 

</div> 

Vì vậy, về cơ bản, có hai hình thức riêng biệt trên cùng một trang mà gửi đến hai phương pháp riêng biệt trong Bộ điều khiển tương tự - khi phương thức thành công, nó chuyển hướng chúng trở lại "cài đặt". Tôi sẽ không đăng các phương pháp, kể từ khi kiểm tra họ và họ làm việc, tôi tin rằng vấn đề là ở các tuyến đường file:

routes.php

// Checks if a session is active 
Route::group(array('before' => 'require_login'), function() 
{ 
    Route::group(array('prefix' => 'settings'), function() 
    { 
     Route::get('/', '[email protected]'); 
     Route::post('/', '[email protected]'); 
     Route::post('/', '[email protected]'); 

    }); 
}); 

Bây giờ tôi khá chắc chắn rằng nó không thích hai tuyến đường POST là như vậy, tuy nhiên tôi không thể nghĩ ra một cách khác để làm điều đó, vì các biểu mẫu nằm trên cùng một trang. Tôi gặp lỗi:

Unknown action [[email protected]]. 

Vì biểu mẫu tùy chọn đến trước tôi đoán. Nếu tôi lấy mã mở dạng lưỡi ra (cho cả hai), nó sẽ tải trang - nhưng rõ ràng là biểu mẫu không làm gì cả.

Bất kỳ trợ giúp nào sẽ tốt đẹp! Cảm ơn trước.

Trả lời

2

Bạn không thể thêm hai tuyến đường giống nhau cho các hành động khác nhau, vì chúng sẽ được chuyển đến tuyến đường trùng khớp đầu tiên và trong trường hợp của bạn là [email protected]. Thay đổi tuyến đường của bạn để:

Route::post('/option', '[email protected]'); 
    Route::post('/page', '[email protected]'); 

hơn trong cả hai hành động mà bạn có thể chuyển hướng đến '/': return Redirect::back(), và nếu lỗi đã xảy ra:

if ($validation->fails()) 
{ 
    return Redirect::to('/settings')->with_errors($validation); 
} 
0

giải pháp thay thế của tôi cho điều này là để tạo ra một html ẩn đầu vào trong mỗi biểu mẫu và làm cho trình điều khiển xác định nội dung được gửi dựa trên trường này. Vì vậy, yu có thể sử dụng chỉ một tuyến đường cho cả hai.

Các vấn đề liên quan