2017-03-10 3 views
0

Ich versuche, MongoDB mit Phalcon API Framework zu verbinden. Mein Code ist wie unten:MongoDB und Phalcon API

index.php

<?php 

if ($handle = opendir('include/models')) { 
    while (false !== ($entry = readdir($handle))) { 
     if (preg_match('/\.php$/', $entry)) { 
      require_once "include/models/$entry"; 
     } 
    } 
    closedir($handle);  
} 

require 'vendor/autoload.php'; 
use Phalcon\DI\FactoryDefault; 
use Phalcon\Mvc\Model; 

$app = new Phalcon\Mvc\Micro(); 
$di = new \Phalcon\DI\FactoryDefault(); 
$config = new Phalcon\Config\Adapter\Ini('include/config/config.ini'); 

// Simple database connection to localhost 
$di->set('mongo', function() { 
    $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017"); 
    return $manager->selectDb("MyApi"); 
},true); 

$di->set('collectionManager', function() { 
    return new Phalcon\Mvc\Collection\Manager(); 
}); 
$app->setDI($di); 


$directory = new User_detail(); 


$app->get('/userdetail/{code}', function ($code) use ($app,$directory) { 
    $directory->getUser($app,$code); 
    }); 

$app->notFound(function() use ($app) { 
    $app->response->setStatusCode(424, "Method Failed")->sendHeaders(); 
    echo json_encode(array('status' => 'ERROR', 'messages' => "Method Failed")); 
}); 
$app->handle(); 
?> 

Modelldatei User_detail.php

<?php 
use Phalcon\Mvc\Collection; 
use Phalcon\Mvc\Model; 
use MongoDB\Driver\Manager; 
use Phalcon\Mvc\Micro; 
use Phalcon\Db\Column; 

class User_detail extends Collection 
{ 

    public function initialize() 
    { 
     $this->setSource("User"); 
    } 

    function getUser($app,$code) 
    { 
      $robot = User_detail::findFirst(
       [ 
        [ 
         "Name" => "android", 
        ] 
       ] 
      ); 

      echo $robot->Name; die; 

    } 
} 
?> 

Ich erhalte Fehler als

Error: Call to undefined method MongoDB\Driver\Manager::selectDb() in index.php

Was falsch ist in es?

+0

Ihr Fehler Sie sagt, dass die Methode 'selectDb' nicht in der Klasse existiert' MongoDB \ Driver \ Manager'. Wenn Sie diese Klasse öffnen, werden Sie sehen, dass die Methode dort nicht existiert ... und Ihnen den Fehler gibt. – Timothy

+0

Danke !!! Haben Sie eine Vorstellung davon, mit welcher Funktion die Datenbank ausgewählt wird? – Khushal

+0

Wenn ich mich nicht irre, benutze: '$ manager = new MongoClient(); return $ manager-> selectDB ("MyApi"); '. Überprüfen Sie die Dokumentation: https://docs.phalconphp.com/de/3.0.1/reference/odm.html#setting-a-connection. Aber wenn Sie PHP7 verwenden, sollten Sie in der Tat den Phalcon-Inkubator verwenden: https://github.com/phalcon/incubator/tree/master/Library/Phalcon/Db/Adapter – Timothy

Antwort

0

Für php7 müssen Sie MongoCollection und andere verwandte Klassen von Inkubator verwenden.

+0

Können Sie bitte ein Beispiel oder Referenzlink dafür geben . – Khushal

+0

https://github.com/phalcon/incubator https://github.com/phalcon/incubator/blob/master/Library/Phalcon/Mvc/MongoCollection.php https://github.com/phalcon/incubator/Baum/Meister/Bibliothek/Phalcon/Db/Adapter – Juri

2

Zuerst installierte ich Phalcon Inkubator mit Komponisten in meinem Anbieter Verzeichnis:

composer require phalcon/incubator 

Dann habe ich sicher, dass Anbieter Bibliotheken geladen werden:

include_once SITE_ROOT . 'vendor/autoload.php'; 

Dann benutze ich \ Phalcon \ Db \ Adapter \ MongoDB \ Client() gefunden in vendor/phalcon/incubator/Bibliothek/Phalcon/Db/Adapter/MongoDB/Client.php

In services.php:

$di->setShared('mongo', function() use ($config) { 
    $mongo = new \Phalcon\Db\Adapter\MongoDB\Client(); 
    return $mongo->selectDatabase($config->mongodb->dbname); 
}); 

Dann stellen Sie sicher, dass meine MongoCollection erweitert \ Phalcon \ Mvc \ MongoCollection (Hersteller/phalcon/incubator/Library/Phalcon/Mvc/MongoCollection.php).

models/MyCollectionStats.php:

<?php 

namespace Common\Models; 

class MyCollectionStats extends \Phalcon\Mvc\MongoCollection 
{...