Skip to content

Commit bf521b8

Browse files
author
qiang.sun
committed
自定义验证规则
1 parent 764dc66 commit bf521b8

File tree

10 files changed

+210
-23
lines changed

10 files changed

+210
-23
lines changed

app/Http/Controllers/RequestController.php

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,16 @@
22

33
namespace App\Http\Controllers;
44

5+
use App\Http\Requests\SubmitFormRequest;
56
use Illuminate\Http\Request;
67
use Illuminate\Support\Facades\Storage;
8+
use Illuminate\Support\Facades\Validator;
79

810
class RequestController extends Controller
911
{
10-
public function form(Request $request, $id)
12+
public function form(SubmitFormRequest $request)
1113
{
12-
// 通过 $request 实例获取请求数据
13-
// dd($request->all());
14-
// dd($request->except('id'));
15-
// dd($request->only(['name', 'site', 'domain']));
16-
// $id = $request->has('id') ? $request->get('id') : 0;
17-
// dd($id);
18-
// dd($request->input('books'));
19-
// dd($request->input('books.0'));
20-
// dump($request->input('books.0.author'));
21-
// dump($request->input('books.1'));
22-
dump($request->json('site'));
23-
dump($request->input('books.0.author'));
24-
dump($request->input('books.1'));
25-
dump($request->segments());
26-
dump($id == $request->segment(2));
14+
return response('表单验证通过');
2715
}
2816

2917
public function formPage()
@@ -33,6 +21,15 @@ public function formPage()
3321

3422
public function fileUpload(Request $request)
3523
{
24+
$this->validate($request, [
25+
'picture' => 'bail|required|image|mimes:jpg,png,jpeg|max:1024'
26+
],[
27+
'picture.required' => '请选择要上传的图片',
28+
'picture.image' => '只支持上传图片',
29+
'picture.mimes' => '只支持上传jpg/png/jpeg格式图片',
30+
'picture.max' => '上传图片超过最大尺寸限制(1M)'
31+
]);
32+
3633
if ($request->hasFile('picture')) {
3734
$picture = $request->file('picture');
3835
if (!$picture->isValid()) {
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
3+
namespace App\Http\Requests;
4+
5+
use App\Rules\SensitiveWordRule;
6+
use Illuminate\Foundation\Http\FormRequest;
7+
8+
class SubmitFormRequest extends FormRequest
9+
{
10+
/**
11+
* Determine if the user is authorized to make this request.
12+
*
13+
* @return bool
14+
*/
15+
public function authorize()
16+
{
17+
return true;
18+
}
19+
20+
/**
21+
* Get the validation rules that apply to the request.
22+
*
23+
* @return array
24+
*/
25+
public function rules()
26+
{
27+
return [
28+
'title' => [
29+
'bail',
30+
'required',
31+
'string',
32+
'between:2,32',
33+
new SensitiveWordRule()
34+
],
35+
'url' => 'sometimes|url|max:200',
36+
'picture' => 'nullable|string',
37+
];
38+
}
39+
40+
public function messages()
41+
{
42+
return [
43+
'title.required' => '标题字段不能为空',
44+
'title.string' => '标题字段仅支持字符串',
45+
'title.between' => '标题长度必须介于2-32之间',
46+
'url.url' => 'URL格式不正确,请输入有效的URL',
47+
'url.max' => 'URL长度不能超过200',
48+
];
49+
}
50+
51+
public function attributes()
52+
{
53+
return [
54+
'title' => '标题',
55+
'url' => 'URL',
56+
'picture' => '图片'
57+
];
58+
}
59+
}

app/Providers/AppServiceProvider.php

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22

33
namespace App\Providers;
44

5+
use App\Contracts\BillerInterface;
6+
use App\Contracts\BillingNotifierInterface;
7+
use App\Contracts\UserRepositoryInterface;
8+
use App\Repositories\UserRepository;
9+
use App\Services\EmailBillingNotifier;
10+
use App\Services\SmsBillingNotifier;
11+
use App\Services\StripeBiller;
512
use Illuminate\Support\ServiceProvider;
613

714
class AppServiceProvider extends ServiceProvider
@@ -24,6 +31,19 @@ public function boot()
2431
*/
2532
public function register()
2633
{
27-
//
34+
$this->app->bind(UserRepositoryInterface::class, function ($app) {
35+
return new UserRepository();
36+
});
37+
38+
// 延迟实例化
39+
$this->app->bind(BillerInterface::class, function ($app) {
40+
return new StripeBiller($app->make(BillingNotifierInterface::class));
41+
});
42+
43+
// 立即实例化
44+
//$this->app->bind(BillingNotifierInterface::class, StripeBiller::class);
45+
46+
$notifier = new SmsBillingNotifier;
47+
$this->app->instance(BillingNotifierInterface::class, $notifier);
2848
}
2949
}

app/Rules/SensitiveWordRule.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
namespace App\Rules;
4+
5+
use Illuminate\Contracts\Validation\Rule;
6+
7+
class SensitiveWordRule implements Rule
8+
{
9+
/**
10+
* Create a new rule instance.
11+
*
12+
* @return void
13+
*/
14+
public function __construct()
15+
{
16+
//
17+
}
18+
19+
/**
20+
* Determine if the validation rule passes.
21+
*
22+
* @param string $attribute
23+
* @param mixed $value
24+
* @return bool
25+
*/
26+
public function passes($attribute, $value)
27+
{
28+
return strpos($value, '敏感词') === false;
29+
}
30+
31+
/**
32+
* Get the validation error message.
33+
*
34+
* @return string
35+
*/
36+
public function message()
37+
{
38+
return ':attribute输入字段中包含敏感词';
39+
}
40+
}

app/Services/EmailBillingNotifier.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: sunqiang
5+
* Date: 2018/11/16
6+
* Time: 5:58 PM
7+
*/
8+
9+
namespace App\Services;
10+
use App\Contracts\BillingNotifierInterface;
11+
12+
class EmailBillingNotifier implements BillingNotifierInterface
13+
{
14+
public function notify(array $user, $amount)
15+
{
16+
// TODO: Implement notify() method.
17+
}
18+
}

app/Services/SmsBillingNotifier.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: sunqiang
5+
* Date: 2018/11/16
6+
* Time: 6:12 PM
7+
*/
8+
9+
namespace App\Services;
10+
use App\Contracts\BillingNotifierInterface;
11+
12+
class SmsBillingNotifier implements BillingNotifierInterface
13+
{
14+
public function notify(array $user, $amount)
15+
{
16+
// TODO: Implement notify() method.
17+
}
18+
}

public/js/app.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48005,6 +48005,11 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
4800548005
$('#picture-path').val(response.data.path);
4800648006
$('#picture-preview').html('<img src="' + response.data.path + '">');
4800748007
}).catch(function (error) {
48008+
if (error.response.status === 422) {
48009+
$.each(error.response.data.errors, function (field, errors) {
48010+
$('#picture-preview').append('<div class="alert alert-danger">' + errors[0] + '</div>');
48011+
});
48012+
}
4800848013
console.log(error);
4800948014
});
4801048015
}
@@ -48029,7 +48034,9 @@ var render = function() {
4802948034
on: { change: _vm.uploadFile }
4803048035
}),
4803148036
_vm._v(" "),
48032-
_c("input", { attrs: { type: "hidden", id: "picture-path", value: "" } }),
48037+
_c("input", {
48038+
attrs: { type: "hidden", id: "picture-path", name: "picture", value: "" }
48039+
}),
4803348040
_vm._v(" "),
4803448041
_c("div", { attrs: { id: "picture-preview" } })
4803548042
])

