Условно разрешить функциональность / визуализацию представлений в MVC?

#php #model-view-controller

#php #модель-представление-контроллер

Вопрос:

Я использую базовый шаблон MVC (настроенную версию https://github.com/panique/php-mvc ) для моего PHP-приложения.

Я не уверен, как правильно обрабатывать подобный сценарий:

Допустим, мое приложение будет использоваться 2 разными компаниями. Каждая компания хочет иметь определенные функциональные возможности. Компании будут использовать некоторые основные функциональные возможности. Также мне нужно управлять привилегиями пользователей в каждой компании (администратор, сотрудник и т. Д.).

Моя цель — иметь «модули» (конкретные функциональные возможности — панель управления, страница профиля, …) и загружать их условно для каждой компании зависит от привилегий пользователя.

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

Я немного погуглил и нашел такие вещи, как ACL и Decorator, но я думаю, что это не то, что я ищу.

Каков наилучший способ для этого случая?

Заранее спасибо.

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

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

2. Я новичок в MVC, но мне не нужны конкретные примеры кода и т. Д. здесь. Мне просто нужно указать правильное направление :).

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

4. Возможно, и то, и другое. Мне непонятно, как использовать одно приложение MVC для 2 компаний. Нравится myapp.com будет основным сайтом. Тогда я хотел иметь что-то вроде myapp.com/company1 и myapp.com/company2 . У каждой компании должна быть своя база данных и разные «модули», которые будут отображаться после входа в систему. Я также хочу, чтобы функциональность этих модулей была ограничена ролью пользователя в компании.

5. Да, широкий вопрос. Если вы хотите, свяжитесь со мной по моей электронной почте contact@alexkvazos.com . Я могу помочь вам лучше.

Ответ №1:

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

Для начала вам нужно добавить одну часть URL верхнего уровня домена (основную папку или поддомен), затем извлечь ее как название компании / псевдоним / идентификатор из запроса url ($ _GET) и использовать ее как переменную для загрузки правильной записи config — db (по крайней мере), возможно, активированных модулей (еслине хранится в БД), персонализированный просмотр (префикс файла / имя папки) и т. Д. Все сводится к небольшому .htaccess и улучшению фреймворка в части загрузки конфигурации (приложения) (переменный путь). Остальное просто написание полноценного рабочего приложения для одной гипотетической компании со всеми активированными модулями 🙂

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

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

1. Хорошая ли идея создавать вложенные папки для каждой компании и помещать в каждую из них папки models, views, controllers? И создать, например, «общую» папку для общих модулей?

2. @networ — Мое понимание проблемы заключалось в том, что все приложение (модели, представления и контроллеры) является компонентом, который должен быть предоставлен здесь, если вы не хотите писать отдельные (разного рода) приложения в общем домене на основе конкретной платформы.

3. Да, извините, я виноват. Вероятно, я хочу создать какую-то пользовательскую структуру MVC с некоторыми общими основными компонентами, такими как логин, область администратора и т. Д., А Затем создать для каждой компании разные приложения на ее основе. Но моя цель — разместить все эти приложения на одном сервере, поэтому я хочу иметь ядро приложения («фреймворк») в корневом каталоге, а затем, например, иметь папку «private» и в ней папки: common, company1, company2 — и в каждой из этих папок есть модели,Папки Views и Controllers. Тогда я бы получил к нему доступ следующим образом myapp.com/company1 . Хорошая ли это схема?

4. @networ — Да. И мой ответ остается почти таким же, но вместо переменной указателя конфигурации вам понадобится переменная, указывающая на приложение (конфигурация будет выбрана самим приложением).

5. Моя цель — иметь легко обновляемый фреймворк. Вот почему я подумал, что было бы здорово, если бы я сделал это централизованным. Но, поскольку я думаю об этом сейчас, может быть, проще и лучше иметь полную копию фреймворка в каждой папке компании и не беспокоиться о какой-то специальной маршрутизации. Но я не знаю, как решить проблему обновления, например, системы входа в систему. Если я что-то изменю, мне придется вручную обновлять это в каждой копии framework…