2015-06-03 4 views
3

Я пишу приложение, которое запускается из браузера. Однако некоторые функции модели также вызывается с консоли yii2. Поэтому я получаю ошибки при попытке доступа к переменным, установленным в графическом интерфейсе.Как я могу узнать, находится ли я в режиме консоли?

Можно ли определить, в каком режиме я нахожусь? Есть ли какая-либо переменная среды автоматически, или я должен просто установить некоторую переменную сеанса в консольном приложении, чтобы указать состояние?

Спасибо заранее,

Martin

ответ

9

Вы можете использовать

if(is_a(Yii::$app,'yii\console\Application')) 

для консоли, и

if(is_a(Yii::$app,'yii\web\Application')) 

для веб-сайтов.

1

Yii2 предлагает ряд различных классов для приложений console и для типов web. В дополнение к этому разделению режима работы классов существует также набор правил, регламентирующих организацию кода приложения. Первым, фундаментальным является уважение предоставления информации о объекте модели MVC, просмотр интерфейса управления с пользователем и, наконец, контроль над ролью координации между ними. В вашем случае кажется, что часть кода работает в консоли, но относится к классам, которые предоставляют веб-интерфейс. Вероятно, потому что в некоторых моделях класса были введены функции с HTML или другим кодом, которых не должно было быть. Если вам нужно два отдельных приложения должны точно отдельные приложения, которые используют тип управления

yii\console\Controller 

и другой, который использует тип контроллера веб

yii\web\Controller. 

Очевидно классы модели будут общими и, благодаря отдельному контроллеру, быть обязательно вызовите View соответствующим типу используемого пользовательского интерфейса. Надеюсь, это может быть полезно.

1

По умолчанию для консоли:

Yii::$app->id == 'basic-console' 

И для веб-приложения:

Yii::$app->id == 'basic' 

Yii::$app->id хранит идентификатор нагруженных Params конфигурации. По умолчанию для консольного приложения это 'basic-console' и для веб-приложений это 'basic' (определено в файле конфигурации)

4

Существует более простой способ, чтобы понять это, не проходя Yii объектов

if (php_sapi_name() == "cli") { 
    return; 
} 

... и это работает для всех PHP скрипты ... и это легче

7

Правильный вариант

Yii::$app->request->isConsoleRequest