Как решить эту ошибку: explode() ожидает, что параметр 2 будет строкой, заданным объектом?
Я пытаюсь настроить разные типы пользователей и их соответствующие разрешения в своем AppServiceProvider.php
в моем проекте, и я получаю сообщение об ошибке explode() expects parameter 2 to be string, object given
Нигде в моем коде нет explode()
по крайней мере, это я вижу. Перед добавлениемInertia::share(function(){})
такой ошибки не было.
Это мой код:
public function register()
{
Inertia::version(function () {
return md5_file(public_path('mix-manifest.json'));
});
Inertia::share(function () {
$auth = null;
if (Auth::user()) {
$perms = [];
$user = Auth::user();
if ($user->isSuperAdmin() || $user->isAdmin()) {
$perms = [
[
'url' => '/',
'icon' => 'fa fa-home',
'name' => 'Dashboard'
],
[
//rest of permissions
],
];
}
if ($user->isUser()) {
$perms = [
[
'url' => '/',
'icon' => 'fa fa-home',
'name' => 'Dashboard'
],
[
//rest of permissions
],
];
}
$auth = [
'id' => Auth::user()->id,
'name' => Auth::user()->name,
'card' => Auth::user()->card,
'scard' => Auth::user()->scard,
'user_type_id' => Auth::user()->user_type_id,
'email' => Auth::user()->email,
'perms' => $perms
];
}
return [
'app' => [
'name' => Config::get('app.name'),
],
'auth' => [
'user' => $auth,
],
'flash' => [
'success' => Session::get('success'),
],
'errors' => Session::get('errors') ? Session::get('errors')->getBag('default')->getMessages() : (object)[],
]
});
Что я делаю неправильно? Там, где я получаю сообщение об ошибке, не указывается, где именно находится ошибка, а именно, что это такое, он сигнализирует о последней строке кода, который я представил как место ошибки, но все, что есть, - это закрывающая скобка и скобки.
1 ответ
Ничего не зная об инерции, похоже, вы неправильно используете Inertia::share
функция. В их документах я вижу 3 примера. У первых двух параметр 1 является строкой (например,'auth.user'
или 'app.name'
), а последний имеет параметр 1, являющийся ассоциативным массивом, поэтому каждый элемент по-прежнему имеет уникальный строковый ключ.
В вашем коде вы передаете закрытие в качестве первого параметра. Я считаю, что вы можете исправить это, просто добавив имя в качестве первого параметра:
Inertia::share('auth.user', function () {
$auth = null;
if (Auth::user()) {
$perms = [];
$user = Auth::user();
if ($user->isSuperAdmin() || $user->isAdmin()) {
$perms = [
[
'url' => '/',
'icon' => 'fa fa-home',
'name' => 'Dashboard'
],
[
//rest of permissions
],
];
}
if ($user->isUser()) {
$perms = [
[
'url' => '/',
'icon' => 'fa fa-home',
'name' => 'Dashboard'
],
[
//rest of permissions
],
];
}
$auth = [
'id' => Auth::user()->id,
'name' => Auth::user()->name,
'card' => Auth::user()->card,
'scard' => Auth::user()->scard,
'user_type_id' => Auth::user()->user_type_id,
'email' => Auth::user()->email,
'perms' => $perms
];
}
return [
'app' => [
'name' => Config::get('app.name'),
],
'auth' => [
'user' => $auth,
],
'flash' => [
'success' => Session::get('success'),
],
'errors' => Session::get('errors') ? Session::get('errors')->getBag('default')->getMessages() : (object)[],
];
});