我有一個登錄表單,其中有電子郵件和密碼字段。我有兩個提交按鈕,一個用於登錄(如果用戶已經註冊),另一個用於註冊(用於新用戶)。由於登錄操作和註冊操作不同,因此我需要某種方式將請求與所有發佈數據重定向到其各自的操作。有沒有辦法在Laravel 4中以純Laravel的方式實現這一點?Laravel 4 - 兩種提交按鈕的一種形式,並提交由不同的行動處理
回答
的方式我會做
如果您的形式是(2個按鈕):
{{ Form::open(array('url' => 'test/auth')) }}
{{ Form::email('email') }}
{{ Form::password('password') }}
{{ Form::password('confirm_password') }}
<input type="submit" name="login" value="Login">
<input type="submit" name="register" value="Register">
{{ Form::close() }}
創建一個控制器 '的TestController'
添加路由
Route::post('test/auth', array('uses' => '[email protected]'));
在TestController你會有一個方法檢查w HICH提交被點擊和兩個其他方法進行登錄和註冊
<?php
class TestController extends BaseController {
public function postAuth()
{
//check which submit was clicked on
if(Input::get('login')) {
$this->postLogin(); //if login then use this method
} elseif(Input::get('register')) {
$this->postRegister(); //if register then use this method
}
}
public function postLogin()
{
echo "We're logging in";
//process your input here Input:get('email') etc.
}
public function postRegister()
{
echo "We're registering";
//process your input here Input:get('email') etc.
}
}
?>
感謝ClickCoder,你是對的。但是任何想法,如何在不中斷功能的情況下將輸入數據傳遞給Laravel寧靜的store()動作? –
如果我理解正確,你已經有postLogin和postRegister(或類似的方法),你只需要路由到登錄或註冊。 '路線::後( '測試/ AUTH',函數(){ \t如果(輸入::得到( '登錄')){ \t \t $行動= 'postLogin'; \t} ELSEIF(輸入: :獲得( '註冊')){ \t \t $行動= '的postRegister'; \t} \t回報應用::讓( '的TestController') - > $行動(); });' 這是否幫幫我?無論您使用哪種控制器,您都可以獲得所有輸入。 – ClickCoder
是的,你理解它是對的。這正是我想要的。我會嘗試你提供的代碼,並讓你知道結果。雖然只是通過查看代碼,我可以告訴這是完美的。謝謝:-) –
你可以像下面這樣:
你的路由(routes.php文件):
Route::post('post1', array('before' => 'checkForm', 'uses' => '[email protected]'));
Route::get('post2', array('as' => 'post2', 'uses' => '[email protected]'));
filters.php
Route::filter('checkForm', function()
{
if(Input::has('button2')) {
return Redirect::route('post2')->withInput();
}
});
TestController.php
public function post1(){
return Input::all();
}
public function post2(){
return Input::old();
}
形式:應該在你的view.however,我創建了這個答案的路徑文件的臨時形式。
Route::get('form2', function()
{
return Form::open(array('url' => URL::to('post1'))).
Form::text('name', null).
Form::email('email', null).
'<button type="submit" name="button1" value="1">submit</button>'.
'<button type="submit" name="button2" value="2">submit2</button>'.
Form::close();
});
現在瀏覽:
http://yourDomain/form2
請注意:我不知道這是爲了讓兩個提交按鈕的正確方法,但它有兩個提交按鈕的作用。
感謝Anam在這樣的細節中解釋。只是想知道,有沒有辦法將所有輸入重定向到一個動作? –
你可以用'withInput();'重定向。重定向後,您可以使用'Input :: old();'來獲取所有輸入。例如檢查我的答案。 – Anam
給提交按鈕不同的名稱,如
<button type="submit" name="login">Login</button>
<button type="submit" name="signup">Signup</button>
在你的控制器,只需辦理登錄或註冊取決於哪個按鈕提交。你仍然會得到你所有的輸入,你可以這樣做;
public function postLoginOrSignup(){
$data = Input::all();
if(isset($data['login'])){
//handle login process
}
if(isset($data['signup'])){
//handle singup process
}
}
感謝您的及時迴應。這很好,但實際問題從這裏開始。現在可以調用所需的動作,但是隨後我必須將輸入數據作爲參數傳遞給動作。然後我必須修改我的寧靜行動的方式。我不想要的。我想讓Laravel寧靜的store()動作完好無損。任何想法 ? –
嗨,很抱歉,但我不太瞭解評論,請您詳細說明一下您不想要的內容以及您想實現的內容。 – mandeeya
簡單地說,有沒有辦法將輸入傳遞給相應的動作? –
我的解決辦法:
首先,我建立了形式,沒有動作
<script>
var baseUrl = "{{ URL::to('/'); }}";
</script>
{{ Form::open(array('url' => '', 'id'=> 'test-form')) }}
{{ Form::text('username') }}
{{ Form::password('password') }}
{{ Form::password('confirm_password') }}
<input type="submit" name="login" id="login" value="Login">
<input type="submit" name="register" id="register" value="Register">
{{ Form::close() }}
的路線(路線。PHP):
Route::post('test/login', array('uses' => '[email protected]'));
Route::post('test/register', array('uses' => '[email protected]'));
控制器(TestController.php)
public function login(){
//do something...
}
public function register(){
//do something...
}
jQuery的:(test.js)
$('form :submit').on('click', function(event){
var a = $(this);
var form = $('form');
var action = a.attr('id');
form.attr('action', baseUrl + '/test/' + action);
form.submit();
});
你爲我節省了很多時間! – HirenMangukiya
ClickCoder的回答是點上,我唯一會取代,要以100%「純Laravel方式」來完成,也應該使用Form Builder作爲提交按鈕。
http://laravel.com/docs/4.2/html#buttons
第一個參數是提交的值,你可以在下列選項數組中傳遞它的名字。
所以不是:
<input type="submit" name="login" value="Login">
<input type="submit" name="register" value="Register">
你會怎麼做:
{{ Form::submit('Login', ['name' => 'login']) }}
{{ Form::submit('Register', ['name' => 'register']) }}
如果你願意,你完全可以通過讓他們共享同一個名稱,並做一些逃脫的if語句像這樣:
HTML:
{{ Form::submit('Login', ['name' => 'action']) }}
{{ Form::submit('Register', ['name' => 'action']) }}
PHP:
public function postAuth()
{
$action = 'post' . Input::get('action'); //becomes either postLogin or postRegister
$this->$action();
}
少一點築巢,更Laravel一點!
很酷的建議,但如果提交按鈕的值不只一個字 – zeckdude
- 1. 兩種形式,一種提交按鈕
- 2. 一種形式兩個提交按鈕
- 3. 兩種形式一個提交按鈕
- 4. 從一個提交的兩種形式的值提交按鈕
- 5. 兩種提交按鈕的一種形式執行兩個不同的servlets
- 6. 以一種形式處理兩個提交按鈕
- 7. 兩種形式一提交
- 8. jQuery Ajax窗體兩種提交按鈕的一種形式
- 9. HTML |一種形式一種提交兩種行動
- 10. 許多提交按鈕一種形式
- 11. MVC4 - 一種形式2提交按鈕
- 12. 兩種形式提交值
- 13. 以一種形式處理2個提交按鈕
- 14. 以一種形式處理多個提交按鈕ASP.Net
- 15. 多個不同的一種形式提交按鈕
- 16. 提交兩種形式
- 17. 兩種不同的提交按鈕的不同行爲?
- 18. 兩種形式之一提交 - 提交,延遲,提交
- 19. 對於同一POST方法/動作,一種形式的兩個提交按鈕
- 20. 提交按鈕不處理PHP形式
- 21. 三種提交按鈕的一種形式HTML和MySQL查詢
- 22. 一種形式的兩個提交按鈕
- 23. 一種形式的兩個提交按鈕
- 24. 兩種形式提交按鈕,一個iframe
- 25. 我在頁面上有兩種形式,但提交按鈕提交這兩種形式
- 26. HTML表單兩種不同的提交按鈕和兩種不同的功能
- 27. 兩種形式,一是提交軌
- 28. 一種形式提交兩個動作上點擊在laravel
- 29. 多種「鏈接」提交按鈕一種形式
- 30. 使用下拉提交按鈕發佈兩種形式之一
給提交按鈕不同的名稱。 –