Laravel$request->has('name')不起作用



我最近开始使用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";
    }

}

我有很多,也许时间太多,看我的代码,而没有看到错误。

读取 laravel contents contents of Docs,以适当使用HTTP请求。

确定是否存在输入值

您应该使用有方法来确定请求中是否存在值。如果该值在请求中存在:

if ($request->has('name')) {
    //
}

如果您想确定请求上是否存在一个值并且不是空的,则可以使用填充方法:

if ($request->filled('name')) {
    //
}

您应该能够测试请求对象的nombre属性是否是虚假的值(即不存在,是空的,或null(

if($request->nombre) {
    //do something
} else {
    //do something else
}

如果您不使用 SanitizeMiddleware laravel将将输入名称保留为请求中的属性,则以空字符串(""),因此->has("name")方法将始终返回true

在控制台上执行以下操作:

php artisan make:middleware SanitizeMiddleware

然后填充新的中间件

   <?php
namespace AppHttpMiddleware;
use Closure;
class SanitizeMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  IlluminateHttpRequest  $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);
    }
}

并在Kernel,Web中间件组或YO想要使用的任何地方注册:

    /**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        AppHttpMiddlewareEncryptCookies::class,
        IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
        IlluminateSessionMiddlewareStartSession::class,
        IlluminateViewMiddlewareShareErrorsFromSession::class,
        AppHttpMiddlewareVerifyCsrfToken::class,
        IlluminateRoutingMiddlewareSubstituteBindings::class,
        SanitizeMiddleware::class,
    ],
    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];

这将从传入请求中删除空输入,因此->has("")现在应该使用。

最新更新