Как организовать бизнес-логику в проекте Kohana 3

StackOverflow https://stackoverflow.com/questions/2443909

  •  20-09-2019
  •  | 
  •  

Вопрос

Мне нужны советы, учебные пособия и ссылки о том, как настроить веб-приложение среднего размера с помощью Kohana 3.В прошлом я реализовал шаблоны MVC, но никогда не работал с «формализованной» структурой MVC, поэтому я все еще разбираюсь в терминологии - играю с базовыми примерами, создаю представления и шаблоны и так далее.

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

Лучше всего я учусь на примерах, но документация на основе примеров сейчас немного скудна для Kohana 3 — они сами так говорят на сайте.Хотя я не беспокоюсь об изучении фреймворка по ходу работы, я хочу с самого начала убедиться, что база кода правильно структурирована, т.е.Контроллеры хорошо разделены, названы правильно и в соответствии со стандартами, и, что наиболее важно, бизнес-логика разделена на модели соответствующего размера.

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

Предположим, у меня уже есть весь API — список всех компаний, редактирование компании, список компаний по названию улицы, создание предложения для входа в систему как компания и т. д., и я просто ищу, как вписать эту функциональность в шаблон MVC и в структуру приложения Kohana, которую можно легко расширить.

  • Знаете ли вы реальные примеры приложений с «нагруженными базами данных», таких как каталоги, онлайн-сообщества...с зоной входа, созданной на Kohana 3, желательно с открытым исходным кодом, чтобы я мог взглянуть, как они это делают?

  • Существуют ли соглашения или лучшие практики о том, как структурировать расширяемую область входа для конечных пользователей в проекте Kohana, который может обрабатывать не только страницу бизнес-каталога, но и другие продукты на отдельных страницах?

  • Знаете ли вы какие-нибудь хорошие ресурсы по созданию сложных приложений с помощью Kohana?

  • Создавали ли вы что-то подобное и могли бы дать мне рекомендации по структуре проекта?

Награда

Я награждаю @antpaw, потому что он предоставил мне приложение Kohana с некоторой бизнес-логикой, которая дает мне множество примеров.Приветствуем @Pixel Developer за ваш отличный вклад – как это часто бывает, мне хотелось бы разделить награду!

Это было полезно?

Решение

я бы использовал модуль аутентификации, который поставляется с Kohana для входа в систему.Это даст вам таблицу ролей, в которой вы сможете настроить возможные параметры разрешений и позже связать их с пользователями.После этого вы можете проверить внутри __constructor() или action_function() каждого контроллера, имеет ли пользователь требуемую роль, например.с помощью функции ->has().Вам также следует использовать модуль ORM, это просто здорово, поскольку между таблицами существует множество связей.Также чрезвычайно полезным может оказаться метод __get() внутри объекта ORM.

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

public funciton action_manage($id = NULL)
{
    $entry = ORM::factory('entry', $id); // if id is null a new entry will be returned 
}

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

Другие советы

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

Знаете ли вы реальные примеры приложений с «нагруженными базами данных», таких как каталоги, онлайн-сообщества...с зоной входа в систему, созданной на Kohana 3, где я мог бы взглянуть, как они это делают?

Есть несколько примеров приложений.Вуди Гилк (основатель Kohana) опубликовал код на своем личном сайте github.Для области входа он назначает значение cookie.Kohana 3 / 2.4 подписывает файлы cookie, что делает их безопасными и устраняет необходимость в сеансах.Возможно, это не всем придется по вкусу, поэтому вы всегда можете использовать встроенную библиотеку аутентификации, которая использует как сеансы, так и файлы cookie.

Вот еще несколько проектов, которые могут вас заинтересовать:

  • Шиндиг - Легкий модуль блога для Kohana 3.
  • Коханут - Расширяемая CMS, написанная на Kohana 3.

Существуют ли соглашения или лучшие практики о том, как структурировать расширяемую область входа для конечных пользователей в проекте Kohana, который может обрабатывать не только страницу бизнес-каталога, но и другие продукты на отдельных страницах?

Если я правильно вас понимаю, вы хотите создать поле входа для каждой из этих страниц?С Kohana 3 это легко, поскольку мы можем воспользоваться преимуществами ЧАС в ХМВК.Сэм де Фрессьине написал статью, подробно описывающую все это, в блоге iBuilding Tech Blog. Масштабирование веб-приложений с помощью HMVC.

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

$login = Request::factory('login')->execute()->response;

$login теперь содержит форму входа, которую вы можете разместить где угодно.Возможно, вы захотите вернуть другой ответ, если запрос является внутренним, поэтому этот фрагмент кода может быть полезен:

if (Request::instance() !== $this->request)
{
    print 'Internal called made with Request::factory';
}

Знаете ли вы какие-нибудь хорошие ресурсы по созданию сложных приложений с помощью Kohana?

Не будет документации, показывающей, как создавать сложные приложения.По мнению сообщества Kohana, вы являетесь разработчиком PHP и должны быть в состоянии решить эти проблемы самостоятельно.Если вы не можете, то вам не следует использовать Kohana.

Создавали ли вы что-то подобное и могли бы дать мне рекомендации по структуре проекта?

Как только вы поймете, как Kohana 3 находит файлы, все станет легко понять.

|- classes
|-- controller
|-- model
|- views

Например:

Controller_Mathew extends Controller 

Будет искать файл с именем mathew.php в:

classes/controller

Для указания более глубоких каталогов можно использовать символы подчеркивания.Пример:

Controller_Mathew_Davies extends Controller

будет искать файл с именем davies.php в:

classes/controller/mathew/

Как видите, подчеркивания в имени контроллера действуют как разделители каталогов.Это справедливо для моделей и ванильных классов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top