Laravel 4 - 一个表单中的两个提交按钮,并让两个提交都由不同的操作处理
我有一个包含电子邮件和密码字段的登录表单。我有两个提交按钮,一个用于登录(如果用户已经注册),另一个用于注册(对于新用户)。由于登录操作和注册操作不同,因此我需要某种方法将包含所有帖子数据的请求重定向到其各自的操作。有没有办法在Laravel 4中以纯粹的Laravel方式实现这一点?
我有一个包含电子邮件和密码字段的登录表单。我有两个提交按钮,一个用于登录(如果用户已经注册),另一个用于注册(对于新用户)。由于登录操作和注册操作不同,因此我需要某种方法将包含所有帖子数据的请求重定向到其各自的操作。有没有办法在Laravel 4中以纯粹的Laravel方式实现这一点?
我会这样做的方式
如果您的表单是(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() }}
创建控制器“测试控制器”
添加路线
Route::post('test/auth', array('uses' => 'TestController@postAuth'));
在TestController中,您将有一种方法来检查单击了哪个提交,另外两种方法用于登录和注册
<?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.
}
}
?>
我的解决方案:
首先,我设置表单而不执行任何操作
<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' => 'TestController@login'));
Route::post('test/register', array('uses' => 'TestController@register'));
控制器(测试控制器.php)
public function login(){
//do something...
}
public function register(){
//do something...
}
Jquery: (测试.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();
});