Laravel 5.1 form::radio,无法从变量中获取 "false" 但是当我输入 false 时它起作用了
Laravel 5.1 form::radio, cant get "false" from variable but when I type false it works
这是我的代码
<div class="form-group">
{!! Form::label('', '*Role') !!}
@foreach ($roles as $role)
<div class="radio">
{!! Form::radio( 'role', $role->id, $user->getRolesCheckedAtrribute($user, $role), ['id' => $role->slug]) !!}
{!! Form::label($role->slug, $role->name) !!}
{!! $user->getRolesCheckedAtrribute($user, $role) !!}
</div>
@endforeach
输出为:
<div class="form-group">
<label for="">*Role</label>
<div class="radio">
<input id="super-admin" checked="checked" name="role" value="1" type="radio">
<label for="super-admin">Super Admin</label>
false
</div>
<div class="radio">
<input id="admin" checked="checked" name="role" value="2" type="radio">
<label for="admin">Admin</label>
true
</div>
<div class="radio">
<input id="basic-user" checked="checked" name="role" value="3" type="radio">
<label for="basic-user">Basic User</label>
false
</div>
</div>
问题是我无法获得 $user->getRolesCheckedAtrribute() inside of Form::radio
的值,但在它之外它会正常回显。所以每个收音机都得到 checked="checked"
尽管只有第二个收音机有 true.
如果我将 Form::radio() 中的“$user->getRolesCheckedAtrribute($user, $role)”替换为 "false",那么 none 个按钮将被检查。
我正在使用 Laravel 5.1
并要求:
"kodeine/laravel-acl": "~1.0@dev",
"laravelcollective/html": "^5.1"
如果您需要更多详细信息,请询问。
更新:
public function getRolesCheckedAtrribute($user, $role) {
if (head($user->getRoles()) == $role->slug) {
$checked = 'true';
}
else {
$checked = 'false';
}
return $checked;
}
我的假设是正确的。
return 'true'
与 return true
不同。此外,return 'false'
实际上会评估为真,这就是检查所有内容的原因。
使用 return true
或 return false
应该可以解决您的问题。
如果因为其他地方使用此功能而无法执行此操作,您也可以执行...
`$user->getRolesCheckedAtrribute($user, $role) == 'true'`
因此,如果您的函数 returns 'true',它将 return 为真,否则,它将正确计算为假。
这可能是您需要将函数更改为...
public function getRolesCheckedAtrribute($user, $role) {
if (head($user->getRoles()) == $role->slug) {
$checked = true;
} else {
$checked = false;
}
return $checked;
}
这是我的代码
<div class="form-group">
{!! Form::label('', '*Role') !!}
@foreach ($roles as $role)
<div class="radio">
{!! Form::radio( 'role', $role->id, $user->getRolesCheckedAtrribute($user, $role), ['id' => $role->slug]) !!}
{!! Form::label($role->slug, $role->name) !!}
{!! $user->getRolesCheckedAtrribute($user, $role) !!}
</div>
@endforeach
输出为:
<div class="form-group">
<label for="">*Role</label>
<div class="radio">
<input id="super-admin" checked="checked" name="role" value="1" type="radio">
<label for="super-admin">Super Admin</label>
false
</div>
<div class="radio">
<input id="admin" checked="checked" name="role" value="2" type="radio">
<label for="admin">Admin</label>
true
</div>
<div class="radio">
<input id="basic-user" checked="checked" name="role" value="3" type="radio">
<label for="basic-user">Basic User</label>
false
</div>
</div>
问题是我无法获得 $user->getRolesCheckedAtrribute() inside of Form::radio
的值,但在它之外它会正常回显。所以每个收音机都得到 checked="checked"
尽管只有第二个收音机有 true.
如果我将 Form::radio() 中的“$user->getRolesCheckedAtrribute($user, $role)”替换为 "false",那么 none 个按钮将被检查。
我正在使用 Laravel 5.1
并要求:
"kodeine/laravel-acl": "~1.0@dev",
"laravelcollective/html": "^5.1"
如果您需要更多详细信息,请询问。
更新:
public function getRolesCheckedAtrribute($user, $role) {
if (head($user->getRoles()) == $role->slug) {
$checked = 'true';
}
else {
$checked = 'false';
}
return $checked;
}
我的假设是正确的。
return 'true'
与 return true
不同。此外,return 'false'
实际上会评估为真,这就是检查所有内容的原因。
使用 return true
或 return false
应该可以解决您的问题。
如果因为其他地方使用此功能而无法执行此操作,您也可以执行...
`$user->getRolesCheckedAtrribute($user, $role) == 'true'`
因此,如果您的函数 returns 'true',它将 return 为真,否则,它将正确计算为假。
这可能是您需要将函数更改为...
public function getRolesCheckedAtrribute($user, $role) {
if (head($user->getRoles()) == $role->slug) {
$checked = true;
} else {
$checked = false;
}
return $checked;
}