2016-03-10 8 views
6

Sto integrando MongoDB con Laravel. Sto seguendo le informazioni trovate in questo link jenssegers/laravel-mongodb. Ho avuto successo nell'integrare MongoDB. Ma quando si esegue il codice getta questo erroreClasse 'MongoDB Driver Manager' non trovata

FatalErrorException in linea Client.php 56: Class 'MongoDB \ Driver \ Manager' non trovato

Ecco il codice

controllore app/Http/controller/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); 
    } 
} 

E qui segue la user.php che è di default fornito da laravel quando creiamo il progetto

<?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', 
    ]; 
} 

La prego di dirmi il motivo per cui mi appare questo errore.

Phpinfo -> la sezione mongodb sta arrivando. Qui è girato uno schermo phpinfo

+0

Ciò indica che l'estensione MongoDB non è stata caricata. Hai controllato l'output di 'phpinfo()' o 'php -i | grep mongo'? Hai riavviato il server web dopo l'installazione? – fisk

+0

@Fiskie sì e là posso vedere la sezione di mongo – garden

+0

@Fiskie Ho aggiunto lo screenshot – garden

risposta

13

Non so se è la soluzione più elegante, ma ha funzionato per me:

  1. Installare il driver php $ sudo pecl install mongodb
  2. Creare il file di estensione $ sudo nano /etc/php5/mods-available/mongodb.ini e scrivere dentro : extension = mongodb.so
  3. Creare un collegamento simbolico per il file $ sudo ln -sv /etc/php5/mods-available/mongodb.ini /etc/php5/apache2/conf.d/20-mongodb.ini
  4. Creare un altro simbolicamente Link C per questo file $ sudo ln -sv /etc/php5/mods-available/mongodb.ini /etc/php5/cli/conf.d/20-mongodb.ini
  5. Riavviare apache o server utilizzato $ sudo service apache2 restart

Potrebbe essere necessario reinstallare jenssegers/mongodb: $ composer require jenssegers/mongodb

+0

La mia piattaforma di lavoro è Windows. Puoi dire come posso farlo in Windows. – garden

+2

In questo [collegamento] (https://pecl.php.net/package/mongodb/1.1.3/windows) è possibile trovare il driver mongodb (php_mongodb.dll) per PHP su sistemi Windows. Scarica la versione corretta per PHP e il driver di sistema (x86 o x64). Copia questa DLL nella cartella dell'estensione, nel mio caso 'C: \ wamp64 \ bin \ php \ php5.6.16 \ ext' e aggiungi questa riga in php.ini: 'extension = php_mongodb.dll'. Riavvia il server Apache e riprova. Si noti che è necessario modificare il file php.ini in questo percorso ('C: \ wamp64 \ bin \ php \ php5.6.16', se usato Wamp) e non l'icona di Wamp nella barra delle applicazioni. – gras

+0

Ho ricevuto questo errore dopo aver eseguito tutti i passaggi che hai indicato (sto parlando dei passaggi che hai indicato nella sezione) – garden

4

Potrebbe anche essere necessario riavviare fpm su Ubuntu/Debian

sudo service php7.0-fpm restart 

per PHP5

sudo service php5-fpm restart 

Inoltre, assicurarsi extension=mongodb.so si trova in:

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

per controllare lo faccio:

locate php.ini | xargs grep mongo 

per vedere i file php.ini:

php --ini 
1

forse potrebbe aiutare.

Se si utilizza il nuovo server Wamp, assicurarsi che l'interprete PHP che il tuo ide sta usando se lo stesso uso da wamp e dove è installato il mongodb.dll.

Avevo lo stesso problema.

L'ho risolto quando ho installato mongodb.dll su php 5.6.25 e 7.0.10, perché il mio server di wamp ha le due versioni. Dopo l'installazione, ho fatto un aggiornamento del compositore. Adesso va bene.

2

A partire dal 2017 questo dovrebbe funzionare per 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 

Fa parte del mio programma di installazione one-liner di PHP5.6 + nginx + MongoDB plug-in per PHP, ho anche fatto un dominio per questo: http://ubuntu-script.tk

0

Suppongo che tu abbia php-mongodb installato correttamente, non importa quale sia il processo.

mi ha colpito questo errore quando la stringa di connessione mongo era vuota:

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

Assicurarsi che la stringa di connessione Mongo è popolato correttamente.

0

La risposta può essere trovata qui: Why MongoDB Class doesn't work in Laravel?

apokryfos ci dà la risposta nel primo commento:

Prova nuova \ MongoClient() al posto

Per tutti coloro che lottano per scarica l'estensione mongodb.so per PHP, fai attenzione, ci sono due driver mongo per PHP. Per il nuovo driver seguire le seguenti istruzioni: http://php.net/manual/en/mongodb.installation.manual.php

Assicurarsi che tutti i file php.ini contengono:

extension=mongodb.so 

Dalla radice del vostro progetto:

composer require mongodb/mongodb 

Nel file PHP:

NOTA IL BACKSLASH PRIMA di MongoDB

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

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

Ho lampp (XAMPP) installato il mio sistema, sto cercando di aggiungere l'estensione php "mongodb.so". Inoltre l'ho compilato con successo seguendo le istruzioni di (https://secure.php.net/manual/en/mongodb.installation.manual.php) anche dopo averlo aggiunto il mio phpinfo() non mostra alcuna cosa correlata a mongo (campo) e sto ancora ricevendo lo stesso errore, quindi cosa dovrei fare ?? –

+0

La riga critica è $ client = new \ MongoDB \ Client ("mongodb: //127.0.0.1: 27017"); ma questo è per Linux. Dovrai cercare come dovrebbe apparire quella linea in Windows. Se la sintassi è la stessa per Windows, PHP non trova il client MongoDB. – mcmacerson