Где разместить глобальные переменные в Yii2, подобные YII_DEBUG и YII_ENV

Я создаю веб-сайт с «субдоменом» под названием marketplace. поэтому URL-адрес будет marketplace.sample.com. Я использую расширенное приложение Yii2 и добавил следующий код в свой index.php, расположенный в frontend/web.

defined('MARKETPLACE') or define('MARKETPLACE', preg_match('/^marketplace/', $_SERVER['HTTP_HOST']) === 1 ? true : false);

Это работает в моей среде, однако я только что понял, что файл index.php находится в файле .gitignore в Yii2, потому что этот файл создается сценарием инициализации, и поэтому изменения в нем будут перезаписаны при запуске init.

В любом случае, поэтому возникает вопрос: куда мне поместить этот код, чтобы его можно было зафиксировать и поделиться с остальной командой разработчиков, а затем запустить его в производство, когда код будет отправлен?

Я попытался поместить этот код в common/config/params.php, но затем, когда я пытаюсь получить доступ к переменной, чтобы определить, какой маршрут использовать, я не могу, потому что приложение Yii не было инициализировано, когда интерфейс /config/main. php запускается, и я получаю сообщение об ошибке, что я пытаюсь получить доступ к свойству, не являющемуся объектом.

/интерфейс/config/main.php

'defaultRoute' => MARKETPLACE ? 'marketplace' : 'site',

/frontend/config/main.php (вместо параметра)

'defaultRoute' => Yii::$app->params['marketplace'] ? 'marketplace' : 'site'

этот второй дает ошибку, что я пытаюсь получить доступ к свойству, не являющемуся объектом.


person paviktherin    schedule 16.04.2015    source источник
comment
почему бы не добавить еще один файл (например, env.php) и не потребовать его в index.php, чтобы он не попадал в .gitignore.   -  person apoq    schedule 16.04.2015
comment
Я не могу ничего добавить в index.php и поделиться им с другими разработчиками, потому что он игнорируется. Поэтому я не могу добавить в него требование по той же причине, по которой я не могу добавить определение, которое у меня есть выше.   -  person paviktherin    schedule 16.04.2015


Ответы (2)


В каталоге:

 common/config 

вы можете использовать файл bootstrap.php для вставки нужного вам кода. Этот файл выполняется на этапе запуска и не указан в .gitignore.

Таким образом, вы можете назначить константу MARKETPLACE, которая будет распространять код при использовании GIT.

person scaisEdge    schedule 16.04.2015
comment
Это не дает ответа на вопрос. Чтобы подвергнуть критике или запросить разъяснения у автора, оставьте комментарий под его публикацией. - person Tamil Selvan C; 16.04.2015
comment
Это (я думаю) правильный ответ, а не критика или запрос разъяснений от автора. bootstrap.php — это первая часть выполняемого кода, она не находится внутри файла .gitignore, и я думаю, что это подходящее место для вставки необходимого кода. - person scaisEdge; 16.04.2015
comment
Ответ не имеет для меня никакого смысла. Это может быть связано с опечатками и нелогичной структурой вашего ответа. Возможно, вы захотите улучшить свой ответ. - person Mark Rotteveel; 16.04.2015
comment
@scaisEdge Большое спасибо! Это именно то, что мне нужно. Для других, которые не следуют этому, я добавил код, который я поместил в файл /frontend/web/index.php, вместо этого в файл /common/config/bootstrap.php. defined('MARKETPLACE') or define('MARKETPLACE', preg_match('/^marketplace/', $_SERVER['HTTP_HOST']) === 1 ? true : false); Это позволяет коду, определяющему, какой контроллер установить в качестве маршрута по умолчанию, работать во всех средах, включая производственную. - person paviktherin; 17.04.2015

Я не знаю, является ли это лучшей практикой для того, чего вы хотите достичь, но вы можете предоставить новую среду инициализации для ./init

Папка environments содержит папки dev и prod, которые содержат все файлы, не контролируемые версиями и установленные на ./init (соответственно для параметров 1) Development и 2) Production). Еще немного о папках среды здесь.

Например, предположим, что вы хотите создать «индивидуальную» версию среды разработки и изменить скрипт входа в интерфейс.

Вы скопируете папку environments/dev в environments/custom и настроите там файл environments/custom/frontend/web/index.php.

Затем добавьте следующее к environments/index.php :

'Custom' => [
        'path' => 'custom',
        'setWritable' => [
            'backend/runtime',
            'backend/web/assets',
            'frontend/runtime',
            'frontend/web/assets',
        ],
        'setExecutable' => [
            'yii',
        ],
        'setCookieValidationKey' => [
            'backend/config/main-local.php',
            'frontend/config/main-local.php',
        ],
    ],

Добавьте и зафиксируйте свои изменения, и с этого момента у вас должна быть новая опция 3) Custom, когда вы ./init и вы и ваши разработчики сможете использовать ее для инициализации своих приложений.

PS: я не проверял это, но я думаю, что это должно работать (если не требуется только небольшая настройка)

person Pomme.Verte    schedule 17.04.2015
comment
Я думаю, что это сработает, но это кажется излишним для того, что мне нужно было сделать. На самом деле ответ был предельно прост. Мне просто нужно было переместить код из /frontend/web/index.php в файл /common/config/boostrap.php. Я буду иметь это в виду, потому что это может очень пригодиться в будущем. - person paviktherin; 17.04.2015