Browse Source

Fix Phalcon installation and code base update (#6443)

* Fix installation of Phalcon in dockerfiles

* Reformat and update code base

* Enable "plaintext_url" benchmark in Phalcon Micro

* Remove import of functions

* Reformat code

* Fix Phalcon's MongoDB benchmark
Anton Vasiliev 4 years ago
parent
commit
a3771b148f
25 changed files with 263 additions and 281 deletions
  1. 14 0
      frameworks/PHP/phalcon/app/collections/FortunesCollection.php
  2. 14 0
      frameworks/PHP/phalcon/app/collections/WorldsCollection.php
  3. 11 8
      frameworks/PHP/phalcon/app/config/config.php
  4. 24 22
      frameworks/PHP/phalcon/app/config/routes.php
  5. 28 30
      frameworks/PHP/phalcon/app/controllers/BenchController.php
  6. 4 2
      frameworks/PHP/phalcon/app/controllers/IndexController.php
  7. 43 0
      frameworks/PHP/phalcon/app/controllers/MongoController.php
  8. 0 37
      frameworks/PHP/phalcon/app/controllers/MongobenchController.php
  9. 4 3
      frameworks/PHP/phalcon/app/models/Fortunes.php
  10. 0 14
      frameworks/PHP/phalcon/app/models/FortunesCollection.php
  11. 0 14
      frameworks/PHP/phalcon/app/models/MongoFortunesCollection.php
  12. 0 14
      frameworks/PHP/phalcon/app/models/MongoWorldsCollection.php
  13. 3 2
      frameworks/PHP/phalcon/app/models/Worlds.php
  14. 0 14
      frameworks/PHP/phalcon/app/models/WorldsCollection.php
  15. 0 0
      frameworks/PHP/phalcon/app/views/layouts/mongo.volt
  16. 1 0
      frameworks/PHP/phalcon/app/views/mongo/fortunes.volt
  17. 0 1
      frameworks/PHP/phalcon/app/views/mongobench/fortunes.volt
  18. 3 3
      frameworks/PHP/phalcon/benchmark_config.json
  19. 4 4
      frameworks/PHP/phalcon/composer.json
  20. 1 0
      frameworks/PHP/phalcon/config.toml
  21. 3 2
      frameworks/PHP/phalcon/phalcon-micro.dockerfile
  22. 3 2
      frameworks/PHP/phalcon/phalcon-mongodb.dockerfile
  23. 2 2
      frameworks/PHP/phalcon/phalcon.dockerfile
  24. 53 61
      frameworks/PHP/phalcon/public/index-micro.php
  25. 48 46
      frameworks/PHP/phalcon/public/index.php

+ 14 - 0
frameworks/PHP/phalcon/app/collections/FortunesCollection.php

@@ -0,0 +1,14 @@
+<?php
+
+use Phalcon\Incubator\MongoDB\Mvc\Collection;
+
+class FortunesCollection extends Collection
+{
+    public $message;
+
+    public function onConstruct(): void
+    {
+        $this->setSource('fortune');
+        $this->useImplicitObjectIds(false);
+    }
+}

+ 14 - 0
frameworks/PHP/phalcon/app/collections/WorldsCollection.php

@@ -0,0 +1,14 @@
+<?php
+
+use Phalcon\Incubator\MongoDB\Mvc\Collection;
+
+class WorldsCollection extends Collection
+{
+    public $randomNumber;
+
+    public function onConstruct(): void
+    {
+        $this->setSource('world');
+        $this->useImplicitObjectIds(false);
+    }
+}

+ 11 - 8
frameworks/PHP/phalcon/app/config/config.php

@@ -1,22 +1,25 @@
 <?php
 
-return new \Phalcon\Config(array(
-    'database'     => array(
+use Phalcon\Config;
+
+return new Config([
+    'database'     => [
         'adapter'  => 'Mysql',
         'host'     => 'tfb-database',
         'username' => 'benchmarkdbuser',
         'password' => 'benchmarkdbpass',
         'name'     => 'hello_world',
         'persistent' => true,
-    ),
-    'mongodb'     => array(
+    ],
+    'mongodb'     => [
         'url'     => 'mongodb://tfb-database:27017',
         'db'      => 'hello_world'
-    ),
-    'application' => array(
+    ],
+    'application' => [
         'controllersDir' => APP_PATH . '/app/controllers/',
         'modelsDir'      => APP_PATH . '/app/models/',
+        'collectionsDir' => APP_PATH . '/app/collections/',
         'viewsDir'       => APP_PATH . '/app/views/',
         'baseUri'        => '/',
-    )
-));
+    ]
+]);

+ 24 - 22
frameworks/PHP/phalcon/app/config/routes.php

@@ -1,50 +1,52 @@
 <?php
 
-$router = new Phalcon\Mvc\Router(false);
+use Phalcon\Mvc\Router;
 
-$router->add('/json', array(
+$router = new Router(false);
+
+$router->addGet('/json', [
     'controller' => 'bench',
     'action' => 'json',
-));
+]);
 
-$router->add('/db', array(
+$router->addGet('/db', [
     'controller' => 'bench',
     'action' => 'db',
-));
+]);
 
-$router->add('/queries', array(
+$router->addGet('/queries', [
     'controller' => 'bench',
     'action' => 'queries',
-));
+]);
 
-$router->add('/fortunes', array(
+$router->addGet('/fortunes', [
     'controller' => 'bench',
     'action' => 'fortunes',
-));
+]);
 
-$router->add('/update', array(
+$router->addGet('/update', [
     'controller' => 'bench',
     'action' => 'update',
-));
+]);
 
-$router->add('/plaintext', array(
+$router->addGet('/plaintext', [
     'controller' => 'bench',
     'action' => 'plaintext',
-));
+]);
 
-$router->add('/mongodb/db', array(
-    'controller' => 'mongobench',
+$router->addGet('/mongodb/db', [
+    'controller' => 'mongo',
     'action' => 'db',
-));
+]);
 
-$router->add('/mongodb/queries', array(
-    'controller' => 'mongobench',
+$router->addGet('/mongodb/queries', [
+    'controller' => 'mongo',
     'action' => 'queries',
-));
+]);
 
-$router->add('/mongodb/fortunes', array(
-    'controller' => 'mongobench',
+$router->addGet('/mongodb/fortunes', [
+    'controller' => 'mongo',
     'action' => 'fortunes',
-));
+]);
 
 return $router;

+ 28 - 30
frameworks/PHP/phalcon/app/controllers/BenchController.php

@@ -1,35 +1,34 @@
 <?php
 
-use Phalcon\Mvc\View,
-    Phalcon\Mvc\Model\Resultset;
+use Phalcon\Mvc\Controller;
+use Phalcon\Mvc\View;
+use Phalcon\Mvc\Model\Resultset;
+use Phalcon\Http\ResponseInterface;
 
-class BenchController extends \Phalcon\Mvc\Controller
+class BenchController extends Controller
 {
-
-    public function initialize()
+    public function initialize(): void
     {
-        // views must be renderd explicitly. safes processing time when not needed.
+        // views must be rendered explicitly. safes processing time when not needed.
         $this->view->setRenderLevel(View::LEVEL_LAYOUT);
     }
 
-    public function jsonAction()
+    public function jsonAction(): ResponseInterface
     {
-        return $this->response->setJsonContent(array(
+        return $this->response->setJsonContent([
             'message' => 'Hello, World!'
-        ));
+        ]);
     }
 
-    public function dbAction()
+    public function dbAction(): ResponseInterface
     {
         return $this->response->setJsonContent($this->getRandomWorld());
     }
 
-    public function queriesAction()
+    public function queriesAction(): ResponseInterface
     {
-
-	$queries = min(500, max(1, $this->filter->sanitize($this->request->getQuery('queries', null, 1), "int")));
-
-        $worlds = array();
+        $queries = min(500, max(1, $this->request->getQuery('queries', "int", 1)));
+        $worlds = [];
 
         for ($i = 0; $i < $queries; ++$i) {
             $worlds[] = $this->getRandomWorld();
@@ -38,9 +37,8 @@ class BenchController extends \Phalcon\Mvc\Controller
         return $this->response->setJsonContent($worlds);
     }
 
-    public function fortunesAction()
+    public function fortunesAction(): void
     {
-
         $fortunes = $this->getFortunesArray();
         $fortunes[] = $this->buildFortune();
 
@@ -49,13 +47,12 @@ class BenchController extends \Phalcon\Mvc\Controller
         $this->view->fortunes = $this->sortFortunes($fortunes);
     }
 
-    public function updateAction()
+    public function updateAction(): ResponseInterface
     {
-
-        $queries = $this->request->getQuery('queries', null, 1);
+        $queries = $this->request->getQuery('queries', "int", 1);
         $queries = max(1, min(500, $queries));
 
-        $worlds = array();
+        $worlds = [];
 
         for ($i = 0; $i < $queries; ++$i) {
             $world = $this->getRandomWorld();
@@ -67,11 +64,12 @@ class BenchController extends \Phalcon\Mvc\Controller
         return $this->response->setJsonContent($worlds);
     }
 
-    public function plaintextAction()
+    public function plaintextAction(): ResponseInterface
     {
         $this->view->disable();
         $this->response->setContentType('text/plain');
         $this->response->setContent("Hello, World!");
+
         return $this->response;
     }
 
@@ -80,7 +78,7 @@ class BenchController extends \Phalcon\Mvc\Controller
         return Worlds::findFirst(mt_rand(1, 10000));
     }
 
-    protected function getFortunesArray()
+    protected function getFortunesArray(): array
     {
         // since the resultset is immutable get an array instead
         // so we can add the new fortune
@@ -89,18 +87,18 @@ class BenchController extends \Phalcon\Mvc\Controller
 
     protected function buildFortune()
     {
-        return array(
+        return [
             'id' => 0,
             'message' => 'Additional fortune added at request time.'
-        );
+        ];
     }
 
-    protected function sortFortunes($fortunes)
+    protected function sortFortunes(array $fortunes): array
     {
-        usort($fortunes,
-                function($left, $right) {
-                    return $left['message'] <=> $right['message'];
-                });
+        usort($fortunes, function ($left, $right) {
+            return $left['message'] <=> $right['message'];
+        });
+
         return $fortunes;
     }
 }

+ 4 - 2
frameworks/PHP/phalcon/app/controllers/IndexController.php

@@ -1,8 +1,10 @@
 <?php
 
-class IndexController extends \Phalcon\Mvc\Controller
+use Phalcon\Mvc\Controller;
+
+class IndexController extends Controller
 {
-    public function indexAction()
+    public function indexAction(): void
     {
         echo "<h1>Wrong controller for this benchmark!</h1>";
     }

+ 43 - 0
frameworks/PHP/phalcon/app/controllers/MongoController.php

@@ -0,0 +1,43 @@
+<?php
+
+use Phalcon\Mvc\View;
+use Phalcon\Mvc\Model\Resultset;
+
+class MongoController extends BenchController
+{
+    protected function getRandomWorld()
+    {
+        return WorldsCollection::findFirst([
+            'conditions' => [
+                '_id' => mt_rand(1, 10000),
+            ],
+            'projection' => [
+                //'id' => 0,
+            ],
+        ]);
+    }
+
+    protected function getFortunesArray(): array
+    {
+        return FortunesCollection::find()->toArray();
+    }
+
+    protected function buildFortune()
+    {
+        $fortune = parent::buildFortune();
+        $newFortune = new FortunesCollection();
+        $newFortune->setId($fortune['id']);
+        $newFortune->message = $fortune['message'];
+
+        return $newFortune;
+    }
+
+    protected function sortFortunes(array $fortunes): array
+    {
+        usort($fortunes, function ($left, $right) {
+            return $left->message <=> $right->message;
+        });
+
+        return $fortunes;
+    }
+}

+ 0 - 37
frameworks/PHP/phalcon/app/controllers/MongobenchController.php

@@ -1,37 +0,0 @@
-<?php
-
-use Phalcon\Mvc\View,
-    Phalcon\Mvc\Model\Resultset;
-
-class MongobenchController extends BenchController
-{
-
-    protected function getRandomWorld()
-    {
-        return MongoWorldsCollection::findFirst(array(array('_id' => mt_rand(1, 10000))));
-    }
-
-    protected function getFortunesArray()
-    {
-        return MongoFortunesCollection::find();
-    }
-
-    protected function buildFortune()
-    {
-        $fortune = parent::buildFortune();
-        $newFortune = new MongoFortunesCollection();
-        $newFortune->_id = $fortune['id'];
-        $newFortune->message = $fortune['message'];
-        return $newFortune;
-    }
-
-    protected function sortFortunes($fortunes)
-    {
-        usort($fortunes,
-                function($left, $right) {
-                    return $left->message <=> $right->message;
-                });
-        return $fortunes;
-    }
-
-}

+ 4 - 3
frameworks/PHP/phalcon/app/models/Fortunes.php

@@ -1,9 +1,10 @@
 <?php
 
+use Phalcon\Mvc\Model;
 use Phalcon\Mvc\Model\MetaData;
 use Phalcon\Db\Column;
 
-class Fortunes extends \Phalcon\Mvc\Model
+class Fortunes extends Model
 {
     public $id;
 
@@ -14,7 +15,7 @@ class Fortunes extends \Phalcon\Mvc\Model
         $this->setSource('Fortune');
     }
 
-    public function metaData()
+    public function metaData(): array
     {
         return [
             // Every column in the mapped table
@@ -73,4 +74,4 @@ class Fortunes extends \Phalcon\Mvc\Model
             MetaData::MODELS_EMPTY_STRING_VALUES => [],
         ];
     }
-}
+}

+ 0 - 14
frameworks/PHP/phalcon/app/models/FortunesCollection.php

@@ -1,14 +0,0 @@
-<?php
-
-class FortunesCollection extends \Phalcon\Mvc\Collection
-{
-
-    public $_id;
-    public $message;
-
-    public function getSource()
-    {
-        return "fortune";
-    }
-
-}

+ 0 - 14
frameworks/PHP/phalcon/app/models/MongoFortunesCollection.php

@@ -1,14 +0,0 @@
-<?php
-
-class MongoFortunesCollection extends \Phalcon\Mvc\MongoCollection
-{
-
-    public $_id;
-    public $message;
-
-    public function getSource()
-    {
-        return "fortune";
-    }
-
-}

+ 0 - 14
frameworks/PHP/phalcon/app/models/MongoWorldsCollection.php

@@ -1,14 +0,0 @@
-<?php
-
-class MongoWorldsCollection extends \Phalcon\Mvc\MongoCollection
-{
-
-    public $_id;
-    public $randomNumber;
-
-    public function getSource()
-    {
-        return "world";
-    }
-
-}

+ 3 - 2
frameworks/PHP/phalcon/app/models/Worlds.php

@@ -1,9 +1,10 @@
 <?php
 
+use Phalcon\Mvc\Model;
 use Phalcon\Mvc\Model\MetaData;
 use Phalcon\Db\Column;
 
-class Worlds extends \Phalcon\Mvc\Model
+class Worlds extends Model
 {
     public $id;
 
@@ -14,7 +15,7 @@ class Worlds extends \Phalcon\Mvc\Model
         $this->setSource('World');
     }
 
-    public function metaData()
+    public function metaData(): array
     {
         return [
             // Every column in the mapped table

+ 0 - 14
frameworks/PHP/phalcon/app/models/WorldsCollection.php

@@ -1,14 +0,0 @@
-<?php
-
-class WorldsCollection extends \Phalcon\Mvc\Collection
-{
-
-    public $_id;
-    public $randomNumber;
-
-    public function getSource()
-    {
-        return "world";
-    }
-
-}

+ 0 - 0
frameworks/PHP/phalcon/app/views/layouts/mongobench.volt → frameworks/PHP/phalcon/app/views/layouts/mongo.volt


+ 1 - 0
frameworks/PHP/phalcon/app/views/mongo/fortunes.volt

@@ -0,0 +1 @@
+<table><tr><th>id</th><th>message</th></tr>{% for fortune in fortunes %}<tr><td>{{ fortune.getId() }}</td><td>{{ fortune.message | e }}</td></tr>{% endfor %}</table>

+ 0 - 1
frameworks/PHP/phalcon/app/views/mongobench/fortunes.volt

@@ -1 +0,0 @@
-<table><tr><th>id</th><th>message</th></tr>{% for fortune in fortunes %}<tr><td>{{ fortune._id }}</td><td>{{ fortune.message | e }}</td></tr>{% endfor %}</table>

+ 3 - 3
frameworks/PHP/phalcon/benchmark_config.json

@@ -40,12 +40,12 @@
       "webserver": "nginx",
       "os": "Linux",
       "database_os": "Linux",
-      "display_name": "phalcon-mogodb",
+      "display_name": "phalcon-mongodb",
       "notes": "",
-      "versus": "php",
-      "tags": ["broken"]
+      "versus": "php"
     },
     "micro": {
+      "plaintext_url": "/plaintext",
       "json_url": "/json",
       "db_url": "/db",
       "query_url": "/queries?queries=",

+ 4 - 4
frameworks/PHP/phalcon/composer.json

@@ -1,6 +1,6 @@
 {
-   "require": {
-   	"mongodb/mongodb" : "1.0.2",
-   	"phalcon/incubator": "^3.4"
-   }
+    "require": {
+        "mongodb/mongodb": "^1.6",
+        "phalcon/incubator-mongodb": "^1.0"
+    }
 }

+ 1 - 0
frameworks/PHP/phalcon/config.toml

@@ -33,6 +33,7 @@ webserver = "nginx"
 versus = "php"
 
 [micro]
+urls.plaintext = "/plaintext"
 urls.json = "/json"
 urls.db = "/db"
 urls.query = "/queries?queries="

+ 3 - 2
frameworks/PHP/phalcon/phalcon-micro.dockerfile

@@ -5,7 +5,8 @@ ARG DEBIAN_FRONTEND=noninteractive
 RUN apt-get update -yqq && apt-get install -yqq software-properties-common > /dev/null
 RUN LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
 RUN apt-get update -yqq > /dev/null && \
-    apt-get install -yqq nginx git unzip php7.4 php7.4-common php7.4-cli php7.4-fpm php7.4-mysql php7.4-phalcon > /dev/null
+    apt-get install -yqq nginx git unzip \
+    php7.4-cli php7.4-fpm php7.4-mysql php7.4-mbstring > /dev/null
 
 RUN apt-get install -yqq composer > /dev/null
 
@@ -14,7 +15,7 @@ COPY deploy/conf/* /etc/php/7.4/fpm/
 ADD ./ /phalcon
 WORKDIR /phalcon
 
-#RUN apt-get install -yqq php7.4-phalcon  > /dev/null
+RUN apt-get install -yqq php7.4-psr php7.4-phalcon  > /dev/null
 
 RUN if [ $(nproc) = 2 ]; then sed -i "s|pm.max_children = 1024|pm.max_children = 512|g" /etc/php/7.4/fpm/php-fpm.conf ; fi;
 

+ 3 - 2
frameworks/PHP/phalcon/phalcon-mongodb.dockerfile

@@ -5,7 +5,8 @@ ARG DEBIAN_FRONTEND=noninteractive
 RUN apt-get update -yqq && apt-get install -yqq software-properties-common > /dev/null
 RUN LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
 RUN apt-get update -yqq > /dev/null && \
-    apt-get install -yqq nginx git unzip php7.4 php7.4-common php7.4-cli php7.4-fpm php7.4-mysql php7.4-mongodb  > /dev/null
+    apt-get install -yqq nginx git unzip \
+        php7.4-cli php7.4-fpm php7.4-mysql php7.4-mbstring php7.4-mongodb > /dev/null
 
 RUN apt-get install -yqq composer > /dev/null
 
@@ -16,7 +17,7 @@ WORKDIR /phalcon
 
 RUN if [ $(nproc) = 2 ]; then sed -i "s|pm.max_children = 1024|pm.max_children = 512|g" /etc/php/7.4/fpm/php-fpm.conf ; fi;
 
-RUN apt-get install -yqq php7.4-phalcon  > /dev/null
+RUN apt-get install -yqq php7.4-psr php7.4-phalcon  > /dev/null
 
 RUN composer install --optimize-autoloader --classmap-authoritative --no-dev --quiet --ignore-platform-reqs
 

+ 2 - 2
frameworks/PHP/phalcon/phalcon.dockerfile

@@ -6,7 +6,7 @@ RUN apt-get update -yqq && apt-get install -yqq software-properties-common > /de
 RUN LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
 RUN apt-get update -yqq > /dev/null && \
     apt-get install -yqq nginx git unzip \
-    php7.4-cli php7.4-fpm php7.4-mysql php7.4-mongodb php7.4-mbstring > /dev/null
+    php7.4-cli php7.4-fpm php7.4-mysql php7.4-mbstring > /dev/null
 
 RUN apt-get install -yqq composer > /dev/null
 
@@ -15,7 +15,7 @@ COPY deploy/conf/* /etc/php/7.4/fpm/
 ADD ./ /phalcon
 WORKDIR /phalcon
 
-RUN apt-get install -yqq php7.4-phalcon  > /dev/null
+RUN apt-get install -yqq php7.4-psr php7.4-phalcon  > /dev/null
 
 RUN if [ $(nproc) = 2 ]; then sed -i "s|pm.max_children = 1024|pm.max_children = 512|g" /etc/php/7.4/fpm/php-fpm.conf ; fi;
 

+ 53 - 61
frameworks/PHP/phalcon/public/index-micro.php

@@ -1,114 +1,106 @@
 <?php
 
-try {
+use Phalcon\Db\Adapter\Pdo\Mysql;
+use Phalcon\Db\Enum;
+use Phalcon\Mvc\Micro;
+use Phalcon\Mvc\View;
+use Phalcon\Mvc\View\Engine\Volt;
+use Phalcon\Exception as PhalconException;
 
-    $app = new Phalcon\Mvc\Micro();
+try {
+    $app = new Micro();
 
     // Setting up the database connection
-    $app['db'] = function() {
-
-        return new \Phalcon\Db\Adapter\Pdo\Mysql(array(
-            'host'       => 'tfb-database',
-            'dbname'     =>  'hello_world',
-            'username'   => 'benchmarkdbuser',
-            'password'   => 'benchmarkdbpass',
-            'options'    => [
-                              PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'",
-                              PDO::ATTR_PERSISTENT => TRUE,
-                            ]
-        ));
+    $app['db'] = function () {
+        return new Mysql([
+            'host' => 'tfb-database',
+            'dbname' => 'hello_world',
+            'username' => 'benchmarkdbuser',
+            'password' => 'benchmarkdbpass',
+            'options' => [
+                PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'",
+                PDO::ATTR_PERSISTENT => true,
+            ],
+        ]);
     };
 
     // Setting up the view component (seems to be required even when not used)
-    $app['view'] = function() {
-
-        $view = new \Phalcon\Mvc\View();
-
+    $app['view'] = function () {
+        $view = new View();
         $view->setViewsDir(__DIR__ . '/../app/views/');
-
-        $view->registerEngines(array(
-            ".volt" => function($view) {
-
-                $volt = new \Phalcon\Mvc\View\Engine\Volt($view);
-
-                $volt->setOptions(array(
+        $view->registerEngines([
+            ".volt" => function ($view) {
+                $volt = new Volt($view);
+                $volt->setOptions([
                     "path" => __DIR__ . "/../app/compiled-templates/",
                     "extension" => ".c",
                     "separator" => '_',
-                ));
+                ]);
 
                 return $volt;
             }
-        ));
+        ]);
 
         return $view;
     };
-    
-    $app->map('/plaintext', function() {
+
+    /**
+     * Routes
+     */
+    $app->map('/plaintext', function () {
         header("Content-Type: text/plain; charset=UTF-8");
-        echo "Hello, World!";       
+        echo "Hello, World!";
     });
 
-    $app->map('/json', function() {
+    $app->map('/json', function () {
         header("Content-Type: application/json");
-        echo json_encode(array('message' => 'Hello, World!'));
+        echo json_encode(['message' => 'Hello, World!']);
     });
 
-    //
-    $app->map('/db', function() use ($app) {
-        header("Content-Type: application/json");
-
+    $app->map('/db', function () use ($app) {
         $db = $app['db'];
-        
-        $world = $db->fetchOne('SELECT * FROM world WHERE id = ' . mt_rand(1, 10000), Phalcon\Db\Enum::FETCH_ASSOC);
+        $world = $db->fetchOne('SELECT * FROM world WHERE id = ' . mt_rand(1, 10000), Enum::FETCH_ASSOC);
 
+        header("Content-Type: application/json");
         echo json_encode($world);
     });
 
-
-    // queries
-    $app->map('/queries', function() use ($app) {
-        header("Content-Type: application/json");
-
+    $app->map('/queries', function () use ($app) {
         $db = $app['db'];
 
-        $queries = $app->request->getQuery('queries', null, 1);
-        $queries = is_numeric($queries) ? min(max(intval($queries), 1), 500) : 1;
+        $queries = $app->request->getQuery('queries', "int", 1);
+        $queries = min(max(intval($queries), 1), 500);
 
-        $worlds = array();
+        $worlds = [];
 
         for ($i = 0; $i < $queries; ++$i) {
-            $worlds[] = $db->fetchOne('SELECT * FROM world WHERE id = ' . mt_rand(1, 10000), Phalcon\Db\Enum::FETCH_ASSOC);
+            $worlds[] = $db->fetchOne('SELECT * FROM world WHERE id = ' . mt_rand(1, 10000), Enum::FETCH_ASSOC);
         }
 
+        header("Content-Type: application/json");
         echo json_encode($worlds);
     });
 
-    // /fortunes
-    $app->map('/fortunes', function() use ($app) {
-
+    $app->map('/fortunes', function () use ($app) {
         $fortunes = $app['db']->query('SELECT * FROM fortune')->fetchAll();
-
-        $fortunes[] = array(
+        $fortunes[] = [
             'id' => 0,
             'message' => 'Additional fortune added at request time.'
-        );
+        ];
 
-        usort($fortunes, function($left, $right) {
+        usort($fortunes, function ($left, $right) {
             return $left['message'] <=> $right['message'];
         });
 
         header("Content-Type: text/html; charset=utf-8");
 
-        echo $app['view']->getRender('bench', 'fortunes', array(
-            'fortunes' => $fortunes
-        ));
-
+        echo $app['view']->getRender('bench', 'fortunes', [
+            'fortunes' => $fortunes,
+        ]);
     });
-    
+
     $url = $_REQUEST['_url'] ?? '/';
     $app->handle($url);
-
-} catch(\Phalcon\Exception $e) {
+} catch (PhalconException $e) {
     echo "PhalconException: ", $e->getMessage();
 }

+ 48 - 46
frameworks/PHP/phalcon/public/index.php

@@ -1,102 +1,104 @@
 <?php
 
+use MongoDB\Client;
+use Phalcon\Db\Adapter\Pdo\Mysql;
+use Phalcon\DI\FactoryDefault;
+use Phalcon\Exception as PhalconException;
+use Phalcon\Http\Request;
+use Phalcon\Incubator\MongoDB\Mvc\Collection\Manager as MongoDBCollectionManager;
+use Phalcon\Loader;
+use Phalcon\Mvc\Application;
+use Phalcon\Mvc\Model\MetaData\Apc;
+use Phalcon\Mvc\Model\MetaData\Memory;
+use Phalcon\Mvc\View;
+use Phalcon\Mvc\View\Engine\Volt;
+
 define('APP_PATH', realpath('..'));
 require APP_PATH . "/vendor/autoload.php";
 
 try {
-
     // Load the config
     $config = include APP_PATH . "/app/config/config.php";
 
     // Register an autoloader
-    $loader = new \Phalcon\Loader();
-    $loader->registerDirs(array(
+    $loader = new Loader();
+    $loader->registerDirs([
         $config->application->controllersDir,
-        $config->application->modelsDir
-    ))->register();
+        $config->application->modelsDir,
+        $config->application->collectionsDir,
+    ])->register();
 
     // Create a DI
-    $di = new Phalcon\DI\FactoryDefault();
+    $di = new FactoryDefault();
 
     // Setting up the router
-    $di->set('router', require APP_PATH . '/app/config/routes.php');
+    $di->setShared('router', require APP_PATH . '/app/config/routes.php');
 
     //MetaData
-    $di->set('modelsMetadata', function(){
+    $di->setShared('modelsMetadata', function () {
         if (function_exists('apc_store')) {
-            return new Phalcon\Mvc\Model\MetaData\Apc();
-        } else {
-            return new Phalcon\Mvc\Model\MetaData\Memory(array(
-                'metaDataDir' => APP_PATH . "/app/compiled-templates/"
-            ));
+            return new Apc();
         }
+
+        return new Memory([
+            'metaDataDir' => APP_PATH . "/app/compiled-templates/"
+        ]);
     });
 
     // Setting up the view component (seems to be required even when not used)
-    $di->set('view', function() use ($config) {
-
-        $view = new \Phalcon\Mvc\View();
-
+    $di->setShared('view', function () use ($config) {
+        $view = new View();
         $view->setViewsDir($config->application->viewsDir);
-
-        $view->registerEngines(array(
-            ".volt" => function($view) {
-
-                $volt = new \Phalcon\Mvc\View\Engine\Volt($view);
-
-                $volt->setOptions(array(
+        $view->registerEngines([
+            ".volt" => function ($view) {
+                $volt = new Volt($view);
+                $volt->setOptions([
                     "path" => APP_PATH . "/app/compiled-templates/",
                     "extension" => ".compiled",
                     "separator" => '_',
-                ));
+                ]);
 
                 return $volt;
             }
-        ));
+        ]);
 
         return $view;
     });
 
     // Setting up the database connection
-    $di->set('db', function() use ($config) {
-
+    $di->setShared('db', function () use ($config) {
         $database = $config->database;
 
-        return new \Phalcon\Db\Adapter\Pdo\Mysql(array(
+        return new Mysql([
             'host' => $database->host,
             'username' => $database->username,
             'password' => $database->password,
             'dbname' => $database->name,
-            'options'  => array(
+            'options' => [
                 PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
                 PDO::ATTR_PERSISTENT => true,
-            )
-        ));
+            ],
+        ]);
     });
 
     // Setting up the mongodb connection
-    $di->set('mongo', function() use ($config) {
+    $di->setShared('mongo', function () use ($config) {
         $mongodbConfig = $config->mongodb;
+        $mongo = new Client($mongodbConfig->url);
 
-        $mongo = new \Phalcon\Db\Adapter\MongoDB\Client($mongodbConfig->url);
         return $mongo->selectDatabase($mongodbConfig->db);
     });
 
-    //Registering the collectionManager service
-    $di->set('collectionManager', function() {
-        // Setting a default EventsManager
-        $modelsManager = new Phalcon\Mvc\Collection\Manager();
-        $modelsManager->setEventsManager(new Phalcon\Events\Manager());
-        return $modelsManager;
-
-    }, true);
+    // Registering the mongoDB CollectionManager service
+    $di->setShared('collectionsManager', function () {
+        return new MongoDBCollectionManager();
+    });
 
     // Handle the request
-    $request = new Phalcon\Http\Request();
-    $application = new \Phalcon\Mvc\Application();
+    $request = new Request();
+    $application = new Application();
     $application->setDI($di);
     $application->handle($request->getURI())->send();
-
-} catch(\Phalcon\Exception $e) {
+} catch (PhalconException $e) {
     echo "PhalconException: ", $e->getMessage();
 }