2016-03-10 1 views
6

J'intègre MongoDB avec Laravel. Je suis l'information suivante trouvée dans ce lien jenssegers/laravel-mongodb. Je réussis à intégrer MongoDB. Mais quand je lance le code, il jette cette erreurClasse 'MongoDB Driver Manager' non trouvé

FatalErrorException en ligne Client.php 56: Class 'MongoDB \ Driver \ Manager' not found

Voici le code

contrôleur app/Http/contrôleur/NewController

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

use App\Http\Requests; 

use App\User; 

class NewController extends Controller 
{ 
    // 
    public function index(){ 
     $var = User::all(); 
     var_dump($var); 
    } 
} 

Et ici suit la user.php qui est par défaut fourni par Laravel lorsque nous créons le projet

<?php 

namespace App; 

use Illuminate\Foundation\Auth\User as Authenticatable; 
use Jenssegers\Mongodb\Eloquent\Model as Eloquent; 

class User extends Eloquent 
{ 
    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $collection = 'users_collection'; 
    protected $fillable = [ 
     'name', 'email', 'password', 
    ]; 

    /** 
    * The attributes excluded from the model's JSON form. 
    * 
    * @var array 
    */ 
    protected $hidden = [ 
     'password', 'remember_token', 
    ]; 
} 

S'il vous plaît me dire pourquoi je reçois cette erreur. Phpinfo -> La section mongodb arrive bientôt. Voici un écran tiré phpinfo

+0

Ceci indique que l'extension MongoDB n'a pas été chargée. Avez-vous vérifié la sortie de 'phpinfo()' ou 'php -i | grep mongo'? Avez-vous redémarré le serveur Web après l'installation? – fisk

+0

@Fiskie oui et là je peux voir la section mongo – garden

+0

@Fiskie J'ai ajouté la capture d 'écran – garden

Répondre

13

Je ne sais pas si c'est la solution la plus élégante, mais cela a fonctionné pour moi:

  1. Installez le pilote php $ sudo pecl install mongodb
  2. Créer le fichier d'extension $ sudo nano /etc/php5/mods-available/mongodb.ini et écrire à l'intérieur : extension = mongodb.so
  3. Créer un lien symbolique pour ce fichier $ sudo ln -sv /etc/php5/mods-available/mongodb.ini /etc/php5/apache2/conf.d/20-mongodb.ini
  4. Créer un autre symboli lien c pour ce fichier $ sudo ln -sv /etc/php5/mods-available/mongodb.ini /etc/php5/cli/conf.d/20-mongodb.ini
  5. Redémarrez apache ou le serveur utilisé $ sudo service apache2 restart

Il peut être nécessaire de réinstaller jenssegers/MongoDB: $ composer require jenssegers/mongodb

+0

Ma plate-forme de travail est windows. Pouvez-vous dire comment je peux le faire dans Windows. – garden

+2

Dans ce [link] (https://pecl.php.net/package/mongodb/1.1.3/windows) vous pouvez trouver le pilote mongodb (php_mongodb.dll) pour PHP sur les systèmes Windows. Téléchargez la version correcte pour PHP et le pilote système (x86 ou x64). Copiez cette DLL dans le dossier de l'extension, dans mon cas 'C: \ wamp64 \ bin \ php \ php5.6.16 \ ext' et ajoutez cette ligne dans php.ini: 'extension = php_mongodb.dll'. Redémarrez le serveur Apache et réessayez. Notez que vous devez éditer le fichier php.ini dans ce chemin ('C: \ wamp64 \ bin \ php \ php5.6.16', si utilisé Wamp) et pas l'icône Wamp dans la barre des tâches. – gras

+0

Je recevais cette erreur après avoir fait toutes les étapes que vous avez dites (je parle des étapes que vous avez indiquées dans la section) – garden

4

Vous devrez peut-être redémarrer FPM sur ubuntu/debian

sudo service php7.0-fpm restart 

pour php5

sudo service php5-fpm restart 

Aussi, assurez-vous extension=mongodb.so dans la section:

apache2/php.ini 
cli/php.ini 
fpm/php.ini 

pour vérifier que je fais:

locate php.ini | xargs grep mongo 

pour voir php.ini:

php --ini 
1

Peut-être que cela pourrait vous aider.

Si vous utilisez le nouveau serveur Wamp, assurez-vous que l'interpréteur php que votre ide utilise si la même utilisation par wamp et où vous avez installé le mongodb.dll.

J'avais le même problème.

Je l'ai résolu quand j'ai installé mongodb.dll à la fois sur php 5.6.25 et 7.0.10, parce que mon serveur wamp ont les deux versions. Après l'installation, j'ai fait une mise à jour du compositeur. Maintenant, ça va.

2

À partir de 2017 cela devrait fonctionner pour PHP 5.6:

### Install MongoDB driver for PHP 5.6 ############## 

echo -e "\n### Installing MongoDB PHP driver ##\n"; 
sudo apt-get install php-mongodb -y 

# Make sure extension=mongodb.so is present 

PhpConfigFile="/etc/php/5.6/fpm/php.ini" 
if grep -q mongodb.so "$PhpConfigFile"; then 
    echo "extension=mongodb.so already found, dont add." 
else 
    echo "extension=mongodb.so" | sudo tee "$PhpConfigFile" 
    echo "Added extension=mongodb.so to $PhpConfigFile" 
fi 

Il fait partie de mon programme d'installation d'un revêtement de PHP5.6 + nginx + plugin MongoDB pour PHP, je l'ai même fait un domaine pour cela: http://ubuntu-script.tk

0

Je vais supposer que vous avez installé php-mongodb correctement, peu importe le processus.

je frappe cette erreur lorsque la chaîne de connexion mongo était vide:

new MongoDB\Client('mongodb://'); 

Assurez-vous que votre chaîne de connexion mongo est rempli correctement.

0

La réponse se trouve ici: Why MongoDB Class doesn't work in Laravel?

apokryfos nous donne la réponse dans le premier commentaire:

Essayez le nouveau \ MongoClient() au lieu

Pour tous ceux qui luttent pour obtenir l'extension mongodb.so travaillant pour PHP, attention, il y a deux pilotes mongo pour PHP. Pour le nouveau pilote suivre les instructions suivantes: http://php.net/manual/en/mongodb.installation.manual.php

Assurez-vous que tous vos fichiers php.ini contiennent:

extension=mongodb.so 

De la racine de votre projet:

composer require mongodb/mongodb 

Dans votre fichier PHP:

NOTEZ LE BACKSLASH AVANT MongoDB

$client = new \MongoDB\Client("mongodb://127.0.0.1:27017"); 
$collection = $client->database->collection; 

$cursor = $collection->find(
    [ 
     'some.nice.name' => 'true' 
    ] 
); 
+0

J'ai lampp (XAMPP) installé mon système, j'essaye d'ajouter l'extension de php "mongodb.so". Aussi je l'ai construit avec succès en suivant les instructions de (https://secure.php.net/manual/fr/mongodb.installation.manual.php) même après l'avoir ajouté mon phpinfo() ne montre aucune chose liée à mongo (champ) et je reçois toujours la même erreur, alors que dois-je faire ?? –

+0

La ligne critique est $ client = new \ MongoDB \ Client ("mongodb: //127.0.0.1: 27017"); mais c'est pour Linux. Vous devrez rechercher comment cette ligne devrait apparaître dans Windows. Si la syntaxe est la même pour Windows, PHP ne trouve pas le client MongoDB. – mcmacerson