2015-03-02 2 views
1

Я создаю пользовательский компонент (getter).Вызов пользовательских компонентов в 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.

namespace app\cmd; 

use Yii; 

echo "Import ok<br>"; 

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

echo "Script end"; 

Результат выполнения сценария является «Импорт ОК» и Fatal error: Class 'Yii' not found.

Почему возникает ошибка 'Class not found'?

+0

Вам не хватает require_once ('путь/to/yii/framework/yii.php')? – unixmiah

+0

В моем корне проекта у меня есть файл "yii". Не "yii.php". Я стараюсь с require_once и не работаю. – user3782779

ответ

3

Вы должны сделать больше, чем просто сказать 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 :: $ app, вам нужно создать объект приложения, для которого требуется конфигурация. Это то, что делает последняя строка в web/index.php. При этом учитываются все файлы конфигурации. После этого доступен Yii::$app.

То, что вы хотите достичь, должно быть сделано по-другому. Посмотрите на documentation about Yii commands.

+0

Как "(новый yii \ web \ Application ($ config)) -> run();" является блокирующей функцией. Код после этого вызова не запускается. – user3782779

+0

Нет, я не думаю, что он блокируется. Но не пытайтесь так! Чего вы хотите достичь? – robsch

+0

Мне нужен URL-адрес: «mydomain/file.php», которые получают запрос POST и вызывают мой пользовательский компонент для обработки. – user3782779