Laravel - Попытка получить доступ к смещению массива значения типа int

У меня проблема, когда я пытаюсь отправить почтовый запрос в базу данных. Интересно то, что ошибка возникает только тогда, когда я использую PHP версии 7.4.2. В PHP версии 7.3.9 все работает нормально. Я использую Laravel 6.17.

Когда Laravel исправит эту проблему?

Это моя трассировка стека, когда появляется ошибка.

Trying to access array offset on value of type int   
in CreateCourseController.php line 176
at HandleExceptions->handleError()
in CreateCourseController.php line 176
at CreateCourseController->createDates()
in CreateCourseController.php line 101
at CreateCourseController->createCourse()
at call_user_func_array()
in Controller.php line 54
at Controller->callAction()
in ControllerDispatcher.php line 45
at ControllerDispatcher->dispatch()
in Route.php line 219
at Route->runController()
in Route.php line 176
at Route->run()
in Router.php line 681
at Router->Illuminate\Routing\{closure}()
in Pipeline.php line 130
at Pipeline->Illuminate\Pipeline\{closure}()
in SubstituteBindings.php line 41
at SubstituteBindings->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in VerifyCsrfToken.php line 76
at VerifyCsrfToken->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in StartSession.php line 56
at StartSession->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in EncryptCookies.php line 66
at EncryptCookies->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in Pipeline.php line 105
at Pipeline->then()
in Router.php line 683
at Router->runRouteWithinStack()
in Router.php line 658
at Router->runRoute()
in Router.php line 624
at Router->dispatchToRoute()
in Router.php line 613
at Router->dispatch()
in Kernel.php line 170
at Kernel->Illuminate\Foundation\Http\{closure}()
in Pipeline.php line 130
at Pipeline->Illuminate\Pipeline\{closure}()
in TransformsRequest.php line 21
at TransformsRequest->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in TransformsRequest.php line 21
at TransformsRequest->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in ValidatePostSize.php line 27
at ValidatePostSize->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in CheckForMaintenanceMode.php line 63
at CheckForMaintenanceMode->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in TrustProxies.php line 57
at TrustProxies->handle()
in Pipeline.php line 171
at Pipeline->Illuminate\Pipeline\{closure}()
in Pipeline.php line 105
at Pipeline->then()
in Kernel.php line 145
at Kernel->sendRequestThroughRouter()
in Kernel.php line 110
at Kernel->handle()
in index.php line 55

С Уважением


person NKol    schedule 26.02.2020    source источник
comment
Отправьте запрос по почте, пожалуйста   -  person Islam Elshobokshy    schedule 26.02.2020


Ответы (5)


composer update работал в моем случае:

У меня было Laravel 5.6 приложение с Php 7.1.

Кроме того, мне пришлось изменить laracasts/generators в composer.json на ^1.0 с dev-master, чтобы начать работу composer update, например так:

"laracasts/generators": "^1.0"

Эта проблема началась с некоторых старых проектов, проблема возникает php artisan migrate сразу после composer install.

https://github.com/spatie/laravel-permission/issues/1370#issuecomment-676556816

person doncadavona    schedule 19.08.2020
comment
Также у меня работал composer update на Laravel 5.5.49, PHP 7.4.11. - person Matjaž Železnik; 26.10.2020

Подобная проблема уже указана в репозитории Laravel.

Согласно PHP-Doc это обратная несовместимость изменения в PHP 7.4

Доступ к не массивам в стиле массива

bool, int, float или resource как array (например, $null["key"]) теперь будут генерировать уведомление.

person Sehdev    schedule 26.02.2020
comment
Спасибо, по крайней мере, теперь я знаю причину. Но каков новый или лучший способ перебора массива? Мне нужно перебрать массив целых чисел. - person NKol; 26.02.2020
comment
@NickKoldehoff, ваш стек ошибок ясно показывает CreateCourseController.php line 176. Проверьте, что там написано - person Sehdev; 26.02.2020

Речь идет о версии PHP. В php 7.4rc доступ к массиву по ключу иногда вызывает ошибку. Редко эта ошибка возникает на php 7.2. Чтобы проверить, есть ли у массива член или нет, просто используйте функцию empty($array)

person ganji    schedule 17.05.2020

Если вы используете php 7.4, а используемый пакет развился до php ‹7.4, тогда отображается эта ошибка.

Измените свою версию php на старую (например, с php с 7,4 на 7,3).

Я использовал php 7.4 FPM, но фиксированная версия mPDF работала с php 7.3 и ниже. Я поймал эту ошибку после того, как изменил версию php на 7.3, и она сработала.

Я также использовал Homestead. Смотрите мою конфигурацию для php:

sites:
    - map: myapp.test
      to: /home/vagrant/code/myapp/public
      php: "7.3"

Запустите vagrant reload --provision в CLI. Эта команда применяет новую конфигурацию.

person Oleg Dmitrochenko    schedule 15.03.2021

Вероятно, вы пытаетесь получить доступ к типу, не являющемуся массивом (возможно, к типу объекта).

Я столкнулся с тем же самым, но разница в том, что один фрагмент обращается к объекту, а другой - к допустимому типу массива.

Приведенный ниже код вызывает ошибку Попытка получить доступ к смещению массива значения типа int

$mymodel = MyModel::where(array(
            'someid' => $somevar
        ))->get();
foreach($mymodel as $data){
     //etc
}

Я пробовал обновить его до:

$mymodel = MyModel::where(array(
            'someid' => $somevar
        ))->get()->toArray();
foreach($mymodel as $data){
     //etc
}

Но было бы очень полезно опубликовать свой код, чтобы мы могли его проверить.

person Charmie    schedule 15.07.2020