web-dev-qa-db-fra.com

Appel de la méthode non définie Illuminate\Foundation\Application :: bindShared ()

Je viens de mettre à jour Laravel de 5.0 à 5.1.

Je reçois cette erreur:

Call to undefined method Illuminate\Foundation\Application::bindShared()

Donc, après quelques recherches, je dois changer bindShared en singleton.

Je peux le faire dans vendeur/illuminate/html/HtmlServiceProvider.php

Le problème est de savoir ce qui se passe lorsqu'un autre développeur travaille sur le projet et effectue une installation par le composeur ou se déploie sur un serveur.

Comment puis-je conserver les modifications apportées aux fichiers du dossier du fournisseur?

13
panthro

Ok, sur la base de votre commentaire, je vois votre problème (j'aurais dû le remarquer plus tôt, car vous mentionnez le composant HTML dans votre question.

Le composant illuminate/html ne fait plus partie de Laravel proprement dit et n'a pas encore été mis à jour pour se conformer aux normes 5.1. En fait, je suis à peu près sûr qu'il est maintenant officiellement abandonné par Taylor.

Cependant, vous pouvez remplacer l'exigence illuminate/html par laravelcollective/html - qui constitue la prise de contrôle officielle de illuminate/html par la communauté et devrait constituer un remplacement immédiat.

Pas besoin de jouer avec des choses dans vendor!

24
alexrussell

Illuminate/html est abandonné. Utilisez Collective/html à la place.

Pour l’installer, utilisez ce qui suit 

composer require "laravelcollective/html":"^5.2.0"

Puis, dans le fichier app/app.php, changez/ajoutez comme suit 
pour les fournisseurs 

Collective\Html\HtmlServiceProvider::class

et pour les alias 

'Form' => Collective\Html\FormFacade::class,
'Html' => Collective\Html\HtmlFacade::class,
7

Ce problème est dû à la méthode bindShared (), remplacez-le simplement par singleton ()

le fichier se trouve ici: /projectname/vendor/illuminate/html/HtmlServiceProvider.php

changement sur la ligne no: 36 et 49

1
Jayant Pandey

Je suis développeur Rails et nouveau sur laravel & c'est juste mon premier jour et je me suis retrouvé coincé dans ce problème Form Builder. J'ai traversé de nombreuses discussions et publications, mais ma solution est sur https://laravelcollective.com/docs/5.0/html Pour utiliser le générateur de formulaire de lame (Form :: open), nous avons besoin pour changer notre composer.json et ajouter "laravelcollective/html": "~5.0" dans le bloc require . Puis lancez composer update car seules les nouvelles dépendances seront disponibles pour votre projet . Ajoutez maintenant 'Collective\Html\HtmlServiceProvider ', dans le bloc config/app.php des fournisseurs, vous devez également ajouter 

'aliases' => [
    // ...
      'Form' => 'Collective\Html\FormFacade',
      'Html' => 'Collective\Html\HtmlFacade',
    // ...
  ],

dans config/app.php dans le bloc d’alias.

lancez php artisan serve Profitez du constructeur de formulaire avec le moteur lame.

1
Amit

Les fonctions Laravel suivantes sont obsolètes et seront supprimé entièrement avec la sortie de Laravel 5.2 en décembre 2015: ...

La méthode bindShared du conteneur de service est déconseillée de la méthode singleton. ... 

ref: https://laravel.com/docs/5.1/upgrade


Ainsi, par exemple, à partir de L5.1, vous pouvez modifier en toute sécurité:

    $this->app->bindShared(UserObserver::class, function ()
    {
        // ... 
    });

à:

    $this->app->singleton(UserObserver::class, function ()
    {
        // ... 
    });
1
Igor Parra