resources/js/components/FileUploadComponent.vue

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<div class="form-group">
99
<label for="picture">上传一张图片</label>
1010
<input type="file" class="form-control-file" id="picture" ref="picture" v-on:change="uploadFile"/>
11-
<input type="hidden" id="picture-path" value="">
11+
<input type="hidden" id="picture-path" name="picture" value="">
1212
<div id="picture-preview">
1313

1414
</div>
@@ -33,6 +33,11 @@
3333
$('#picture-path').val(response.data.path);
3434
$('#picture-preview').html('<img src="' + response.data.path + '">')
3535
}).catch(function (error) {
36+
if (error.response.status === 422) {
37+
$.each(error.response.data.errors, function (field, errors) {
38+
$('#picture-preview').append('<div class="alert alert-danger">' + errors[0] + '</div>');
39+
});
40+
}
3641
console.log(error);
3742
});
3843
}

resources/views/request/form.blade.php

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,25 @@
1111
</head>
1212
<body>
1313
<div id="app">
14-
<div class="container">
15-
<form>
14+
<div class="container" style="margin-top: 10px;">
15+
@if ($errors->any())
16+
<div class="alert alert-danger">
17+
<ul>
18+
@foreach ($errors->all() as $error)
19+
<li>{{ $error }}</li>
20+
@endforeach
21+
</ul>
22+
</div>
23+
@endif
24+
<form action="{{ route('form.submit') }}" method="POST">
25+
<div class="form-group">
26+
<label>标题</label>
27+
<input type="text" name="title" class="form-control" placeholder="输入标题" value="{{ old('title') }}">
28+
</div>
29+
<div class="form-group">
30+
<label>URL</label>
31+
<input type="text" name="url" class="form-control" placeholder="输入URL" value="{{ old('url') }}">
32+
</div>
1633
<fileupload-component></fileupload-component>
1734
<button type="submit" class="btn btn-primary">提交</button>
1835
</form>

routes/web.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,11 +126,17 @@
126126
})->name('task.delete');
127127

128128
Route::get('form', 'RequestController@formPage');
129+
Route::post('form', 'RequestController@form')->name('form.submit');
129130
Route::post('form/file_upload', 'RequestController@fileUpload');
130131

131-
Route::get('users', 'UserController@getIndex');
132+
Route::get('/reflection', function () {
133+
$reflection = new ReflectionClass(\App\Services\StripeBiller::class);
134+
dump($reflection->getMethods()); # 获取 StripeBiller 类中的所有方法
135+
dump($reflection->getNamespaceName()); # 获取 StripeBiller 的命名空间
136+
dump($reflection->getProperties()); # 获取 StripeBiller 上的所有属性
137+
});
132138

133-
Route::post('form/{id}', 'RequestController@form');
139+
Route::get('users', 'UserController@getIndex');
134140

135141
Route::fallback(function () {
136142
return '我是最后的屏障';

0 commit comments

Comments
 (0)