Phalcon 3 和 PHP 7 破坏现有站点

Phalcon 3 and PHP 7 breaking the existing site

我将 PHP 升级到 Version 7 并将 Phalcon 升级到 Version 3 后,我的问题就开始了。

问题

我收到空白页面,没有错误消息 (Error is turned on),控制台中没有“500 内部服务器”错误。该网站以前运行完美。

我有以下控制器IndexController.php

<?php

namespace RealEstate\Property\Controllers;

use \Phalcon\Mvc\Controller;
use \Phalcon\Mvc\View;
use  RealEstate\Common\Models as CommonModels;

class IndexController extends Controller
{
   public function initialize(){
          //Code here
   }

   public function indexAction(){
       $this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);

       $this->view->setVar("total_properties", $this->utils->getTotalProperties());    
       $this->view->pick("index");
       echo "HELLO WORLD";
   } 
}

index 操作不会呈现任何内容,但是会打印 HELLO WORLD,因此该行上方的代码似乎没有错误。

我的bootstrapindex.php

<?php

namespace RealEstate;

use \Phalcon\Mvc\Application;
use \Phalcon\DI\FactoryDefault;
use \Phalcon\Loader;
use \Phalcon\Mvc\Router;
use \Phalcon\Mvc\View;
use \Phalcon\Mvc\Dispatcher;
use \Phalcon\Events\Manager         as EventManager;
use \Phalcon\Assets\Manager         as Assets;
use \Phalcon\Mvc\Url                as UrlProvider;
use \Phalcon\Db\Adapter\Pdo\Mysql   as DbAdapter;
use \Phalcon\Flash\Session          as FlashSession;
use \Phalcon\Session\Adapter\Files  as SessionAdapter;
use \Phalcon\Http\Response\Cookies; 

//use \Phalcon\Session\Adapter\Files    as Session;

class MyApplication extends Application
{

    const DEFAULT_MODULE = "property";
    private $prConfig;
    /**
     * Register the services here to make them general or register in the ModuleDefinition to make them module-specific
     */

    protected function _registerServices()
    {
        try{
            $config = include  "../apps/config/config.php";


            $di = new FactoryDefault();

            $loader = new Loader();

            /**
             * We're a registering a set of directories taken from the configuration file
             */
            $loader->registerDirs(
                array(
                    __DIR__ . '/../apps/library/',
                    __DIR__ . '/../apps/plugins/'
                )
            );

            $loader->registerNamespaces(array(
                'RealEstate\Common\Plugins' => '../apps/plugins/',
                'RealEstate\Common\Models' => '../apps/common/models/',
                'RealEstate\Library\Pagination' => '../apps/library/',
                'Facebook' =>  __DIR__.'/../apps/plugins/FacebookSDK/'
            ));

            $loader->registerClasses(array(
                 "FacebookLib"   =>  __DIR__.'/../apps/library/FacebookLib.php',
                 "Facebook" =>  __DIR__.'/../apps/plugins/FacebookSDK/autoload.php',
                 "MobileDetect" => __DIR__.'/../apps/library/MobileDetect.php'
            ));


            $loader->register();


            $di->set('config', $config, true);


            //Register assets like CSS and JS
            $di->set("assets",function(){
                $assets = new Assets();

                $cdnUrl = $this->cdnurl;
                //Add CSS to collection. "true" means we're using base url for css path
                $assets->collection('css')->addCss($cdnUrl.'assets/css/frontend/combined.css?v=44');
                $assets->collection('footer')->addJs($cdnUrl.'assets/js/frontend/combined.js?v=44', false);

                return $assets;
            });

            $this->prConfig = $config;

            //register base url
            $di->set('baseurl', function() use ($config){
                $url = $config->application->baseUri;
                return $url;
            });

            //register CDN url
            $di->set('cdnurl', function() use ($config){
                $url = $config->application->cdnUri;
                return $url;
            });


            //Module Information
            $di->set('appconfig', function() use ($config){
                $appconfig = $config->application;
                return $appconfig;
            });

            //Register URL helper
            //set base url
            $di->set('url', function() use ($config){
                $url = new UrlProvider();
                $url->setBaseUri($config->application->baseUri);
                return $url;
            });


            //Register dependency for a database connection
            $di->setShared('db', function() use ($config){
                return new DbAdapter(array(
                    "host" => $config->database->host,
                    "username" => $config->database->username,
                    "password" => $config->database->password,
                    "dbname" => $config->database->dbname
                ));
            });

            //Register and start session
            $di->setShared('session', function() {
                $session = new SessionAdapter();
                $session->start();
                return $session;
            });

            //Register custom library Utilities, so that it is available through out the application    
            $di->setShared("utils",function(){
                return new \Utilities();
            });

            //Registering a router
            $di->set('router', function() use ($config){

                $router = new Router(false);


                $controller = "index";
                /*Backend Routers Configuration Start*/

                $modules = $config->modules;


                $router->add('/', array(
                        'module' => 'property',
                        'namespace' => 'RealEstate\Property\Controllers\',
                        'controller' => 'index',
                        'action' => 'index'
                ));

                $router->add('/:int', array(
                        'module' => 'property',
                        'namespace' => 'RealEstate\Property\Controllers\',
                        'controller' => 'index',
                        'action' => 'index',
                        'params' =>1
                ));

                //other router settings


                $router->notFound(array(
                    'module' => 'errors',
                    'namespace' => 'RealEstate\Errors\Controllers\',
                    'controller' => 'index',
                    'action' => 'show404'
                ));


                $router->removeExtraSlashes(true); //ignore trailing slash in urls
                /*Backend Routers Configuration End*/
                return $router;

            });

            $di->set('partials', function() {
                $partials = new View();
                $partials->setPartialsDir('../apps/common/views/');
                return $partials;
            });

            $this->setDI($di);
        }catch(\Phalcon\Exception $e){
            echo get_class($e), ": ", $e->getMessage(), "\n";
            echo " File=", $e->getFile(), "\n";
            echo " Line=", $e->getLine(), "\n";
            echo $e->getTraceAsString();
        }

    }


