Yii Framework Forum: несколько приложений в одном проекте - Yii Framework Forum

Jump to content

  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

несколько приложений в одном проекте Rate Topic: -----

#1 User is offline   xomaa 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 82
  • Joined: 17-January 09

Posted 26 February 2009 - 08:54 AM

Всем доброго дня!

Кто нибудь знает как правильно разделить приложение на две части : бэк-энд и фронт-энд???? Вот тут есть небольшое обсуждение по этому поводу http://www.yiiframew...12.html#msg4312 я бы хотел спросить это единственный способ?? И каким образом я смогу использовать модели одного приложения в другом???
0

#2 User is offline   KJedi 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 381
  • Joined: 19-October 08
  • Location:Nikolaev, Ukraine (Europe)

Posted 26 February 2009 - 09:01 AM

Если честно, не понятен смысл этого извращения :) Тот чудик какой-то странный, нафиг два логина? Ну если так уж хочется, можно определять, где находимся и логинить соответственно. Скажем, для показа логина -- два разных действия (хотя, думаю, можно и через одно замутить), а обработка логина - в одном и том же. А дальше, в зависимости от того, откуда пришел и перенаправлять.
Если делать как написано там, то использовать классы одного приложения в другом можно только если вручную их подгружать. Ну или можно перегрузить Yii autoload и подгружать автоматом со своим приложением.
Еще вариант - наследовать свой класс приложения и в нем реализовать свои отличия.

А можно узнать задачу, может есть более корректные решения?
0

#3 User is offline   xomaa 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 82
  • Joined: 17-January 09

Posted 26 February 2009 - 09:11 AM

Есть приложение, которое имеет админский интерфейс и полностью изолированный от него интерфейс пользователя (ну в принципе как всегда).

Т.е. пользователь должен ходить по урлу типа http://localhost/public

а админ должен ходить по урлу http://localhost/private

при этом и админ и пользователи должны обязательно пройти авторизацию.

Сейчас у меня есть просто 2 контроллера public и private.
0

#4 User is offline   rosko 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 211
  • Joined: 04-January 09
  • Location:Kiev, Ukraine

Posted 26 February 2009 - 09:22 AM

Думаю, ты на верном пути. Имхо, лучший путь - это создать контроллер, который бы управлял админским интерфейсом. Соответственно все модели данных и формы можно использовать сообща.
0

#5 User is offline   xomaa 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 82
  • Joined: 17-January 09

Posted 26 February 2009 - 09:35 AM

Согласен....но имея возможность разделить проект на составные части можно было бы добиться более логичного разделения кода. например для просмотра профиля можно было бы использовать следующие урлы
http://localhost/public/profile/show - для простого пользователя
и
http://localhost/private/profile/show - для админа

кстати этого можно добиться разделяя контроллеры по подкаталогам....Только вот что-то у меня не получилось этого сделать??
Поддерживает ли Yii разделение контроллеров по подкаталогам?

0

#6 User is offline   KJedi 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 381
  • Joined: 19-October 08
  • Location:Nikolaev, Ukraine (Europe)

Posted 26 February 2009 - 09:36 AM

Я думаю, можно просто делать контроллер для тех задач, которые им выполняются. Например, в пользовательской части пользователя создавать никто не будет. Он там регистрируется. И профиль редактирует. А список пользователей, их создание, удаление и т.п. делается в админской части.
Соответственно делаем так:
contollers/
  public/
      UserController.php
  private/
      UserController.php
  PublicController.php
  PrivateController

И пусть к контроллерам задавать как
index.php?r=public.user/register
index.php?r=private.user/create
Модели можно использовать везде, так как приложение одно.

Вариант №2
А зачем вам вообще админский контроллер? Для действий, которые делаются в админке просто ставьте интерфейс админиский и все. Доступ проверяйте через accessControl и все дела. Таким образом, в UserController.php будет и register и create, но с разными view. Юзер и не отличит. Особенно, если урлы перезаписывать с помощью CUrlManager, то вообшще ништяк

Вариант №3

