Неизвестная ошибка при запуске приложения Phalcon из командной строки - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь запустить задачу командной строки, и мой файл cli.php выдает мне эту ошибку:

PHP Notice:  Array to string conversion in /var/www/htdocs/classschedule/app/cli.php on line 23
PHP Fatal error:  Uncaught RuntimeException: Call to undefined method ::gettaskname() in /var/www/htdocs/classschedule/app/cli.php:23
Stack trace:
#0 /var/www/htdocs/classschedule/app/cli.php(23): Phalcon\Cli\Console->handle(Array)
#1 {main}
  thrown in /var/www/htdocs/classschedule/app/cli.php on line 23

Вот мой cli.php

include '/var/www/common/dump.php';
require 'config/bootstrap.php';

$DI->get('dispatcher')->setDefaultNamespace('Task');
$DI->get('dispatcher')->setNamespaceName('Task');

$Console = new \Phalcon\CLI\Console();
$Console->setDI($DI);

$arguments = [];
foreach($argv as $k => $arg) {
    if($k == 1) {
        $arguments['task'] = $arg;
    } elseif($k == 2) {
         $arguments['action'] = $arg;
    } elseif($k >= 3) {
        $arguments['params'][] = $arg;
    }
}

try{
    $Console->handle($arguments); // <-- This is line 23
}
catch(\Phalcon\Exception $e){
    echo $e->getMessage();
    exit(255);
}

Понятия не имею, почему генерируется ошибка Notice или Fatal. Этот файл почти идентичен cli.php для другого моего приложения, которое работает нормально. Даже удаление foreach() все еще вызывает ошибку.

Редактировать:

Bootstrap.php

config.php


решаемые

Решение:

Мой DI, Dispatcher и Router были версиями MVC, а не их эквивалентами CLI. Изменение их решило проблему - в Диспетчере ожидалось setTask().

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Не могли бы вы поделиться своим config/bootstrap.php файлом?Я проверил:

use Phalcon\Di\FactoryDefault\Cli as DI;

Параметры были прочитаны, и в строке 23 запрашивался MainTask handler class (без ошибок).

Это код, который я тестировал:

use Phalcon\Loader;
use Phalcon\Di\FactoryDefault\Cli as CliDI;

$DI = new CliDI();

$loader = new Loader();

$loader->registerNamespaces(
    [
    'Task' => __DIR__ . '/tasks',
    ]
);
$loader->register();

$Console = new \Phalcon\CLI\Console();
$Console->setDI($DI);

$arguments = [];

foreach($argv as $k => $arg) {
    if($k == 1) {
        $arguments['task'] = $arg;
    } elseif($k == 2) {
        $arguments['action'] = $arg;
    } elseif($k >= 3) {
        $arguments['params'][] = $arg;
    }
}

try{
    $Console->handle($arguments); 
}
catch(\Phalcon\Exception $e){
    echo $e->getMessage();
    exit(255);
}

И MainTask.php:

namespace Task;

use Phalcon\Cli\Task;

class MainTask extends Task
{
    public function mainAction()
    {
        echo 'This is the default task and the default action' . PHP_EOL;
    }

    public function testAction(array $params)
    {
        echo sprintf('hello %s', $params[0]);

        echo PHP_EOL;

        echo sprintf('best regards, %s', $params[1]);

        echo PHP_EOL;    

    }

}
0 голосов
/ 11 сентября 2018
$Console->handle($arguments); // <-- This is line 23

Кажется, что эта строка ожидает строку, а вы передаете массив.

Возможно, phalcon плохо обрабатывает этот случай и не может создать экземпляр какого-либо другого объекта, для которого он пытаетсявызовите gettaskname.

...