我正在用Laravel 5和Angularjs开发一个网站,我通过这个角度Ajax方法发送保存数据的请求:
save : function(screen_route, id=null) {
var default_screen_route = screen_route;
//var self = this;
//params = $('#store_form').serializeArray();
//console.log(params);
var store_form = document.getElementById('store_form');
form_data = new FormData(store_form);
if (document.getElementById("id")== null)
{
form_data.append('_method', "POST");
var method = 'POST';
} else {
//---------- this line because $.ajax doesn't support PATCH method.
form_data.append('_method', "PATCH");
var method = 'POST';
id = document.getElementById("id").value;
screen_route = screen_route + '/' + id;
}
/*
return $http({
method: method,
url: screen_route,
headers: { 'Content-Type' : undefined },
data: form_data,
});
*/
return $.ajax({
type: method,
url: screen_route,
async: false,
data: form_data,
processData: false,
contentType: false,
success: function (response) {
if(response.success) {
//----- sweet alert plugin -----
swal({
title: '',
text: response.success,
type: "success",
timer: 3000,
showConfirmButton: false
});
}
if(response.error) {
swal({
title: '',
text: response.error,
type: "error",
showConfirmButton: false
});
}
var current_id = response.id;
$http.get(default_screen_route +'/' + current_id ).success(function(response){
$('#dv_content').html(response);
$("#dv_save_btns").hide();
$("#dv_show_btns").show();
$("#dv_pagination").hide();
$( "#lnk_show_btns_edit" ).attr( "row_id", current_id );
});
},
error: function (response) {
var obj = response.responseJSON;
if(obj.errors) {
var errors = obj.errors;
} else {
var errors = obj;
}
var errorsHtml = '<ul>';
$.each(errors, function (index, value) {
errorsHtml += '<li>' + value + '</li>';
});
errorsHtml += '</ul>';
swal({
title: '',
text: errorsHtml,
type: "error",
html: true
});
},
});
},为了验证输入,我总是创建一个请求类和规则函数,但是因为我使用相同的角度函数来保存,所以我使用开关情况来检查当前的请求HTTP方法,当它= POST时,意味着我插入记录,当它= PATCH,这意味着我更新了记录。
但在这种情况下,出现了一个奇怪的错误,这是请求类中的规则函数:
public function rules()
{
$rules = [];
switch($this->method())
{
case 'GET':
case 'DELETE':
{
print_r("1 \n");
$rules = [];
}
case 'POST':
{
print_r("2 \n");
$rules = [
'email' => 'required|email|unique:technicians',
'mobile' => 'required|unique:technicians',
'name' => 'required',
'password' => 'required',
'id_number' => 'required|unique:technicians',
'image' => 'required|max:2048|mimes:jpeg,bmp,png,jpg,gif',
'lat' => 'required',
'long' => 'required',
];
if ($this->attributes->has('country_id') && $this->attributes['country_id']==9) {
$rules['id_number'] = 'required|unique:technicians|number|max:10|min:10';
}
}
case 'PUT':
case 'PATCH':
{
print_r("3 \n");
$rules = [
'email' => 'required|email',
'mobile' => 'required',
'name' => 'required',
//'password' => 'required',
'id_number' => 'required',
'lat' => 'required',
'long' => 'required',
];
}
default:break;
}
print_r($this->method()." \n");
print_r($rules);
return $rules;
}它应该打印2并执行POST大小写,但它是代码的输出:
2
3
POST
Array
(
[email] => required|email
[mobile] => required
[name] => required
[id_number] => required
[lat] => required
[long] => required
)它打印2,3真的我不知道怎么写?当然,它打印方法POST并且它是真的,但是当方法= PATCH时,它用值设置$rules数组
这里出了什么问题?
这是请求网址:
http://localhost/utf/fixbees/public/admin/technicians
以及请求头:
Request URL:http://localhost/utf/fixbees/public/admin/technicians
Request Method:POST
Status Code:422 Unprocessable Entity
Response Headers
view source
Cache-Control:no-cache
Connection:Keep-Alive
Content-Length:367
Content-Type:application/json
Date:Mon, 03 Apr 2017 12:09:21 GMT
Keep-Alive:timeout=5, max=100
phpdebugbar-id:a6b7cf5aa8f5117ed187b9fae77bedb2
Server:Apache/2.4.17 (Win32) OpenSSL/1.0.2d PHP/5.6.15
Set-Cookie:laravel_session=eyJpdiI6ImFpdnJWM3Z2WmQyM3BlREJpVitXOUE9PSIsInZhbHVlIjoicXJJSmcxVWZLeDhiT2Q4b1g1UStOWUpGbTQyQno1cHQwTmlsb05iWG9GUDlzU3FMcHZrVmg5bXpBaUQ3Zmkra3V1cENlXC9HZXhzSlloWjlGc2lraXJnPT0iLCJtYWMiOiI3ODlkNzE0MGFjZjEzZmI2ZjNmYjg4ZWJlOTk4ZWNiNzIzZjdmY2MzN2UzZGNkZWM0NWJjYjVkNDU5NjQzNzI0In0%3D; path=/; httponly
Set-Cookie:XSRF-TOKEN=eyJpdiI6Ik55SUFyY0huTGJBXC82T2o1dHh5NXNBPT0iLCJ2YWx1ZSI6InpLdkJXTVdoenFrbWVXMGtcL1plQ1czWGhmNnBIcDhGdDRKam0wMU53MXpvMmt0Z1A4QThlRkZXU2dUXC9Uc01CMGIxVDRuRjdzQWF6TDQ3RHVLeGh2aUE9PSIsIm1hYyI6IjAwMWVkMmM4ZjgzYWZjYTYzODM4ZjQzOGZiZWZjN2NhODhhNzBmMTcwYWI1NjhhNzU3OTIyOWIxZmE4MWRlMzYifQ%3D%3D; expires=Mon, 03-Apr-2017 14:09:21 GMT; Max-Age=7200; path=/
X-Content-Type-Options:nosniff
X-Powered-By:PHP/5.6.15
X-UA-Compatible:IE=edge
Request Headers
view source
Accept:*/*
Accept-Encoding:gzip, deflate, br
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:1357
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryzbqA326BcIu3Ciep
Cookie:intend=eyJpdiI6ImZRM2NSUmE5eXV3b0d2TUVzcW1LcWc9PSIsInZhbHVlIjoiR0VjTmk2MUt2S29qTWV3c1dMSUZrdDJiOTgrZmdMRDdGaVwvSXpkYzNLbGdKV0hnSndmN2c2dzA5WUZsYjN4b1FoSkp0U2JYbUN6UGFLb1wveGdUS04xQT09IiwibWFjIjoiNDhkNDAxOTI4ZDY5MWEyMTE4OWE1MzIzOWNlMTIwNGQxYzU0NzQyNmJmYjUxODViNmQ5MDBmODVhZWJhZTQyMSJ9; XSRF-TOKEN=eyJpdiI6IkY0QWRUc041QkhQaHpQRk5HWVwvb0pBPT0iLCJ2YWx1ZSI6InV6UWZlczdBN0ZNazR3TUlvUkQ1MHFVc0M0d1ZaZ0pyTWI2V2txNzU2blZCaGowR1wvS25mUTJrNllIc1M5ajhsN0x1OGpHM1Z1UkpnQjVtcUZuYlIrQT09IiwibWFjIjoiMDkzNWRlZjAzYTllMmI1YzYzM2EzMGU4MDg5OTYxMTYzYjRhYjhhNzE4N2E0MjJhOWZmZGFjYjZhODczYmI4NyJ9; laravel_session=eyJpdiI6Ijk0azNCaDRFSHFaRTF5K2VBYlhtMkE9PSIsInZhbHVlIjoiUExENHh0eVF0MTdoeHJNNVFIVUlGXC9RcjBTekUyZkRWeVF0MDN5S2F0eTI3QnJrODVvYzk3Sngrd1hEVU52RUNEV0dDWlpNWTlnblFldXJcLzZoM0hhUT09IiwibWFjIjoiODkzMzMzYzJkZjUwYmQ1MTJkOWM1YTEzM2ZjMzIxZmUzM2UxMGVmYzg2MDVmODA2YmQwY2Y3NDc1M2VhN2M5NyJ9
DNT:1
Host:localhost
Origin:http://localhost
Referer:http://localhost/utf/fixbees/public/admin/technicians
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
X-CSRF-TOKEN:ovfFSeLUbkrQvSX1DYTN9HLuoNWhEEL2X2kJ69bo
X-Requested-With:XMLHttpRequest
Request Payload
------WebKitFormBoundaryzbqA326BcIu3Ciep
Content-Disposition: form-data; name="_token"
ovfFSeLUbkrQvSX1DYTN9HLuoNWhEEL2X2kJ69bo
------WebKitFormBoundaryzbqA326BcIu3Ciep
Content-Disposition: form-data; name="name"
------WebKitFormBoundaryzbqA326BcIu3Ciep
Content-Disposition: form-data; name="email"
------WebKitFormBoundaryzbqA326BcIu3Ciep
Content-Disposition: form-data; name="password"
------WebKitFormBoundaryzbqA326BcIu3Ciep
Content-Disposition: form-data; name="mobile"
------WebKitFormBoundaryzbqA326BcIu3Ciep
Content-Disposition: form-data; name="id_number"
------WebKitFormBoundaryzbqA326BcIu3Ciep
Content-Disposition: form-data; name="country_id"
9
------WebKitFormBoundaryzbqA326BcIu3Ciep
Content-Disposition: form-data; name="city_id"
12
------WebKitFormBoundaryzbqA326BcIu3Ciep
Content-Disposition: form-data; name="image"; filename=""
Content-Type: application/octet-stream
------WebKitFormBoundaryzbqA326BcIu3Ciep
Content-Disposition: form-data; name="lat"
------WebKitFormBoundaryzbqA326BcIu3Ciep
Content-Disposition: form-data; name="long"
------WebKitFormBoundaryzbqA326BcIu3Ciep
Content-Disposition: form-data; name="active"
on
------WebKitFormBoundaryzbqA326BcIu3Ciep
Content-Disposition: form-data; name="_method"
POST
------WebKitFormBoundaryzbqA326BcIu3Ciep--发布于 2017-04-03 12:49:31
您丢失了break语句,所以您的开关大小写将执行-in伪代码- :-
检查你的第一个病例GET?不,去下一个案子
DELETE?不是删除,而是转到下一个案例
POST?是的,继续执行直到您的下一个break语句。
请考虑以下示例:
$c = 'c';
switch ($c) {
case 'a': echo 'a' . "\n";
case 'b': echo 'b' . "\n";
case 'c': echo 'c' . "\n";
case 'd': echo 'd' . "\n";
case 'e': echo 'e' . "\n";
}产出如下:
c
d
e而这一点:
$c = 'c';
switch ($c) {
case 'a': echo 'a' . "\n"; break;
case 'b': echo 'b' . "\n"; break;
case 'c': echo 'c' . "\n"; break;
case 'd': echo 'd' . "\n"; break;
case 'e': echo 'e' . "\n"; break;
}只会打印c,
因此,要解决您的问题,您需要打破您的开关箱:
switch($this->method())
{
case 'GET':
case 'DELETE':
{
print_r("1 \n");
$rules = [];
}
break;
case 'POST':
{
print_r("2 \n");
$rules = [
'email' => 'required|email|unique:technicians',
'mobile' => 'required|unique:technicians',
'name' => 'required',
'password' => 'required',
'id_number' => 'required|unique:technicians',
'image' => 'required|max:2048|mimes:jpeg,bmp,png,jpg,gif',
'lat' => 'required',
'long' => 'required',
];
if ($this->attributes->has('country_id') && $this->attributes['country_id']==9) {
$rules['id_number'] = 'required|unique:technicians|number|max:10|min:10';
}
}
break;
case 'PUT': break;
case 'PATCH':
{
print_r("3 \n");
$rules = [
'email' => 'required|email',
'mobile' => 'required',
'name' => 'required',
//'password' => 'required',
'id_number' => 'required',
'lat' => 'required',
'long' => 'required',
];
}
break;
default:
break;
}https://stackoverflow.com/questions/43184797
复制相似问题