据我了解,您希望在不刷新页面的情况下重复添加用户及其角色。假设是这种情况,您可以按照以下步骤操作。
注意:下面的代码是阐明这些步骤的最小说明。
角色模型:-(存储在 App\Models 目录中)(假设您有不同的角色表)
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Role extends Model
{
protected $fillable = ['role'];
public function User(){
return $this->belongsTo('App\Models\User');
}
}
用户控制器:-(存储在 App\HTTP\Controllers 目录中)
处理添加请求并在数据库中插入数据
<?php
namespace App\Http\Controllers;
use App\Models\User;
use App\Models\Role;
use Illuminate\Http\Request;
use DB;
class userController extends Controller
{
public static function addRole(Request $request)
{
User::where('id',$request->user_id)
->Role()
->create($request->only(['role']));
}
}
添加路由来处理请求:-
Route::post('/add/user', array('uses' => 'userController@addUser'));
在您的视图中添加一个将添加用户的表单:
{{ Form::open(['action' => ['userController@addUser'], 'method' => 'POST','id'=>'add_role_form']) }}
{{ Form::hidden('id', '', array('id' => 'id','class' => 'form-control')) }}
{{ Form::text('name', '', ['id' => 'name', 'class' => 'form-control', 'placeholder' => 'Search users','disabled' => 'disabled']) }}
{{ Form::select('role', array('admin' => 'Admin', 'Editor' => 'Editor'),['id' => 'role', 'class' => 'form-control']); }}
{{Form::button('Click Me!','id' => 'addRole', 'class' => 'btn btn-primary','obclick'=>'addRole();'])}}
{{ Form::close() }}
JS 使用 ajax 添加用户角色:
<script>
function addRole(){
$('#add_role_form').preventDefault()
$.ajax({
type: "POST",
url: $('#add_role_form').attr('action'),
data: $('#add_role_form').serialize(),
cache: false,
success: function(result){
// Do something
},
error: function (result) {
// Do something
}
});
}
</script>
PS:请添加一个JS脚本将所选用户的user_id分配给#add_role_form中的隐藏id。
更新:
HTML
<html>
<head>
<title>Test Form</title>
<script src="js/jquery-2.2.4.js"></script>
<script src="js/jquery.autocomplete.js"></script>
<script>
$(document).ready(function () {
console.log($('#userForm input:last'));
var user = Array('User1','User2','User3','User4','User5','User6');<!-- User data. Not required if serviceUrl option is provided-->
$('#user').autocomplete({
lookup: user, <!-- Use user variable as data source. Not required if serviceUrl option is provided for ajax request -->
tabDisabled:true,
showNoSuggestionNotice:true,
onSelect: function (suggestion) {
}
});
var role = Array('Role1','Role2','Role3','Role4','Role5','Role6');<!-- Role data. Not required if serviceUrl option is provided-->
$('#role').autocomplete({
lookup: role, <!-- Use role variable as data source. Not required if serviceUrl option is provided for ajax request -->
tabDisabled:true,
showNoSuggestionNotice:true,
onSelect: function (suggestion) {
}
});
});
var count = 0; <!-- Counter to keep track of elements i.e. user->role pairs -->
function add(){<!-- Function to insert user and role pair as input to form -->
$('#userForm input:last')
.before($('<label>')
.attr('for','data['+count+'][user]')
.text('User')
)
.before($('<input>')
.attr('type', 'text')
.attr('name','data['+count+'][user]')
.val($('#user').val())
)
.before($('<label>')
.attr('for','data['+count+'][role]')
.text('Role')
)
.before($('<input>')
.attr('type', 'text')
.attr('name','data['+count+'][role]')
.val($('#role').val())
)
.before($('<hr>'));
count=count+1;
}
</script>
<link media="all" type="text/css" rel="stylesheet" href="css/bootstrap.css">
<link media="all" type="text/css" rel="stylesheet" href="css/font-awesome.css">
</head>
<body class="container">
<div class="row">
<div class="col-lg-6">
<input type="text" id="user" class="form-control" placeholder="Search User" /><!-- User search field -->
</div>
<div class="col-lg-4">
<input type="text" id="role" class="form-control" placeholder="Search Role" /><!-- Role search field. You can use Dropdown list instead of Input -->
</div>
<div class="col-lg-2">
<a class="btn btn-info" onclick="add();">Add User</a> <!-- Button to add user -> role pair to form -->
</div>
</div>
<form method="post" id="userForm" action="http://127.0.0.1/public/test"> <!-- user data form. This is going to be submited to server-->
<input type="submit" name="submit" class="btn btn-primary"/>
</form>
</body>
</html>
路线
// To get Form
Route::get('test',function (){
return View::make('test');
});
// To handle Form
Route::post('test',function (Request $request){
var_dump($request->all());
});
var_dump 输出:
array (size=1)
'data' =>
array (size=5)
0 =>
array (size=2)
'user' => string 'User1' (length=5)
'role' => string 'Role1' (length=5)
1 =>
array (size=2)
'user' => string 'User1' (length=5)
'role' => string 'Role1' (length=5)
2 =>
array (size=2)
'user' => string 'User1' (length=5)
'role' => string 'Role1' (length=5)
3 =>
array (size=2)
'user' => string 'User1' (length=5)
'role' => string 'Role1' (length=5)
4 =>
array (size=2)
'user' => string 'User1' (length=5)
'role' => string 'Role1' (length=5)
更新 2:
Coordinate 是您的模型实例。我正在考虑将ID 作为自动增量。
public function add(Request $request){
$data = $request->data;
foreach ($data as $key=>$value){
$data[$key]['exam_id'] = unique();//Inserting exam id into your received data
}
Coordinate::create($data);
}