Вызов пользовательских компонентов в Yii2 (класс не найден)

Я делаю пользовательский компонент (геттер).

Мой компонент Custon работает хорошо, потому что я тестирую из контроллера:

namespace app\controllers;

use Yii;

(...)

class SiteController extends Controller
{
    (...)

    public function actionTest()
    {   
         //OK, print numItems
         echo '<br>-Items: '.Yii::$app->getter->numItems;
    }       
}

Теперь я хочу использовать свой компонент из стандартного php-файла. Этот файл php находится внутри структуры проекта Yii в cmd dir.

namespace app\cmd;

use Yii;

echo "Import ok<br>";

echo '<br>-Items: '.Yii::$app->getter->numItems;

echo "Script end";

Результатом выполнения скрипта является "Import ok" и Fatal error: Class 'Yii' not found,

Почему я получаю ошибку "Класс не найден"?

1 ответ

Решение

Вы должны сделать больше, чем просто сказать use Yii;,

Посмотрите в web / index.php например:

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

$config = require(__DIR__ . '/../config/web.php');
(new yii\web\Application($config))->run();

Там вы видите, что файл autoload.php композитора становится обязательным. И тогда Yii.php. Если вы сделаете то же самое в своем файле, класс Yii уже будет найден.

Однако этого все еще недостаточно. Чтобы получить доступ к приложению Yii::$, вы должны создать объект Application, который нуждается в конфигурации. Это то, что делает последняя строка в web / index.php. Это учитывает все файлы конфигурации. После этого Yii::$app доступно.

То, чего вы хотите достичь, должно быть сделано по-другому. Ознакомьтесь с документацией по командам Yii.

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