我正在使用laravel ACL。在每个角色中都有权限组。我使用复选框表示所有权限。当我提交表单时,它只会检查权限值。但我希望得到所有检查和未检查的价值。
当我点击“更新”按钮时,它只显示这些值
[
{
"read": "true",
"create": "true"
}
]
我希望得到这样的价值。
[
{
"read": "true",
"create": "true",
"delete": "false",
"update": "false"
}
]
我尝试使用JQuery,但我没有得到预期的结果。如果有任何其他方式请建议。
我的观点部分。
@foreach($role->permissions as $key=>$value)
<td><input type="checkbox" name="permisssions[{{$key}}]" class="role" value="true" {{ $value==1 ? 'checked' : '' }}></td>
@endforeach
我的控制器部分。
public function role_permissions_update(Request $request, $id)
{
return array($request->permisssions);
}
答案 0 :(得分:0)
您可以考虑在控制器之前的请求清理程序中进行操作,而不是在UI中执行此操作。像这样......
MyController.php
<?php
namespace App\Http\Controllers;
use App\Http\Requests\MyRequest;
class MyController{
public function myMethod(MyRequest $request){
//write code only for valid, sanitized requests.
}
}
MyRequest.php
namespace App\Http\Requests;
class MyRequest extends SanitizedRequest{
protected static $bools = ['check_box_a','check_box_b'];
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules(){
return [
//
];
}
}
SanitizedRequest.php(我猜可能是抽象的)
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class SanitizedRequest extends FormRequest{
/**
* @var bool
*/
private $clean = false;
/**
* @var array
*/
protected static $arrays = [];
/**
* @var array
*/
protected static $bools = [];
/**
* @var array
*/
protected static $nullables = [];
/**
* @var array
*/
protected static $removeables = [];
/**
* We will do ALL of our security from middleware.
*
* @return bool
*/
public function authorize(){
return true;
}
/**
* @return array
*/
public function all($keys = null){
return $this->sanitize(parent::all($keys));
}
/**
* @param array $inputs
*
* @return array
*/
protected function sanitize(Array $inputs){
if($this->clean){
return $inputs;
}
// Get the request after middlewares (ie: the way it should be).
$inputs = $this->request->all();
$inputs = self::fillStaticDefaults($inputs);
$inputs = self::numbers($inputs);
$inputs = self::arrays($inputs);
$inputs = self::bools($inputs);
$inputs = self::removeables($inputs);
if(method_exists($this, 'dynamicDefaults')){
$inputs = $this->dynamicDefaults($inputs);
}
if(method_exists($this, 'preProcessInputs')){
$inputs = $this->preProcessInputs($inputs);
}
$inputs = self::nullables($inputs);
$this->replace($inputs);
$this->clean = true;
return $inputs;
}
/**
* @param $inputs
*
* @return mixed
*/
private static function fillStaticDefaults($inputs){
if(empty(static::$defaults)){
return $inputs;
}
foreach(static::$defaults as $key => $val){
if(empty($inputs[$key])){
$inputs[$key] = $val;
}
}
return $inputs;
}
private static function numbers($inputs){
foreach($inputs as $k => $input){
if(is_numeric($input) and !is_infinite($inputs[$k]*1)){
$inputs[$k] *=1;
}
}
return $inputs;
}
/**
* @param array $inputs
*
* @return array
*/
private static function arrays(Array $inputs){
foreach(static::$arrays as $array){
if(empty($inputs[$array])
or !is_array($inputs[$array])
){
$inputs[$array] = [];
}
}
return $inputs;
}
/**
* @param array $inputs
*
* @return array
*/
private static function bools(Array $inputs){
foreach(static::$bools as $bool){
$inputs[$bool] = (!empty($inputs[$bool]) and $inputs[$bool] != '0' and strtolower($inputs[$bool]) != 'false' and $inputs[$bool] != 0) ? 1:0;
}
return $inputs;
}
/**
* @param array $inputs
*
* @return array
*/
private static function nullables(Array $inputs){
foreach($inputs as $k => $input){
if(is_array($input)){
$input = self::nullables($input);
$inputs[$k] = $input;
}
if(empty($input) and $input !== 0 and !(in_array($k, static::$bools) or in_array($k, static::$nullables))){
unset($inputs[$k]);
}
}
foreach(static::$nullables as $null){
$inputs[$null] = (!empty($inputs[$null])) ? $inputs[$null]:null;
}
return $inputs;
}
/**
* @param array $inputs
*
* @return array
*/
private function removeables(Array $inputs){
if(pos(static::$removeables) == '*'){
foreach($inputs as $k => $v){
if(!is_array($v)){
if(empty($v)){
unset($inputs[$k]);
}
}else{
$inputs[$k] = self::removeables($v);
}
}
return $inputs;
}
foreach(static::$removeables as $removeable){
if(empty($inputs[$removeable])){
unset($inputs[$removeable]);
}
}
return $inputs;
}
}
答案 1 :(得分:0)
如果唯一的问题是获取未选中复选框的值,则可以使用隐藏的输入,例如
<input type="hidden" name="permisssions[{{$key}}]" class="role" value="true" {{ $value==1 ? 'checked' : '' }}>
<input type="checkbox" name="permisssions[{{$key}}]" class="role" value="true" {{ $value==1 ? 'checked' : '' }}>
如果他们选中复选框,您将获得它的值,如果不是,您将获得隐藏输入的值