zubair malik
zubair malik

Reputation: 223

I want to get permission ids using laravel

i am trying to get permission all id which is checked by user but unfortunately i am not getting permission ids in proper array format please help me how can i do that ? please my format below thanks.

I want to get permissions ids like this.

{
    "_token": "Eo1ByYyiFyrzvTXqqlUUAszTk8AMa8CjC9xpRa0l",
    "name": "dfsdfsdf",
    "permission": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
}

result of request()->all()

{
    "_token": "Eo1ByYyiFyrzvTXqqlUUAszTk8AMa8CjC9xpRa0l",
    "name": "dfsdfsdf",
    "permission": {
        "1": "on",
        "2": "on",
        "3": "on",
        "4": "on",
        "5": "on",
        "6": "on",
        "7": "on",
        "8": "on",
        "9": "on", 
        "10": "on",
        "11": "on"
    }
}

html view

@foreach ($menus as $sub_menu)
    @if ($sub_menu->parent_id == $menu->id)
        <div class="portlet mb-0">
            <div class="portlet-heading bg-light-theme">
                <h4 class="portlet-title">
                    <div class="checkbox">
                        <input id="{{$sub_menu->name}}" name="permission[{{$sub_menu->id}}]"  type="checkbox" class="parent intermediate parent-{{$menu->id}} parentmenu-{{$sub_menu->id}}"
                               data-id="{{$menu->id}}" data-sub="{{$sub_menu->id}}" >
                        <label for="{{$sub_menu->name}}">
                            <span  class="text-black">{{$sub_menu->name}}</span>
                        </label>
                    </div>
                </h4>
                <div class="portlet-widgets">
                    <a data-toggle="collapse" data-parent="#accordion1" href="#UsersRoles" class="text-white">
                        <i class="ion-minus-round">
                        </i>
                    </a>
                </div>
                <div class="clearfix">
                </div>
            </div>
            <div id="UsersRoles" class="panel-collapse collapse show">
                <div class="portlet-body">
                    @foreach ($menus as $permission)
                        @if ($permission->parent_id == $sub_menu->id)
                            <div class="checkbox">
                                <input id="checkbox{{$permission->id}}" name="permission[{{$permission->id}}]"  type="checkbox" class="child parent-{{$menu->id}}"
                                       data-parent-id="{{$menu->id}}"  >
                                <label for="checkbox{{$permission->id}}">
                                    {{$permission->name}}
                                </label>
                            </div>
                        @endif
                    @endforeach
                </div>
            </div>
        </div>
    @endif
@endforeach

Upvotes: 0

Views: 292

Answers (2)

Stefano Amorelli
Stefano Amorelli

Reputation: 4854

array_walk can help us address the issue in an effective way:

$return = [];

array_walk($request->permission, function ($key, $value) use (&$return) {
   if ($key == 'on')
      array_push($return, $value);
});

//print_r($return);

$request->permission = $return;

Upvotes: 0

Emanuele
Emanuele

Reputation: 192

You must cycle the permission field, check if the value is "on" and add it to a new variable.

Assuming $r as request().

$veryPermissions = [];
    foreach( $r->permission as $permission => $state ) {
        if( $state == 'on' ) {
        $veryPermissions[] = $permission;
    }
}

Now $veryPermissions contains the ids of the permission checked.


NOTE - If you need only the ids of permissions without check if user checked or not, try to use array_keys() function.

Documentation : https://www.php.net/manual/en/function.array-keys.php

:)

Upvotes: 1

Related Questions