Appearance
day2
$_SERVER
$_ENV
php
public function store2(Request $request){
$validator = Validator::make($request->all(), [
'title'=>"required|max:20",
'author'=>['required','min:2', 'max:20'],
'age'=>"numeric",
'body'=>"required"
], [
'title.required'=>'请填写标题',
'title.max'=>'标题最大不超过20个字符',
'author.required'=>'请填写作者',
'author.min'=>'作者最少填写2个字符',
'author.max'=>'作者最大不超过20个字符',
'age.numeric'=>'年龄必须是数字',
'body.required'=>'内容必填'
]);
if($validator->fails()){
return redirect('validate/create')
->withErrors($validator)
->withInput();
}
}全局使用中间件
上面说过的内容,都是在某一个特定的情况下使用中间件,比如说指定的路由,或者是指定的控制器。Laravel 也为我们准备了全局中间件定义的地方,全局的意思就很明显了,所有的请求都会加上这个中间件。
php
// App\Http\Kernel.php
protected $middleware = [
// \App\Http\Middleware\TrustHosts::class,
\App\Http\Middleware\TrustProxies::class,
\Fruitcake\Cors\HandleCors::class,
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\MiddlewareTest::class,
];我们只需要找到 App\Http\Kernel.php 文件,在其中的 middleware 变量中添加最后一行,也就是我们自定义的那个中间件就可以了。这样,所有的请求都会走这个中间件。Kernel.php 是一个核心文件,我们继续看它,会发现下面还有两个变量,一个是 middlewareGroups ,一个是 routeMiddleware 。其实从名字就可以看出,middlewareGroups 是为中间件分组的,里面默认定义了两个中间件组,分别是 web 和 api 。其实他们对应的就是路由文件夹下的 api.php 和 web.php 所要加载的中间件。在源代码中,我们可以找到 app/Providers/RouteServiceProvider.php 这个文件,查看里面的 boot() 方法。
scss
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
});
}在这个 boot() 方法中,就可以看到,它定义了两个路由,加载的分别是 routes 目录下对应的两个文件,然后使用 middleware() 指定的中间件其实就是我们在中间件组中定义的那两个中间件组。既然是组的概念,那么在组中的所有中间件都会在这两个路由文件中被执行。大家可以尝试注释掉 web 分组下面的 \App\Http\Middleware\VerifyCsrfToken::class 这个中间件,就会发现 web.php 下的所有请求都不需要进行 CSRF 验证了。
另外一个 routeMiddleware 的意思其实是给中间件起个别名,比如我们在这个变量中增加一个:
ruby
'middlewaretest' => \App\Http\Middleware\MiddlewareTest::class,然后在路由中,直接在 middleware() 方法中使用这个定义的名称就可以了。
css
Route::get('middleware/test', 'App\Http\Controllers\MiddlewareTestController@test')->middleware('middlewaretest');PDO
Route::get('rawdb/test/insert', function () {
$data = [
'Peter' => 1,
'Tom' => 1,
'Susan' => 2,
'Mary' => 2,
'Jim' => 1,
];
foreach ($data as $k => $v) {
\Illuminate\Support\Facades\DB::insert('insert into raw_test (name, sex) values (?, ?)', [$k, $v]);
$insertId = DB::getPdo()->lastInsertId();
echo $insertId, '<br/>';
}
});\Illuminate\Support\Facades\DB::update('update raw_test set name=:name,sex =:sex where id = :id', $data);在config/database.php修改添加laravel8
DB::connection('laravel8')4.2 查询构造器
https://www.zyblog.com.cn/article/207
调试
如果想知道最后执行的 SQL 语句是什么,直接使用一个 toSql() 方法就可以了。
sql
echo \Illuminate\Support\Facades\DB::table('db_test')
->select(['*'])
->where($where)
->orderBy('id', 'desc')
->limit(10)
->offset(0)
->toSql();
// select * from `db_test` where (`name` like ?) order by `id` desc limit 10 offset 0另外还有就是我们在 SQL 语句中只看得到原始语句,也就是 name 这个 where 条件是使用 ? 号占位符的,参数是没法通过 toSql() 看到的。但是我们还是很想知道我们的参数是什么呀,从而方便我们的调试,这可怎么办呢。不用担心,还有好东西呢。
rust
\Illuminate\Support\Facades\DB::table('db_test')
->select(['*'])
->where($where)
->orderBy('id', 'desc')
->limit(10)
->offset(0)
->dd();
// "select * from `db_test` where (`name` like ?) order by `id` desc limit 10 offset 0"
// array:1 [▼
// 0 => "%m%"
// ]dd() 这个方法会输出两行信息,一行是 SQL 语句,一行就是条件参数数组,是不是非常方便。不过它会中断程序的运行,我们还有另一个方法 dump() ,输出的内容是和这个 dd() 方法完全相同的,但它不会中断程序的运行。
有这三大神器,相信你对 查询构造器 的调试就能够得心应手了吧!
【Laravel系列1】进入 Laravel 的世界
https://www.zyblog.com.cn/article/776
【Laravel系列2.1】先把Laravel跑起来
https://www.zyblog.com.cn/article/775
【Laravel系列2.2】Laravel 目录结构与配置
https://www.zyblog.com.cn/article/774
【Laravel系列2.3】Laravel运行命令行脚本
https://www.zyblog.com.cn/article/201
【Laravel系列3.1】一个请求的前世今生
https://www.zyblog.com.cn/article/202
【Laravel系列3.2】路由:指哪儿打哪儿
https://www.zyblog.com.cn/article/203
【Laravel系列3.3】控制器与表单验证
https://www.zyblog.com.cn/article/204
【Laravel系列3.4】中间件在路由与控制器中的应用
https://www.zyblog.com.cn/article/205
【Laravel系列4.1】连接数据库与原生查询
https://www.zyblog.com.cn/article/206
【Laravel系列4.2】查询构造器
https://www.zyblog.com.cn/article/207
【Laravel系列4.3】模型Eloquent ORM的使用(一)
https://www.zyblog.com.cn/article/208
Route::get('model/test/insert', function () {
$data = [
[
'name'=>'Peter',
'sex' => 1,
],
[
'name'=>'Tom',
'sex' => 1,
],
[
'name'=>'Susan',
'sex' => 2,
],
[
'name'=>'Mary',
'sex' => 2,
],
[
'name'=>'Jim',
'sex' => 1,
],
];
foreach ($data as $v) {
$model = new \App\Models\MTest();
$model->name = $v['name'];
$model->sex = $v['sex'];
$model->insertGetId();
$insertId = $model->id;
// $insertId = \App\Models\MTest::insertGetId($v);
echo $insertId, '<br/>';
}
});【Laravel系列4.4】模型Eloquent ORM的使用(二)
https://www.zyblog.com.cn/article/209
【Laravel系列4.5】主从库配置和语法生成
https://www.zyblog.com.cn/article/210
【Laravel系列4.6】事务以及PDO属性设置
https://www.zyblog.com.cn/article/211
Route::get('db/tran/insert', function(){
\Illuminate\Support\Facades\DB::beginTransaction();
try {
\Illuminate\Support\Facades\DB::table('db_test')->insert(['name' => 'Lily', 'sex' => 2]);
\Illuminate\Support\Facades\DB::table('db_test_no')->insert(['name' => 'Lily', 'sex' => 2]);
\Illuminate\Support\Facades\DB::commit();
}catch(Exception $e){
\Illuminate\Support\Facades\DB::rollBack();
dd($e->getMessage());
}
});【Laravel系列4.7】连接redis以及缓存应用
https://www.zyblog.com.cn/article/212
【Laravel系列5.1】Blade模板开发
https://www.zyblog.com.cn/article/213
【Laravel系列6.1】服务容器简介
https://www.zyblog.com.cn/article/214
【Laravel系列6.2】Laravel中的服务容器
https://www.zyblog.com.cn/article/215
【Laravel系列6.3】框架启动与服务容器源码
https://www.zyblog.com.cn/article/216
【Laravel系列6.4】管道过滤器
https://www.zyblog.com.cn/article/217
【Laravel系列6.5】门面模式
https://www.zyblog.com.cn/article/218
【Laravel系列7.1】日志处理
https://www.zyblog.com.cn/article/772
【Laravel系列7.2】错误与异常处理
https://www.zyblog.com.cn/article/219
【Laravel系列7.3】Session与响应
https://www.zyblog.com.cn/article/220
【Laravel系列7.4】安全相关
https://www.zyblog.com.cn/article/221
【Laravel系列7.5】事件系统
https://www.zyblog.com.cn/article/222
【Laravel系列7.6】任务调度
https://www.zyblog.com.cn/article/223
【Laravel系列7.7】队列系统
https://www.zyblog.com.cn/article/224
【Laravel系列7.8】广播系统
https://www.zyblog.com.cn/article/225
【Laravel系列7.9】测试
https://www.zyblog.com.cn/article/226
【Laravel系列8】走出 Laravel 的世界
