扫码关注官方订阅号
有大量的表单是文本,因为要手写,字段是int 默认null,可以不填。
插入的时候不填就会传入'' 报错,因为有大量的这种字段,在哪里处理比较好?
人生最曼妙的风景,竟是内心的淡定与从容!
你是想省劲点的话,直接重载下model的save函数呗
在里面把所有的attributes遍历一遍,把空字符串的值都unset掉,然后再调用父类的save函数
int类型默认最好是0
使用Laravel集合的 map 方法。该方法适用于单个表单。
map
使用中间件。该方法适用于有多个表单
可以使用集合的map方法进行过滤,然后使用得到的 $params 进行操作。
$params
public function post(Request $request) { // 过滤空值,并且trim $params = collect($request)->map(function ($item) { if (is_string($item)) { $item = empty(trim($item)) ? null : trim($item); } return $item; }); // 现在表单的内容在 $params 中了,并且去掉了空值 }
关于里面函数的具体意义请参考官方文档。
首先推荐看一下官方文档。 其实也是使用了上面的代码进行过滤,不过这是在中间件中进行的,只要在需要进行过滤的路由中使用这个中间件即可做到,这样无需再每一个Controller中写一遍了。
先用 php artisan make:middleware RejectEmptyValues 命令创建一个中间件。 此命令将会在 app/Http/Middleware 目录内设定一个名称为 RejectEmptyValues 的类。
php artisan make:middleware RejectEmptyValues
app/Http/Middleware
RejectEmptyValues
修改 RejectEmptyValues 的代码
<?php namespace App\Http\Middleware; use Closure; class RejectEmptyValues { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { // 过滤空值,并且trim $params = collect($request)->map(function ($item) { if (is_string($item)) { $item = empty(trim($item)) ? null : trim($item); } return $item; }); $request->replace($params->all()); return $next($request); } }
注册中间件,在 app/Http/Kernel.php 文件的 $routeMiddleware 中加入一行
app/Http/Kernel.php
$routeMiddleware
'reject_empty_values' => \App\Http\Middleware\RejectEmptyValues::class,
使用中间件示例,
Route::post('/test','TestController@post')->middleware('reject_empty_values');
在需要录入的文本赋值给对象字段是用三元运算符可以不例如我的做法是$goods->is_sales = ($request->input('is_sales')=='是')?1:0;
$goods->is_sales = ($request->input('is_sales')=='是')?1:0;
1.首先你可以在request 验证一下,把空的过滤2.第二就是在mysql设计数据库的时候最好设置为NOT NULL ,或者给一个默认值,这样最好
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
你是想省劲点的话,直接重载下model的save函数呗
在里面把所有的attributes遍历一遍,把空字符串的值都unset掉,然后再调用父类的save函数
int类型默认最好是0
有两种方法供你选择:
使用Laravel集合的
map方法。该方法适用于单个表单。使用中间件。该方法适用于有多个表单
单个表单
可以使用集合的map方法进行过滤,然后使用得到的
$params进行操作。关于里面函数的具体意义请参考官方文档。
多个表单
首先推荐看一下官方文档。
其实也是使用了上面的代码进行过滤,不过这是在中间件中进行的,只要在需要进行过滤的路由中使用这个中间件即可做到,这样无需再每一个Controller中写一遍了。
先用
php artisan make:middleware RejectEmptyValues命令创建一个中间件。此命令将会在
app/Http/Middleware目录内设定一个名称为RejectEmptyValues的类。修改
RejectEmptyValues的代码注册中间件,在
app/Http/Kernel.php文件的$routeMiddleware中加入一行使用中间件示例,
在需要录入的文本赋值给对象字段是用三元运算符可以不例如我的做法是
$goods->is_sales = ($request->input('is_sales')=='是')?1:0;1.首先你可以在request 验证一下,把空的过滤
2.第二就是在mysql设计数据库的时候最好设置为NOT NULL ,或者给一个默认值,这样最好