Аналогичен тому, что был приведен в ссылке сначала, с той лишь разницей, что вовсе не обязательно ложить приложения в разные директории. Создай два конфига - для клиентской и для пользовательской части и две точки входа. Внимательно посмотри на индексный файл - там приложение создается и указывается конфиг. а ты указывай свой. И все дела. Посколько все в той же папке, то подгружать можно любые модели и контроллеры
0

#7 User is offline   KJedi 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 381
  • Joined: 19-October 08
  • Location:Nikolaev, Ukraine (Europe)

Posted 26 February 2009 - 09:39 AM

Quote

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

http://localhost/public/profile/show - для простого пользователя

и

http://localhost/private/profile/show - для админа

И зачем нужны лишние проблемы? Пусть заходят по одному и тому же урлу, но админ будет видеть другое. Это разве проблема? :)

Quote

кстати этого можно добиться разделяя контроллеры по подкаталогам....Только вот что-то у меня не получилось этого сделать??

Поддерживает ли Yii разделение контроллеров по подкаталогам?

Поддерживает, смотри топики:
http://www.yiiframew...opic,806.0.html
http://www.yiiframew...opic,268.0.html
0

#8 User is offline   xomaa 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 82
  • Joined: 17-January 09

Posted 26 February 2009 - 01:24 PM

Quote

Поддерживает, смотри топики:

http://www.yiiframew...opic,806.0.html

http://www.yiiframew...opic,268.0.html

Да спасибо! Просто думал что как в CI разделителем служит - "/" а оказалась "."
Остановлюсь на варианте с двумя каталогами для двух частей приложения, к тому же общие экшены можно повторно использовать, вынеся их в классы.
0

#9 User is offline   KJedi 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 381
  • Joined: 19-October 08
  • Location:Nikolaev, Ukraine (Europe)

Posted 26 February 2009 - 02:01 PM

Quote

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

Я думаю, это шибочное решение Ты модель из каталога сверху не подключишь, разве что определишь алиас для папки protected фронтенда в бекенда и наоборот и будешь с помощью него импортировать. Я думаю, если ты решил идти путем с двумя приложениями, лучше сделай просто две точки входа - frontend.php, backend.php. И напиши правила в .htaccess, чтобы выглядело как каталоги. Если сильно хочется HTTP-аутентификацию на админку так это можно и на один файл поставить.
Просто по моему вариант №3 у тебя минимальное количество телодвижений и копирования функционала.
Я сейчас у себя релизую вариант 1, возможно перейду на вариант 2, но у меня админка отделяется от проекта слабо.
0

#10 User is offline   xomaa 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 82
  • Joined: 17-January 09

Posted 27 February 2009 - 12:50 AM

Я, наверное, не совсем корректно выразился....Я имел ввиду что просто в рамках одного приложения для фронт и бэк частей  - сделаю разные подгаталоги для контроллеров (вариант 1).
0

#11 User is offline   Darmen 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 68
  • Joined: 28-February 09
  • Location:Astana, Kazakhstan

Posted 28 February 2009 - 11:25 AM

Quote

Я, наверное, не совсем корректно выразился....Я имел ввиду что просто в рамках одного приложения для фронт и бэк частей  - сделаю разные подгаталоги для контроллеров (вариант 1).


Имхо, будет повтор кода.
0

#12 User is offline   xomaa 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 82
  • Joined: 17-January 09

Posted 10 March 2009 - 01:32 PM

Да повтор кода будет - но только для контроллеров. Библиотеки (а при желании и экшены) - можно общими сделать.
0

#13 User is offline   Darmen 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 68
  • Joined: 28-February 09
  • Location:Astana, Kazakhstan

Posted 10 March 2009 - 01:41 PM

Было бы идеальным, если бы взяли концепцию, как у Symfony.
0

#14 User is offline   xomaa 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 82
  • Joined: 17-January 09

Posted 10 March 2009 - 02:20 PM

DARX, расскажи плз как сделано в symfony??? я где то читал что там тоже модели backend не доступны во  frontend....или не так??
0

#15 User is offline   Darmen 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 68
  • Joined: 28-February 09
  • Location:Astana, Kazakhstan

Posted 10 March 2009 - 02:24 PM

Привет еще раз, Андрей

