Кто нибудь знает как правильно разделить приложение на две части : бэк-энд и фронт-энд? Вот тут есть небольшое обсуждение по этому поводу http://www.yiiframew…12.html#msg4312 я бы хотел спросить это единственный способ?? И каким образом я смогу использовать модели одного приложения в другом
Если честно, не понятен смысл этого извращения Тот чудик какой-то странный, нафиг два логина? Ну если так уж хочется, можно определять, где находимся и логинить соответственно. Скажем, для показа логина – два разных действия (хотя, думаю, можно и через одно замутить), а обработка логина - в одном и том же. А дальше, в зависимости от того, откуда пришел и перенаправлять.
Если делать как написано там, то использовать классы одного приложения в другом можно только если вручную их подгружать. Ну или можно перегрузить Yii autoload и подгружать автоматом со своим приложением.
Еще вариант - наследовать свой класс приложения и в нем реализовать свои отличия.
А можно узнать задачу, может есть более корректные решения?
Думаю, ты на верном пути. Имхо, лучший путь - это создать контроллер, который бы управлял админским интерфейсом. Соответственно все модели данных и формы можно использовать сообща.
Согласен…но имея возможность разделить проект на составные части можно было бы добиться более логичного разделения кода. например для просмотра профиля можно было бы использовать следующие урлы
Я думаю, можно просто делать контроллер для тех задач, которые им выполняются. Например, в пользовательской части пользователя создавать никто не будет. Он там регистрируется. И профиль редактирует. А список пользователей, их создание, удаление и т.п. делается в админской части.
Соответственно делаем так:
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
Аналогичен тому, что был приведен в ссылке сначала, с той лишь разницей, что вовсе не обязательно ложить приложения в разные директории. Создай два конфига - для клиентской и для пользовательской части и две точки входа. Внимательно посмотри на индексный файл - там приложение создается и указывается конфиг. а ты указывай свой. И все дела. Посколько все в той же папке, то подгружать можно любые модели и контроллеры
Согласен....но имея возможность разделить проект на составные части можно было бы добиться более логичного разделения кода. например для просмотра профиля можно было бы использовать следующие урлы
Остановлюсь на варианте с двумя каталогами для двух частей приложения, к тому же общие экшены можно повторно использовать, вынеся их в классы.
Я думаю, это шибочное решение Ты модель из каталога сверху не подключишь, разве что определишь алиас для папки protected фронтенда в бекенда и наоборот и будешь с помощью него импортировать. Я думаю, если ты решил идти путем с двумя приложениями, лучше сделай просто две точки входа - frontend.php, backend.php. И напиши правила в .htaccess, чтобы выглядело как каталоги. Если сильно хочется HTTP-аутентификацию на админку так это можно и на один файл поставить.
Просто по моему вариант №3 у тебя минимальное количество телодвижений и копирования функционала.
Я сейчас у себя релизую вариант 1, возможно перейду на вариант 2, но у меня админка отделяется от проекта слабо.
Я, наверное, не совсем корректно выразился…Я имел ввиду что просто в рамках одного приложения для фронт и бэк частей - сделаю разные подгаталоги для контроллеров (вариант 1).
Я, наверное, не совсем корректно выразился....Я имел ввиду что просто в рамках одного приложения для фронт и бэк частей - сделаю разные подгаталоги для контроллеров (вариант 1).
В симфони можно делить проект на сколько угодно приложений:
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 для текущего приложения, если не ошибаюсь…
Konstantin Mirin, я так понимаю, наиболее оптимальным является третий вариант, где мы создаем второй входной скрипт, допустим admin.php, указываем другой конфиг /protected/config/admin.php, в контролерах рулим пермишинами?
а как правильно должен выглядеть новый конфиг, если я правильно понял то там нужно переопределить представления, или?
DARX, ты забыл указать, что в симфонии админский интерфейс редко кто генерит - скаффолдинг рулит.
тем кто не в курсе - в симфонии изначально заложена идея жесткого разделения пользовательской части (frontend) и админской (backend). не много приложений в одной структуре папок, а именно фронт и бэк. хотя ничто не мешает наклепать хоть десять двадцать тысяч миллионов приложений. честно говоря с трудом представляю себе цели и задачи такого проекта .
так вот, создав модель и сгенерировав crud для пользовательской части, вы можете как угодно править темплейты, наводить красивость, вобщем делать все что душе заблагорассудится. ибо после генерации Crud получаете готовые к правке php файлы.
если же вы генерируете админский модуль, вы получаете заглушку для экшенов модуля и некий файл с правилами генерации отображаемой части, все остальное при рендеринге делает сам симфони. т.е. вы в конфиге пишете как хотите, чтобы отображался ваш модуль, а симфонии при отрисовке выполняет ваши пожелания. это значительно удобнее, чем поддерживать для разных приложения для одной схемы.
про повтор кода в симфонии - разные приложения и подразумевают под собой РАЗНЫЕ приложения, зачем использовать действия и модули одного приложения в другом - делай тогда плагин и пользуй.
честно говоря не понимаю в чем великая проблема и меньшее удобство в yii сделать разделенные приложения - хоть вон через модули, хоть разными контроллерами - выбирай, что удобнее в каждом конкретном случае. генратора админки, конечно, не хватает… поменял модель, почистил кеш, и ничего больше делать не надо… эх лепота
Да, темка устарела, но вопрос так сказать актуальный.
После долгих мучений пришел к выводу что оптимальный вариант (по крайней мере для меня) это с двумя точками входа… плюс еще можно прикрутить наследование собственных контроллеров, дабы “добавить админский функционал”… но вобщем-то вопрос не об этом
Quote
Ну если так уж хочется, можно определять, где находимся и логинить соответственно. Скажем, для показа логина -- два разных действия (хотя, думаю, можно и через одно замутить), а обработка логина - в одном и том же. А дальше, в зависимости от того, откуда пришел и перенаправлять.
долго долбился с мануалом, на ум приходит или returlUrl или urlReferrer, но что-то ни то не другое не помогает…
как надо настроить авторизацию чтобы был 1 контроллер?
В конфиге бэкенда прописал 'loginUrl'=>'login.html', потом в конфиге фронтенда тоже самое прописал и создал правило 'login'=>'site/login'