Модель ссылок в Kohana
я хочу создать меню ссылок, вывод которых должен будет зависеть от текущей роли пользователя (и плюс общие ссылки). Роль через стандартный Model_Auth_Role, а дальше возникает проблема: связь по идее должна быть многие-ко-многим через третью таблицу. Я создал класс Model_Links, прописал у него protected $_has_many = array('roles' => array('model' => 'role', 'through' => 'roles_links'),); но непонятно, во-первых, надо ли мне менять встроенный класс Role и писать у него 'links' => array('model' => 'links', 'through' => 'roles_links'), во-вторых, надо ли (и как, если надо) описывать класс Roles_Links (потому что по аналогии с roles_users я такого класса не нашёл) и соответствующую таблицу, а в-третьих, как быть с незалогиненными пользователями (которым Role по идее не присваивается).
Заранее спасибо.
У незалогиненного пользователя по идее Роль должна быть = 0, или Guest, если словами (но Роль всё равно надо присваивать).
потому что нет гарантии, что id роли не будет меняться)) допустим есть роль 1 - просто юзер, 2 - админ, 3 - группа_1, 4 - группа_2, показать ссылку_1, например, надо группе_1 и админу, ссылку_2 - юзеру и админу, ссылку_3 - админу и незарегенным.. 1 и 2 меняться вряд ли будут, а вот 3,4 и т. д. - вполне, причём "не больше" тут просто не подходит, "не меньше" тоже.. тут можно без третьей таблицы записывать в какое-нибудь поле роли через запятую, но с ними тогда работать сложнее.. роль может удалиться, потом снова добавиться, id её получится больше, а условиями больше или меньше мы средние роли никак не уберём
у незалогиненного роль NULL если получать через Auth, но в базе ролей её нет, то есть JOIN'ом я её не получу..
http://kohanaframework.org/index#community
так как вопрос заязан на конкретный фреймворк.
я думаю тебе лучше обратиться сюда
так как вопрос заязан на конкретный фреймворк.
уже написал, правда в русскоязычной ветке)) но похоже, что прийдётся и на английском писать
я там
Часто в такие моменты думаю, реально ли ускоряет работа на фрейворке время разработки или нет...
Я бы не сказал, что он (фреймворк) сильно может ускорить время разработки, если случай сложнее "написать сайт-визитку для компании за неделю", но он избавит от многих костылей и меньше прийдётся проводить рефакторинг в будущем.
Но вот что бы так чисто что-то запилить на фрейворке и прикинуть ускорил бы он меня не приходилось. Была одна попытка в самом начале когда пытался сделать каталог для инет магаза на Zend. Но ни чего не получилось, он оставил о себе только отрицательно впечатления в контексте задачи "сделать сайт". Поэтому сделал врукопашную на PHP+MySQL заведя под XSLT шаблонизатор. Возможно был молод и не постиг дзен Zend-а?... Но XSLT то мне раскурить и применить получилось...
До сих пор порой пытаюсь выяснить, хоть кто-то может однозначно сказать, что запилка проекта на фрейворке его ускоряет в плане затрачиваемого времени. Пока как-то выходит, что не очень.
С Zend'ом я тоже сталкивался на уровне потрогать, но знаю, что у товарища в реальном проекте, когда он был готов уже на 80%, было решено отказаться от зенда, который использовался как драйвер для собственной ORM, и переписать всё ручками.
Вообше лично я реально использую в фреймворке Kohana только ORM, которая, имхо, наиболее близка к идеальной на мой взгляд python'овской sqlAlchemy. Ни в одном другом фреймворке, ни в отдельных ORM-ах не встречал ничего похожего. Но sqlAlchemy юзает магию питона и форкнуть его не получится. Хотя мысли такие были. Из остального только что шаблонизатор, который можно написать за пару часов и забыть про него, ну и иерархическая файловая модель, которая завязана на __autoload и подгружает твои классы.
А в целом я чуть выше написал, имхо, но повторюсь: фреймворк не особо сильно ускорит время разработки, но фреймворк позволит ускорить работу сайта за счёт использования проработанной магии языка и прочих подобных унифицированных вещей, сократив таким образом время на низкоуровневый рефакторинг на поздних стадиях разработки. Ну и не PHP единым, Django для Python'а или Rails для Ruby ускорят разработку однозначно, просто потому, что в противном случае вам прийдётся реализовывать почти всё, вплоть до ручной отправки хедеров или вообще собственного HTTP-сервера))
Цитата: MrXaK
но фреймворк позволит ускорить работу сайта
Таки нет. Это могу утверждать абсолютно однозначно. В тех кусках где производительность критична фрейворки не живут. Потому как все эти уровни абстракции тянуть нехилый порой оверхед. В общем ситуация как и с денормализацией базы.
Это смотря относительно чего сравнивать. Если сравнивать с решением, которое вы напишите сначала, то с 90%ной вероятностью фреймворк будет работать быстрее) Если сравнивать с решением после проведения всех оптимизаций и под конкретную задачу - то нет. Но сколько вы потратите на такую оптимизацию - уже другой вопрос.
Цитата: MrXaK
Если сравнивать с решением, которое вы напишите сначала, то с 90%ной вероятностью фреймворк будет работать быстрее
Нет, не будет. Если одну и туже задачу решить на "чистом" PHP и фрейворке, то "чистое" решение будет оптимальнее. И работать будет чуть шустрее, и ОЗУ потребует меньше. Фрейворк это элемент призванный привнести некий слой абстракции и как всякая подобная система это имеет свой оверхед. Единственное на чем может дать просадку вариант с натвным кодом, это гавнокод, но гавнокодер может испаганить все даже используя фрейворк.