PHP Ошибка индекса неопределенного массива после преобразования JSON - PullRequest
1 голос
/ 17 марта 2020

Я немного поигрался с PHP массивами и JSON, и когда я пытался "разработать" промежуточное ПО для контроля доступа пользователей к определенным страницам моей системы, появилась эта ошибка:

Неопределенный индекс: доступ

Это пример моего кода;

$arrKey = "company_id";
$id = 1;
$json = '{"access":[{"company_id":1,"role_id":3}, {"company_id":2,"role_id":4}]}';
$array = (array)json_decode($json, true);
/*
This is the array from the JSON
Array
(
    [access] => Array
        (
            [0] => Array
                (
                    [company_id] => 1
                    [role_id] => 3
                )

            [1] => Array
                (
                    [company_id] => 2
                    [role_id] => 4
                )

        )

)
*/
foreach ($array['access'] as $key => $val) {
   if ($val[$arrKey] == $id) {
       return $key;
   }
}

Я даже пытался обойти что-то подобное

$array = (array)json_decode($json, true);
$array = $array['access'};

Но та же ошибка появилась снова. Для получения дополнительной информации я использую Laravel 6, моя PHP версия - 7.3.9, и вот весь мой код:

<?php

namespace App\Http\Middleware;

use Request;
use Closure;
use App\Models\Role;
use Route;

class CheckRole
{
    public function getRoute()
    {
        if(is_numeric(Request::segment(1)))
            return Request::segment(2);
        return Request::segment(2);
    }

    public function getRoleId()
    {
        return Request::user()->id;
    }

    public function getRole()
    {
        /*
            Request::user()->companies return:
            {
                "access":[
                    {
                    "company_id":1,
                    "role_id":3
                    },
                    {
                    "company_id":2,
                    "role_id":4
                    }
                ]
            }
        */
        return $this->searchForId($this->getCompanyId(), Request::user()->companies, 'company_id');
    }

    public function getCompanyId()
    {
        return Request::segment(1);
    }

    public function searchForId($id, $json, $arrKey) {
        $array = (array)json_decode($json, true);
        foreach ($array['access'] as $key => $val) {
            if ($val[$arrKey] == $id) {
                return true;
            }
        }
        return false;
    }

    public function checkAccess()
    {
        if(is_numeric(Request::segment(1)))
        {
            return $this->searchForId($this->getRoleId(), $this->getRole(), "company_id");
        }
        return true;
    }
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(!$this->checkAccess())
        {    
            return redirect("/");
        }
        return $next($request);
    }
}

Код не завершен, после этой ошибки начал появляться, я остановил все, чтобы (попытаться) решить эту ошибку, и я почти заменяю "JSON" на "serialize", я протестировал его и работал просто отлично, но я думаю, что это не лучший вариант потому что, возможно, в будущем я собираюсь заново создать весь свой проект с Python / NodeJS API и ReactJS, чтобы использовать его, и JSON будет лучшим вариантом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...