Как решить эту ошибку: explode () ожидает, что параметр 2 будет строкой, объект задан? - PullRequest
1 голос
/ 01 октября 2019

Я пытаюсь настроить различные типы пользователей и их соответствующие разрешения в моем 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 Ответ

1 голос
/ 01 октября 2019

Ничего не зная об инерции, похоже, вы неправильно используете функцию 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)[],
    ];
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...