Я делаю пользовательский компонент (геттер).
Мой компонент 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
,
Почему я получаю сообщение об ошибке «Класс не найден»?
Вы должны сделать больше, чем просто сказать 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.
Других решений пока нет …