34
votes

L'application Laravel a cessé de fonctionner après la mise à niveau vers PHP 8

Après avoir mis à jour mon Mac vers l'application Laravel PHP 8 qui a cessé de fonctionner, c'est l'erreur que j'obtiens:

Deprecated: Method ReflectionParameter::getClass() is deprecated in /Users/.../Sites/.../vendor/laravel/framework/src/Illuminate/Container/Container.php on line 871

Deprecated: Method ReflectionParameter::getClass() is deprecated in /Users/.../Sites/.../vendor/laravel/framework/src/Illuminate/Container/Container.php on line 945

Deprecated: Method ReflectionParameter::getClass() is deprecated in /Users/.../Sites/.../vendor/laravel/framework/src/Illuminate/Container/Container.php on line 871

Deprecated: Method ReflectionParameter::getClass() is deprecated in /Users/.../Sites/.../vendor/laravel/framework/src/Illuminate/Container/Container.php on line 945

J'ai essayé de résoudre le problème en étudiant le code sans chance


0 commentaires

3 Réponses :


41
votes

La solution

comme expliqué ici a > La dernière version de Laravel 6, 7 et 8 a apporté des modifications requises pour PHP 8. Tout ce que vous avez à faire est:

1- Ajouter PHP 8 à votre composer.json ( J'ai gardé V7.4 au cas où le serveur de production ne prend pas encore en charge PHP 8)

ReflectionParameter::getClass()
ReflectionParameter::isArray()
ReflectionParameter::isCallable()

2- Pour exécuter la mise à jour du compositeur pour mettre à jour votre Laravel à la dernière version

PHP to php:^8.0
Faker to fakerphp/faker:^1.9.1
PHPUnit to phpunit/phpunit:^9.3

3- Assurez-vous de mettre à jour les bibliothèques suivantes car elles existent dans toutes les applications Laravel

composer update

4- Vérifiez toute autre bibliothèque qui doit être mise à jour, contribuez-vous s'ils n'ont pas pris en charge PHP 8. Mais vous devriez être bon pour la plupart des bibliothèques car ils ont des contributeurs actifs.

Expliquer le problème

comme décrit ici a >

PHP 8 introduit plusieurs améliorations des systèmes de type PHP tels que l'introduction de types d'union, de type mixte et quelques autres.

avec ces changements, certaines méthodes de réflexion API Le paramètre de réflexion donne des résultats incorrects.

Dans PHP 8, les méthodes suivantes de la classe de réflexion paramètre sont déprécié:

"php": "^7.4|^8.0",


5 commentaires

J'ai mis à jour mon fichier composer.json, mais lorsque j'exécute la commande de mise à jour du compositeur, je reçois toujours l'erreur "déconseillée", il semble donc qu'un Catch-22 car le compositeur exécute la commande "artisan claire compilé" au début et c'est Déjà causant les erreurs! Des idées? Je ne sais pas non plus ce que signifie votre étape 3, dois-je aller dans les bibliothèques et vérifier leurs fichiers composer.json?


Je l'ai fait fonctionner en supprimant temporairement le "" pré-update-cmd "du compositeur JSON. J'ai également dû mettre à niveau Laravel / Socialite en" ^ 5.1 ". Quoi qu'il en soit, merci pour votre aide ci-dessus!


@matthiku Je ne pense pas que faire ce que vous avez fait est bien (supprimer pré-update-cmd) mon étape 3 est de mettre à jour ces dépendances dans votre fichier composer.yml


Après avoir exécuté la mise à jour du compositeur , j'ai obtenu un message d'erreur tué . J'ai dû mettre à niveau le compositeur vers la version 2 pour le faire fonctionner.


Faker 1.9.1 lance une erreur dans mon cas. Au lieu de cela, j'ai gardé "fzaninotto / faker": "~ 1.4" et cela fonctionne bien.



0
votes

J'ai eu un problème similaire. Mais j'avais déjà exécuté Brew Update et Brew Cleanup avant de remarquer le problème. Ce que j'ai fait:

  • J'ai remarqué cette erreur de Brew Cleanup :
  • brew link --overwrite composer
    composer upgrade
    composer update
    
    1. J'ai dirigé les commandes:
    2. Error: The `brew link` step did not complete successfully
      The formula built, but is not symlinked into /usr/local
      Could not symlink bin/node
      Target /usr/local/bin/node
      already exists. You may want to remove it:
        rm '/usr/local/bin/node'
      
      To force the link and overwrite all conflicting files:
        brew link --overwrite heroku-node
      

      C'est ce qui a fonctionné pour moi


    0 commentaires

    2
    votes

    Vérifiez votre version PHP dans votre machine virtuelle (XAMPP ou serveur).

    php --version
    

    Est-ce que cette version est Php 8? Ai-je raison? C'est la cause du problème:

    php 8 introduit plusieurs améliorations dans les systèmes de type PHP tels que l'introduction de types d'union, de type mixte et quelques autres.

    avec ces changements, Certaines méthodes de réflexion de réflexion sur le paramètre de l'API donnent des résultats incorrects.

    Dans PHP 8, les méthodes suivantes de la classe PARAMETR de réflexion sont obsolètes:

    • RéflexionParameter :: getClass ()
    • RéflexionParameter :: isArray ()
    • RéflexionParameter :: isCallable ()
    • ReflectionParamter :: getType ()

    Détrracez votre version PHP en 7.4 et votre application Laravel fonctionne comme un charme!


    1 commentaires

    Cela a fonctionné pour Med