[英]Laravel $request->has('name') doesn't work
我最近开始使用laravel学习如何使用它。 当前,我正在处理表单,并查看Laravel提供的不同方法来简化我们的工作,但是我看不到以下代码为什么不起作用:
public function mensajes(Request $request) {
//return $request->all();
if ($request->has('nombre')){
return "Sí tiene nombre. Es ". $request->input('nombre') ." y su correo es ". $request->input('email');
} else {
return "No tiene nombre";
}
}
我尝试验证表单是否接收到输入的“名称”,但是无论是否接收到它,它都将其视为已存在且已被填充,但是,如果尝试正确执行此代码,它将被视为接受。
public function mensajes(Request $request) {
//return $request->all();
if ($request->input('nombre') != ''){
return "Sí tiene nombre. Es ". $request->input('nombre') ." y su correo es ". $request->input('email');
} else {
return "No tiene nombre";
}
}
我有很多,也许太多的时间在看我的代码,而没有看到错误。
您应该能够通过以下方法测试请求对象的nombre
属性是否为假值(即不存在,为空或为null
):
if($request->nombre) {
//do something
} else {
//do something else
}
如果您不使用SanitizeMiddleware
laravel会将输入名称作为请求中的属性保留为空字符串("")
因此->has("name")
方法将始终返回true
。
在控制台上执行以下操作:
php artisan make:middleware SanitizeMiddleware
然后填充新的中间件
<?php
namespace App\Http\Middleware;
use Closure;
class SanitizeMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
foreach ($request->input() as $key => $value) {
if (empty($value) || $value == "") {
if($value !== '0')
$request->request->remove($key);
}
}
return $next($request);
}
}
并将其注册在Web中间件组内的Kernel
或您想使用它的任何地方:
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
SanitizeMiddleware::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
这将从传入请求中删除空输入,因此->has("")
应该可以正常工作。
请认真阅读Laravel文档,以正确使用HTTP Requests 。
确定是否存在输入值
您应该使用has方法来确定请求中是否存在值。 如果请求中存在该值,则has方法将返回true:
if ($request->has('name')) {
//
}
如果要确定请求中是否存在一个值并且该值不为空,则可以使用filled方法:
if ($request->filled('name')) {
//
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.