<rmcreative>

RSS

YiiBoilerplate

10 августа 2012

CleverTech, где я ранее работал tech lead-ом, выложили на github шаблон для новых проектов, который используется внутри компании.

Начали собирать шаблон в прошлом году я, Jeffrey Winesett и многие другие разработчики. Закончил и оформил Antonio Ramirez.

Для простых проектов шаблон немного сложноватый, но для проектов побольше сильно упрощает жизнь. Используются идеи, которые описал Qiang в wiki. Главная полезность — деплой скрипт для смены окружений и использования локальных конфигов.

Пользуемся

Комментарии RSS

  1. №6547
    Denis Kuznetsov
    Denis Kuznetsov 10.08.2012, 14:59:05

    А где ты сейчас работаешь, если не секрет?

  2. №6548
    Denis Kuznetsov
    Denis Kuznetsov 10.08.2012, 15:04:52

    Пардон, затупил, читал же про stay.com

  3. №6549
    kosenka
    kosenka 10.08.2012, 15:19:48

    Может я чего-то не понимаю, но почему такая структура? Чем она хороша/нужна/полезна?

  4. №6550
    Sam
    Sam 10.08.2012, 16:33:15
    1. Не нужно менять конфиг при работе на каждом сервере и локально. Можно задать конфиги для каждого окружения и приложения. Backend и Frontend наследуются от Common.
    2. Удобно организовывать общие модели в Common и использовать как в Backend, так и во Frontend.
    3. Запросто вынести админку на отдельный домен и сделать для неё другую авторизацию.
  5. №6552
    metalguardian
    metalguardian 10.08.2012, 17:05:26

    наконец то появился пример с использованием этой архитектуры - развеял оставшиеся вопросы.

    вопрос по использованию global.php: нормально ли делать так? я пробовал использовать такой способ в начале разработки на yii и мне настоятельно рекомендовали отказаться от этой затеи.

  6. №6553
    Sam
    Sam 10.08.2012, 18:41:53

    metalguardian, нормально. Почему нет?

    Конечно, если пишете какие-то расширения и выкладываете в народ, такое делать не стоит. Но в своём-то проекте кто запрещает?

  7. №6556
    Alex.Sh
    Alex.Sh 10.08.2012, 19:52:25

    Отличная новость

    А можно ли как-то применить структуру на шаред хостнгах, где нет доступа до конфигов сервера?

  8. №6558
    Sam
    Sam 10.08.2012, 20:21:51

    Нет.

  9. №6559
    metalguardian
    metalguardian 10.08.2012, 21:00:24

    почему? можно. только надо вынести www. поменяются только пути к конфигам и фреймворку

  10. №6560
    Sam
    Sam 10.08.2012, 22:11:41

    Тут предполагаются два разных вебрута для frontend и backend.

  11. №6563
    metalguardian
    metalguardian 11.08.2012, 1:33:25

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

  12. №6564
    Anton
    Anton 11.08.2012, 12:38:39

    Т.е. 2 различных сервера 1 под фронт другой под бек ?

  13. №6565
    Anton
    Anton 11.08.2012, 14:19:01

    Всё разобрался прочитав Коммент

    Вот только обилие конфигов смущает

    Вроде же 1 production другой development, а там всяких ...

  14. №6573
    Богдан
    Богдан 14.08.2012, 12:23:16

    Я ранее использовал такое разделение. Сейчас использую такое.

    assets
    protected
    . . . . backend
    . . . . . . . . controllers
    . . . . . . . . views
    . . . . components
    . . . . config
    . . . . extensions
    . . . . frontend
    . . . . . . . . controllers
    . . . . . . . . views
    . . . . models
    . . . . runtime
    themes
    index.php
    admin.php

    также в папках backend и frontend храню уникальные для фронтенда и беккенда библиотеки. В папке config находятся конфиги backend, frontend,main и конфиг особенный для данного домена (на локалке будет localhost). Теперь. Если мы заходим через index.php то подключается main.php, через CMap::mergeArray объединяется с frontend и мержиться с конфигом домена (в нашем случае с localhost). И главное в frontend конфиге переопределяется папка для контроллеров и вьюшек

    define('DS', DIRECTORY_SEPARATOR);       'controllerPath'=>dirname(__FILE__).DS.'..'.DS.'backend'.DS.'controllers',
    'viewPath'=>dirname(__FILE__).DS.'..'.DS.'backend'.DS.'views',

    таким образом для фронтенда и беккенда у нас общие модели, расширения, компоненты, библиотеки и т.д. В тоже время мы можем размещать библиотеки и конкретно для беккенда и фронтенда в их папки. И главное что мы можем использовать как и раньше ext.extensionName.classMame. Для моих целей этот вариант разделения сочетает преимущества разделения YiiBoilerplate и удобства и простоты обычного варианта.

  15. №6583
    Alex.Sh
    Alex.Sh 22.08.2012, 1:48:18

    Если приложения под одним доменом - фронт, бэк и мобильный. Для фронта и мобильного нужна общая авторизация ,"remember me" и желательно учесть добавление авторизации через сервисы.

    Как примерно это реализуется, может кто сталкивался?

  16. №6801
    porcelanosa
    porcelanosa 05.10.2012, 0:27:19

    Вот есть у меня папка домена на хостинге или там сервере. htdocs/mysite.ru/

    Я заливаю туда то что они предлагают. Мне надо что бы из корня редиректилось на frontend/www/ А к примеру из mysite.ru/back на backend/www

    пыталась сделать .htaccess

    RewriteEngine on
    # forward it to frontend index.php
    RewriteRule . /frontend/www/index.php
    

    Но почему то не работает - вообще это правильно? Или есть какие-то другие методы?

  17. №6802
    porcelanosa
    porcelanosa 05.10.2012, 2:03:37

    RewriteEngine on RewriteBase / RewriteCond %{HTTP_HOST} ^boiler RewriteRule (.*) /frontend/www/$1 [R=301,L]

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

    типа boiler/frontend/www/?%D0%B0%D0%B0%D0%B0=000

  18. №6803
    porcelanosa
    porcelanosa 05.10.2012, 2:37:35

    кажется поняла -надо править конфин апача - Virtual Hosts - а другого выхода нет?

  19. №6804
    Sam
    Sam 05.10.2012, 12:25:22

    porcelanosa, скорее всего нет.

  20. №6881
    krasavcheg
    krasavcheg 22.10.2012, 21:31:18

    to:metalguardian Мог бы ты на примере показать как можно под шаред хостинг конфиг прописать с использованием поддомена?

    Или может ты сем можешь что-то подсказать?

    Буду благодарен!

  21. №6882
    metalguardian
    metalguardian 22.10.2012, 21:58:17

    заливаем приложение как есть.

    в cpanel (директадмине) создаем поддомен для бекэнда (например, admin). корневой папкой указываем ..../backend/www/ это довольно просто.

    с фронтом немного сложнее: тут нужно или создавать отдельный поддомен (например, front) или выносить каталог www из приложения. первый вариант - делаем тоже что и для админки. второй вариант: в index.php выставляем правильные пути к конфигу и приложению.

    надеюсь понятно объяснил

  22. №6883
    krasavcheg
    krasavcheg 22.10.2012, 22:18:22

    Спасибо за такой быстрый ответ!

    Вроде понял - только проблема хостинг мастерхост и тут нет возможности выбора корневой папки

    Даже не знаю что делать

  23. №7296
    krasavcheg
    krasavcheg 22.12.2012, 15:40:37

    Еще 1 вопрос - а куда собственно файл robots.txt поместить? в папку frontend/www или frontend ?

  24. №7297
    porcelanosa
    porcelanosa 22.12.2012, 15:55:47

    конечно в frontend/www - ведь это публичная папка - а доступ к остальным файлам в папке fronend должен быть закрыт извне.

  25. №7394
    Vit
    Vit 17.01.2013, 5:02:00

    Возникла такая проблема. Сайт мультиязычный. В frontend лежит модель User, attributeLabels() указаны через Yii::t() Папка messages лежит в frontend. Необходимо использовать эту модель в backend. Сделал импорт модели в конфиге backend, модель загрузилась, но attributeLabels() в форме не переводятся на русский язык. В конфиге в одном и втором выставлен язык приложения русский. Как возможно заставить работать Yii::t() ?

    Буду очень признателен за ответ.

  26. №7397
    Sam
    Sam 18.01.2013, 0:52:16

    Надо поменять вот это свойство через components конфига на путь к файлу в frontend.

  27. №7402
    Vit
    Vit 18.01.2013, 4:25:32

    Александр, спасибо. Поменял - все заработало.

  28. №7658
    slavik2308
    slavik2308 06.03.2013, 23:27:33

    А где в этой структуре папок хранить ресурсы (изображения , файлы и т. д.)? Доступ к ним нужен и back-приложение и front-приложение. Может быть в common, на пример в папке resources? Публиковать их с помощью menager assets?

  29. №7659
    Sam
    Sam 07.03.2013, 13:37:28

    Да, так вполне нормально.

  30. №7660
    porcelanosa
    porcelanosa 07.03.2013, 23:57:22

    А я сделала домен i.site.ru и на сервере прописала DocumentRoot к папке common/i/ Возможно это неправильное решение, но теперь я всё загружаю туда и документы и изображения. В конфиге сделала параметр dir=>array( 'base' => '/../../common/i/', //серверный путь web => 'i.site.ru/', )

  31. №7985
    S c
    S c 21.05.2013, 1:02:59

    А есть ли возможность использовать общие модули?

  32. №7987
    porcelanosa
    porcelanosa 22.05.2013, 7:46:43

    Да есть, но, к сожалению, YiiBooster теперь развивается только комьюнити на GitHub У авторов новый проект - yiinitializr.2amigos.us/ Не знаю, хорошо это или плохо, он вроде бы более продвинутый, но по-моему стал еще сложнее для внедрения в простые проекты. Точнее я с ним, в отличии от YiiBooster еще не разобралась.

    Но, имхо, ни то ни другое для простых проектов не подходит. многие виджеты bootstrap, входящие в YiiBooster - изначально взяты из проекта YiiBootstrap - который продолжает развиваться. И у его автора есть тоже свой проект www.yiiframework.com/wiki/446/kickstart-development-with-yii-app/ Следующий проект, попробую на нем делать. Хотя там тоже используется Composer - в котором я не в зуб ногой. Но похоже надо за это браться ;-)

  33. №7999
    sam_milkin
    sam_milkin 25.05.2013, 12:31:14

    Я Composer'ом научился пользоваться благодаря Christoffer Niska (Crisu83) и его Yii-app. Многие его идеи и заимствовал Antonio Ramirez (tonydspaniard). В его YiiBoilerplate мне как раз не нравилось, то что они пользуются своим php-скриптом, а не Composer'ом. Yiinitializr очень интересный и хорошо развивающийся проект. Кстати там у них сейчас 3 шаблона (для простых, средних и сложных проектов). Простой шаблон как раз похож на Yii-app.

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.