Yii2 вызывать консольную команду не из папки проекта - PullRequest
0 голосов
/ 03 июля 2018

Hello. Я создал консольную команду в Yii2:

projectDir/commands/SomeController.php

<?php
namespace app\commands;

use yii\console\Controller;

/**
 * Class SomeController
 * @package app\commands
 */
class SomeController extends Controller
{
    public function actionTest()
    {
        //do something
    }
}

Я хочу вызвать эту команду в cron, и для тестирования я пытаюсь вызвать ее из консоли, когда я нахожусь в папке проекта:

php /var/www/projectDir/yii some/test

Все отлично работает. Но если я вызываю эту команду, когда нахожусь в другом каталоге, я получаю некоторые ошибки.

Во-первых, я получил

ReflectionException: Class app\admin\templates\Generator does not exist in /var/www/projectDir/vendor/yiisoft/yii2/di/Container.php:428

Видя это, я прокомментировал конфигурацию gii в файле projectDir/common/config/config-console.php

После этого я получаю сообщение об ошибке:

Unknown command: some/test

Почему это происходит? Я вызываю команду с абсолютным путем, и она работает по-разному при вызове из разных папок!

1 Ответ

0 голосов
/ 03 июля 2018

Вам нужно использовать магическую константу __DIR__ для построения абсолютных путей. Результат realpath('../../') будет зависеть от пути, по которому вы запускаете команду. Вы должны использовать

$config['basePath'] = realpath(__DIR__ . '/../../')

или (возможно, лучше):

$config['basePath'] = dirname(dirname(__DIR__))
...