Ошибка входа в Phalcon (getDI)

Я использую PHP на IIS, фреймворке Phalcon. У меня есть контроллер входа в систему, над которым я работаю (да, пароль еще не зашифрован, но это позже), но я не могу заставить его работать.

У меня есть отправка действия формы для входа / doSignin. Это фрагмент SigninController.php:

public function doSigninAction(){
    //$this->view->disable();
    $user = User::findFirst([
          'conditions' => 'email = :email: AND password = :password:'
        , 'bind' => [
              'email' => $this->request->getPost('email')
            , 'password' => $this->request->getPost('password')
        ]
    ]);
    if ($user){
        echo 1;
        return;
    }
    echo 2;

В результате, когда я запускаю этот код, появляется пустая страница, которая просто сообщает:

Call to undefined method or service 'getDI'

Что-то где-то не выстроено должным образом для внутреннего устройства phalcon, но я не знаю, что мне нужно проверить. Когда я изменяю приведенный выше код на этот, я получаю правильный рендеринг представления, выводя 1 для пользователя:

    $user = new User()/*::findFirst([
          'conditions' => 'email = :email: AND password = :password:'
        , 'bind' => [
              'email' => $this->request->getPost('email')
            , 'password' => $this->request->getPost('password')
        ]
    ]);*/;
    if ($user){
        echo 1;
        return;
    }
    echo 2;

Моя начальная загрузка следующая:

<?php
try {
set_include_path('c:/workspace/GIIAnalytics/app/views');

//Autoloader
$loader = new \Phalcon\Loader();
$loader->registerDirs([
      '../app/controllers/'
    , '../app/models/'
    , '../app/config/'
]);
/** For MSSQL connections */
$loader->registerNamespaces([
      "Twm\Db\Adapter\Pdo"  =>  "../app/library/db/adapter/"
    , "Twm\Db\Dialect"      =>  "../app/library/db/dialect/"
]);
$loader->register();

//Dependancy Injection
$di = new \Phalcon\DI\FactoryDefault();

//Config
$configFile = __DIR__ . '/../app/config/config.json';
$config = json_decode ( file_get_contents ( $configFile ) );
$di->setShared('config',$config);

//MSSQL Database connection
$di->set("db", function() use ($di) {
    //Database info
    /** For MSSQL connections */
    $mc = $di->getDI()->getShared('config')['db'];
    $db = new Twm\Db\Adapter\Pdo\Mssql($mc);
    return $db;
});

//View
$di->set('view', function(){
    $view = new \Phalcon\Mvc\View();
    $view->setViewsDir('../app/views');
    /*
    $view->registerEngines([
        '.volt' => '\Phalcon\Mvc\View\Engine\Volt'
    ]);
    */
    return $view;
});

// Router
$di->set('router',function(){
    $router = new \Phalcon\Mvc\Router();
    $router->mount(new Routes());
    return $router;
});

// Session
$di->setShared('session', function() {
    $session = new \Phalcon\Session\Adapter\Files();
    $session->start();
    return $session;
});

//Flash Data (temp data)
$di->set('flash', function() {
    $flash = new \Phalcon\Flash\Session([
          'error'   =>  'alert alert-danger'
        , 'success' =>  'alert alert-success'
        , 'notice'  =>  'alert alert-info'
        , 'warning' =>  'alert alert-warning'
    ]);
    return $flash;
});

//Metadata
$di['modelsMetadata'] = function() {
    $metaData = new \Phalcon\Mvc\Model\MetaData\Memory([
          'lifetime' => 86400
        , 'prefix' => 'metaData'
    ]);
    return $metaData;
};

// custom dispatcher overrides the default
$di->set('dispatcher', function() use ($di) {
    $eventsManager = $di->getShared('eventsManager');

    // Custom ACL class
    $permission = new Permission();

    // Listen for events from the $permission class
    $eventsManager->attach('dispatch', $permission);

    $dispatcher = new \Phalcon\Mvc\Dispatcher();
    $dispatcher->setEventsManager($eventsManager);
    return $dispatcher;
});

//Deploy the app
$app = new \Phalcon\Mvc\Application($di);
echo $app->handle()->getContent();

} catch(\Phalcon\Exception $e) {
    echo $e->getmessage();
}
?>

Как исправить проблему зависимости?

Кажется, это проблема с загрузкой, я не могу сказать по приведенному выше образцу, в чем проблема.

Gregory Burns 23.06.2018 03:56

Помогло бы, если бы я тогда включил весь бутстрап?

Jaaz Cole 25.06.2018 19:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
363
1

Ответы 1

Нашел проблему. Phalcon не умеет давать вам строку для недопустимых вызовов функций. Это было в моем конструкторе db, где я выполняю $ di-> getDI, это было изменено (вместе с программой чтения конфигурации) на этот фрагмент:

//MSSQL Database connection
$di->set("db", function() use ($di) {
    //Database info
    /** For MSSQL connections */
    $mc = (array) $di->getShared('config')->db;
    $db = new Twm\Db\Adapter\Pdo\Mssql($mc);
    return $db;
});

Другие вопросы по теме