Передача массива в функцию, которая принимает различные аргументы - PullRequest
0 голосов
/ 05 октября 2019

У меня есть две функции:

public function handle($request, Closure $next, ...$roles)

и

public function hasAnyRole(...$roles){

Я вызываю первую функцию, чтобы проверить, есть ли у пользователя необходимые разрешения:

$this->middleware('roles:request,delete');

Переменная $ role создана правильно и имеет массив, состоящий из значений запроса и удаления. В следующем шаге я вызываю функцию hasAnyRole, где я снова могу передавать различные аргументы, но когда я вызываю ее с уже созданным массивом, она интерпретируется как значение:

$request->user()->hasAnyRole($roles) || !$roles)

Я также пробовал с имплозойкоманда, но я все еще получаю один массив только с одним значением:

array:1 [▼
  0 => "request,delete"
]

Кто-нибудь знает, как я могу преобразовать массив, чтобы он вызывался так:

hasAnyRole("delete", "request")

Спасибо Стефан

Ответы [ 2 ]

0 голосов
/ 05 октября 2019

вы можете конвертировать $ role в массив, используя

$roles="request,delete";

$roles_array=explode(',',$roles);

, затем для передачи в качестве отдельных аргументов вы можете сделать это следующим образом

hasAnyRole(...$new_roles); //hasAnyRole('request','delete',and more);
0 голосов
/ 05 октября 2019

Вы передаете массив в hasAnyRole(), который принимает массив в качестве параметра, что означает, что вы можете передать список значений массива. Предполагая, что ваша функция похожа на это

 hasAnyRole($roles){
    ....
 }

Но вы пытаетесь сделать handAnyRole($role1, $role2, ...), что невозможно. Вам нужно будет сделать что-то вроде этого

hasAnyRole($roles){
    foreach($roles as $role){
       if(doCheck($role)){
         ...
       } 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...