    public function main()
    {

        try{
            if (!extension_loaded('phalcon')) {
                die("Phalcon extension is not installed or enabled. Please check with host");
            }


            $this->_registerServices();

            if($this->prConfig->application->environment=="development" || $_GET["showerrors"]==1){
                ini_set("display_errors","On");
                error_reporting(E_ALL ^ E_NOTICE);
            }

            $arraytemp = json_decode(json_encode($this->prConfig->modules), true); //convert Config object to a simple array
            //$this->utils->printr($arraytemp,1);
            $keys = array_keys($arraytemp);
            $array = array();

            if(count($keys)>0){
                foreach($keys as $module){
                    $array[$module]["className"] = "RealEstate\".ucwords($module)."\Module";
                    $array[$module]["path"] = "../apps/modules/".$module."/Module.php";
                }
            }else{
                die("The entries for modules not found.");
            }

            $this->registerModules($array);
            echo $this->handle()->getContent();

        }catch(\Phalcon\Exception $e){
            echo get_class($e), ": ", $e->getMessage(), "\n";
            echo " File=", $e->getFile(), "\n";
            echo " Line=", $e->getLine(), "\n";
            echo $e->getTraceAsString();
        }
    }

}

$application = new MyApplication();
$application->main();

也关注了 This Link,但帮助不大。

更新 服务器错误日志中没有错误

谢谢

我想我解决了这个问题。问题在Module.php,问题在方法

public function registerServices($di)
    {

        try{
            //Registering the view component
            $di->set('view', function() {
                $view = new View();
                $view->setViewsDir('../apps/modules/'.$this->module_name.'/views/');
                return $view;
            });

        }catch(\Phalcon\Exception $e){
            echo get_class($e), ": ", $e->getMessage(), "\n";
            echo " File=", $e->getFile(), "\n";
            echo " Line=", $e->getLine(), "\n";
            echo $e->getTraceAsString();
        }
    }

其中,$module_name是class中定义的属性。

在上面的代码中 $this->module_name 是未定义的。所以我将上面的方法更改为 -

public function registerServices($di)
    {
        $module = $this->module_name;

        try{
            //Registering the view component
            $di->set('view', function() use($module) {
                $view = new View();
                $view->setViewsDir('../apps/modules/'.$module.'/views/');
                return $view;
            });

        }catch(\Phalcon\Exception $e){
            echo get_class($e), ": ", $e->getMessage(), "\n";
            echo " File=", $e->getFile(), "\n";
            echo " Line=", $e->getLine(), "\n";
            echo $e->getTraceAsString();
        }
    }

我想知道为什么它在以前版本的 Phalcon 中工作