В симфони можно делить проект на сколько угодно приложений:
apps:
- backend
- - actions
- - config
- - modules
- - templates
- - etc...
- frontend
- - actions
- - config
- - modules
- - templates
- - etc...
- another_one
- - actions
- - config
- - modules
- - templates
- - etc...

При этом, модели одни, доступны всем приложениям, они лежат в lib/model на уровне apps, то есть тут нету повтора кода для каждого из приложений. Но, конечно же, можно их и переопределить в папке lib/model для текущего приложения, если не ошибаюсь...

Сами же контроллеры лежат в actions.

Дармен
0

#16 User is offline   xomaa 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 82
  • Joined: 17-January 09

Posted 11 March 2009 - 12:52 AM

Дармен, спасибо за разъяснения!

На самом деле удобный принцип!
0

#17 User is offline   Darmen 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 68
  • Joined: 28-February 09
  • Location:Astana, Kazakhstan

Posted 11 March 2009 - 09:19 AM

Quote

Дармен, спасибо за разъяснения!



На самом деле удобный принцип!


Всегда пожалуйста :)
Принцип очень удобен, вот только почему в Yii так не сделают? Думаю, фреймворку цены бы не было...
0

#18 User is offline   maks 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 14
  • Joined: 01-February 09

Posted 11 March 2009 - 07:09 PM

Konstantin Mirin, я так понимаю, наиболее оптимальным является третий вариант, где мы создаем второй входной скрипт, допустим admin.php, указываем другой конфиг /protected/config/admin.php, в контролерах рулим пермишинами?
а как правильно должен выглядеть новый конфиг, если я правильно понял то там нужно переопределить представления, или?


0

#19 User is offline   dikoy 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 33
  • Joined: 11-April 09

Posted 29 April 2009 - 01:09 PM

тема старовата, но вложу пару своих мыслей :)

DARX, ты забыл указать, что в симфонии админский интерфейс редко кто генерит - скаффолдинг рулит.

тем кто не в курсе - в симфонии изначально заложена идея жесткого разделения пользовательской части (frontend) и админской (backend). не много приложений в одной структуре папок, а именно фронт и бэк. хотя ничто не мешает наклепать хоть десять двадцать тысяч миллионов приложений. честно говоря с трудом представляю себе цели и задачи такого проекта :).
так вот, создав модель и сгенерировав crud для пользовательской части, вы можете как угодно править темплейты, наводить красивость, вобщем делать все что душе заблагорассудится. ибо после генерации Crud получаете готовые к правке php файлы.

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

про повтор кода в симфонии - разные приложения и подразумевают под собой РАЗНЫЕ приложения, зачем использовать действия и модули одного приложения в другом - делай тогда плагин и пользуй.

честно говоря не понимаю в чем великая проблема и меньшее удобство в yii сделать разделенные приложения - хоть вон через модули, хоть разными контроллерами - выбирай, что удобнее в каждом конкретном случае. генратора админки, конечно, не хватает... поменял модель, почистил кеш, и ничего больше делать не надо... эх лепота :)

0

#20 User is offline   Digital God 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 178
  • Joined: 30-January 09

Posted 18 May 2009 - 06:30 AM

Да, темка устарела, но вопрос так сказать актуальный.
После долгих мучений пришел к выводу что оптимальный вариант (по крайней мере для меня) это с двумя точками входа... плюс еще можно прикрутить наследование собственных контроллеров, дабы "добавить админский функционал".. но вобщем-то вопрос не об этом :)

Quote

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


долго долбился с мануалом, на ум приходит или returlUrl или urlReferrer, но что-то ни то не другое не помогает..

как надо настроить авторизацию чтобы был 1 контроллер?
В конфиге бэкенда прописал 'loginUrl'=>'login.html', потом в конфиге фронтенда тоже самое прописал и создал правило 'login'=>'site/login'

открываю localhost/login.html - urlReferrer пустой, returlUrl равен index.php
открываю localhost/backend.php - перебрасывает на localhost/login.html - значения переменных теже...

в чем мой косяк? ???


или все-таки не ломать голову и сделать показ логина через 2 действия, а обработку в одном? хотя тож чето не понятно как...
0

Share this topic:


  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users