2010-10-02 1 views
1

Я разрабатываю приложение CakePHP, которое мы предоставим в качестве белого ярлыка для людей для реализации для своих собственных компаний, и им нужно будет иметь определенные возможности настройки для себя.Белая маркировка CakePHP: Каков наилучший способ для обеспечения перехвата настроек/обратных вызовов для исполнителей?

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

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

Мне интересно, что это лучший способ сделать это?

Мой план состоит в том, чтобы иметь «файл» (с одним классом) для каждого моего контроллера, чтобы держать вещи разумно организованными. Этот файл будет иметь пустые методы, которые мой код вызовет, и они смогут добавлять код внутри этих методов, чтобы делать все, что им нужно.

Вопрос в том, должен ли этот класс, полный пустых методов, быть Компонентом? Контроллер? Просто обычный простой PHP-класс?

Мне нужно будет вызвать методы в этом классе из моих контроллеров, поэтому я предполагаю, что это не может быть проблемой для Контроллера (если, возможно, это не контроллер, который наследует мой или мой наследует от их, возможно,). Кроме того, мне нужно, чтобы разработчик этих методов имел доступ к моим моделям и компонентам, хотя я в порядке с их использованием App :: Import, мне не нужно иметь магические элементы $ this-> ModelName задавать.

Кроме того, этот файл, который я создаю (etiher Component или Controller), должен находиться в папке приложения рядом с другими (my) контроллерами/компонентами? Или я могу бросить его где-то отдельно, как в папке продавцов?

Вы уже что-то делали раньше?
Любые советы/советы/подводные камни, которые следует избегать, будут более чем приятными.

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

Спасибо!

ответ

1

Две идеи, которые приходят на ум:

  • создать abstract шаблоны (контроллеры, модели, все необходимое), что ваши клиенты могут продлить
  • написать свои контроллеры/компоненты/модели как plugin в собственном пространстве имен

В конечном счете вы, похоже, хотите создать «расширенную» платформу Cake, чтобы ваши клиенты все еще должны были писать свой собственный код Cake (я не знаю, как это сочетается с вашей идеей " основные возможности настройки ", хотя). Таким образом, вы должны написать свой код как можно более «необязательно» (с расширением имен плагинов, компонентов, улучшений AppModel, дополнительных библиотек) и предоставить документацию о том, как их использовать, чтобы помочь вашим клиентам ускорить работу.

+0

Большое спасибо за ваш ответ. Идея абстрактных контроллеров кажется интересной, мне нужно посмотреть дальше, чтобы убедиться, что CakePHP не задушит ее. –

+0

Что касается вашего другого упоминания, я определенно не продлеваю CakePHP, а потом мои клиенты пишут свой собственный код. Я собираюсь дать им полностью функциональное приложение из коробки, но я знаю, что некоторые из них захотят сделать что-то, когда что-то случится. Примерами являются такие вещи, как обновление внешнего CRM при создании/изменении учетной записи, отправка по электронной почте людей, когда происходят определенные вещи, подобные вещи. Это не серьезные изменения в работе системы, это всего лишь некоторые перехватчики, поэтому они могут делать простые пользовательские вещи, которые могут им понадобиться. –

+0

@ Даниэль. Просто ты просто сделал это так, как будто бы ... :) «Абстрактные» классы отлично работают в Cake (это все просто PHP), я использовал их сам по себе. Вы также можете просто предоставить пустые классы методам, которые вызываются при определенных событиях, которые ваши клиенты могут заполнить кодом, если это необходимо. Это действительно зависит от обстоятельств, что лучший метод. – deceze

1

Я бы установил общий набор событий и использовал бы что-то вроде связанной с системой событий, чтобы справиться с этим.

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

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

http://github.com/m3nt0r/eventful-cakephp

+0

Эта система звуков системы ОЧЕНЬ интересна! Я посмотрю больше на это, это кажется менее разрушительным для моего кода, чем идея абстрактного класса, при условии, что он дает мне всю необходимую гибкость, мне придется экспериментировать. Что касается упаковки, я буду кодировать большую часть своего кода с помощью ionCube или что-то в этом роде. Я знаю, что это не идеально, но это позволяет мне очень четко нарисовать границы. Если он закодирован, вы не должны прикасаться к нему. Спасибо!! –

+0

Любое обновление о том, работает ли это для вас? –

Смежные вопросы