laravel 中的三元条件

ternary condition in laravel

我必须实现记住我的功能,所以我必须将 $remember 的值作为第二个参数传递给 Auth:attempt(); 函数。但问题是当我使用此语法在 $remember 中设置值时,它显示语法错误

$remember = isset($request->input('remember')) ? true : false;
----------------------------------------------^//Expected: variable

但是当我使用这个语法时,它不会报错

$remember = isset($request->remember) ? true : false;

使用has():

$request->has('remember')

You should use the has method to determine if a value is present on the request. The has method returns true if the value is present and is not an empty string.

has 是这样使用的:

$remember = $request->has('remember'); //return true if the remember is selected :)

关于你的问题,以上两种语法有什么区别:

这是因为 isset 是一种语言结构,而不是真正的函数。 docs:

中提到

Warning

isset() only works with variables as passing anything else will result in a parse error. For checking if constants are set use the defined() function.

试试这个

$r = $request->input('remember');
$remember = isset($r)?true:false;

请求class已经有一个内置方法来检查是否设置了参数:

if ($request->has('remember')) {
    // remember is set
} else {
    // remember is not set
}

但是有更好的方法来实现您想要实现的目标。请求 class 也有一个方法 get,它接受键作为第一个参数,默认值作为第二个参数(在键未设置的情况下返回)

所以你可以这样写:

Auth::attempt([...], $request->get('remember', false));