Pull to refresh

Comments 15

Не надо изобретать велосипед, и учить этому других.

Если вам нужны несколько сайтов, зависимых друг от друга (допустим, admin.example.com, crm.example.com, mail.example.com, etc), то делаете каждый подсайт в виде модуля и указываете роутинг с нужного домена в конфиге (см. http://nickbartlett.com/yii-multisite-point-domain-to-modules/ ). При этом, webroot с каждого домена идет на одну и ту же папку.

Если же сайты не должны быть зависимы друг от друга, то вообще в разные проекты нужно разделять всё.
Вы совершенно верно мыслите, с точки зрения человека, которому доступен личный сервер.
Но, находясь на урезанном хостинге и с желанием экономии — будет слегка напряжно реализовать все красиво.
На счет модулей — я сразу оговорил, что предлагаю вариант без оных. Также есть отзыв пришедшего программиста в нашу команду, который сказал: «О, так понятнее и проще, чем на модулях»
А сайты… В нашем случае это можно сравнить с фрилансом. Когда есть сторона работодателя и соискателя. У которых пересекаются модели, методы, данные, компоненты и т.д.

Велосипед буду изобретать, т.к. только так делаются какие-то прорывы из консерватизма.
Чтоб учить, необходимо сказать: «делайте так». Я лишь предложил альтернативу, которую внедрили в моем проекте, и которая лично мне приглянулась.
Девяти добавлениям в избранное, видимо, также.

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

А Вас не смущает, что сам фреймворк это, по сути, иерархия модулей и Ваша реализация всего лишь попытка объединить два базовых модуля? На мой взгляд это не велосипед, а введение в заблуждение новичков. Для сквозной доступности реализуйте модели в common/models/ для шаблонов используйте темы.


Чтобы добавить ещё один сайт без чуда на свитчах достаточно сделать копию одного из базовых модулей с переименованием директории, например frontend -> api и добавить в файл common/config/bootstrap.php строчку:


Yii::setAlias('@api', dirname(dirname(__DIR__)) . '/api');

Так же сделать копию environments/frontend/ -> environments/api/ и во всех файлах environments/api/ заменить frontend на api. В файле environments/index.php в массиве сделать копию узлов frontend в Production и Development для api. Далее в корне проекта запускаете файл php ./init.php и не нужно никаких велосипедов. Причём это никак не усложняет всю логику и добавлять Вы можете сколько угодно базовых модулей (сайтов).


Хотите чтобы была единая директория для upload? Добавьте алиасы в common/config/bootstrap.php:


Yii::setAlias('@uploads', dirname(dirname(__DIR__)) . '/uploads');
Yii::setAlias('@webUploads', '/uploads');

И используйте его при обращении к файлам
Просто нужно изучать инструменты с которыми работаешь, а не сочинять "кривого монстра" на пустом месте

Если вы имели в виду, «как мне это решение», то если я верно понял — то интересное решение. Более быстрая настройка и неизменная структура файлов
Из плюсов моего варианта — более удобно, если, ни дай бог, два или более приложений должны иметь общие ресурсы: картинки, шрифты.

Я выше отметил, что у нас сильно было завязано на 2 приложения. У них было много общего. Т.е. как предлагали — можно было сделать через модули. Попробовали сделать так — лично нам понравилось. Штатный вариант теперь чет не нравится)
Это только Yii под backend и frontend понимает админку и часть для обычных пользователей соответственно?
Или это общепринято? :)

Я чет всю жизнь под первым понимал сервер-сайд, под вторым — отдача html + статики. :)

С учетом общих файлов статики, данное решение более удобно применять для поддоменов. :)
Хотя можно статику разнести по папкам доменов, а php натравить на:
а) общий файл;
б) разные файлы, но иметь предложенную структуру папок.
Ну второй идет в двух вариантах: advanced с такой структурой и basic. Там по другому

А текущее решение — не обязательно применять))) Его еще можно перекроить 10 раз. Мне, до написания этой статьи, просто было немного не понятно как этот Yii «склеивается». Попутно разобрался и избавился от мандража, что перекроить Yii — это страшно)

Тут стоит понимать что yii2-app-advanced и yii2-app-basic — это не окончательные варианты структуры проектов. Это шаблоны от команды фреймворка, как можно организовать структуру на одну и на несколько точек входа. Кому подходит, тот пользуется готовым. Кому нет — делает свой шаблон.


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


composer create-project --prefer-dist username/yii2-app-cool .
Термины «backend» и «frontend» имеют значение в зависимости от контекста. Это может быть админка/сайт, сервер/браузер, apache/nginx и т.д. Это просто обозначение 2 сторон канала передачи информации.
UFO just landed and posted this here
Интересное решение. Попробуйте на github опубликовать ;)
Лично я склоняюсь больше к использованию Yii-basic и модульности. Поскольку кажется, что yii advanced склоняет мешать логику в разных частях приложения, делая проект тем самым более запутанным. Лучше делать несколько проектов со своими направлениями, чем один с разными приложениями.
Интересное решение. Попробуйте на github опубликовать ;)

Спасибо. Да там выше предложена ссылка, где эта задача решается на уровне одного только веб-сервера с помощью реврайтов. Можно сказать, что моя «миссия» уже выполнена другим человеком))))
Если подходит вариант с поддиректорией («mysite.com/» и «mysite.com/admin»), то тут есть хорошее решение. Переносим папку «backend/web» в «frontend/web/admin» и корректируем пути в «admin/index.php».
Следует понимать, что Yii2 можно законфигурировать почти произвольным образом. Есть понятие входного скрипта, которые подключает нужные конфиги из папочек. Соответственно, перенастроив этот входной скрипт можно организовать себе произвольную структуру проекта. Но всё-же смешивать разные проекты в одном — это bad design, и оправдывать это только хостингом, при условии того, что найти недорогой VPS очень даже легко.
Как жаль, что есть люди, знающие про Yii2 и не знающие про display_errors
Sign up to leave a comment.

Articles