php7.0
, Phalcon 3.2
, MongoDB 3.2.14
Хочу подключаться к базе, но в документации по Phalcon описана настройка подключения через MongoClient() и работа только через него, хотя он устарел давно и вообще deprecated в семёрке. Как мне подружить Phalcon с современным и уютным \MongoDB\Driver\Manager()
? Потому что в services.php
я ладно худо-бедно настроил, вроде не ругается, код такой:
/**
* MongoDB connection
*/
$di->set( "mongo", function () {
$config = $this->getConfig();
$db_string = sprintf( 'mongodb://%s:%s/%s', $config->mongodb->host, $config->mongodb->port, $config->mongodb->database );
if( isset( $config->mongodb->user ) AND isset( $config->mongodb->password ) ) {
$db_string = sprintf( 'mongodb://%s:%s@%s:%s/%s',
$config->mongodb->user,
(string)$config->mongodb->password,
$config->mongodb->host,
(string)$config->mongodb->port,
$config->mongodb->database );
}
try {
return new \MongoDB\Driver\Manager( $db_string );
} catch (MongoConnectionException $e) {
die( 'Failed to connect to MongoDB '.$e->getMessage() );
}
},
true
);
А вот в моделях не нравится ему. Пишу в app/models/User.php
:
use Phalcon\Mvc\Collection;
class User extends Collection
{
public function initialize()
{
$this->setSource('users');
}
}
Вызываю в контроллере:
class IndexController extends ControllerBase
{
public function indexAction()
{
echo User::count();
}
}
Пишет вот такое:
Call to undefined method ::selectcollection()
#0 [internal function]: Phalcon\Mvc\Collection::_getGroupResultset(Array, Object(User), Object(MongoDB\Driver\Manager))
#1 /var/www/testing/app/controllers/IndexController.php(8): Phalcon\Mvc\Collection::count()
#2 [internal function]: IndexController->indexAction()
#3 [internal function]: Phalcon\Dispatcher->callActionMethod(Object(IndexController), 'indexAction', Array)
#4 [internal function]: Phalcon\Dispatcher->_dispatch()
#5 [internal function]: Phalcon\Dispatcher->dispatch()
#6 /var/www/testing/public/index.php(42): Phalcon\Mvc\Application->handle()
#7 {main}
Как победить?
First I installed Phalcon incubator using composer into my vendor directory:
composer require phalcon/incubator
Then I make sure that vendor libraries are loaded:
include_once SITE_ROOT . 'vendor/autoload.php';
Then I use \Phalcon\Db\Adapter\MongoDB\Client()
found in vendor/phalcon/incubator/Library/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);
});
Then ensure my MongoCollection extends \Phalcon\Mvc\MongoCollection
(vendor/phalcon/incubator/Library/Phalcon/Mvc/MongoCollection.php
).
models/MyCollectionStats.php
:
<?php
namespace Common\Models;
class MyCollectionStats extends \Phalcon\Mvc\MongoCollection
{...
Ответ нашёлся здесь. Надеюсь, дальнейшем это кому-то поможет :)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Например, в массиве есть ключ answer, со значением 2 и надо сделать, что бы появилась форма, с радиокнопками и автоматически, была нажата вторая
Добрый день! Нужно поместить на страницу с заказом скрипт (js массив dataLayer с данными для GTM)Но, выполниться он должен при первом просмотре страници...
Есть код, на ответ выдаётся массив данных, как выдернуть содержимое строки title после знака =>