#php #codeigniter
#php #codeigniter
Вопрос:
Я создаю CMS с использованием CodeIgniter, и я в тупике относительно наилучшего способа обработки различных CRUD-представлений. Учитывая, что мой URL похож на…
mydomain.com/admin/app/content/pages/edit
… где ‘admin’ — мой контроллер, а ‘app’ — мой метод действия, в настоящее время я сопоставляю сегменты 3, 4 и 5 с реальными каталогами / файлами, например:
/views
/admin
/content
/pages
list_view.php
edit_view.php
add_view.php
/banners
list_view.php
edit_view.php
add_view.php
Одно предостережение заключается в том, что мне нужно вызывать разные методы модели, отличные от CRUD, в зависимости от того, какая страница вызывается, поэтому мой метод действия app () начинает иметь неприятный блок if ..else. Кроме того, представления каждого раздела будут выглядеть по-разному из-за разных табличных данных, поэтому я не вижу, как я могу избежать множества страниц просмотра. Очевидно, что недостатком всего этого является то, что 1) Я повторяю много кода, и 2) если я добавлю новый раздел администратора, мне придется физически создавать множество новых каталогов и добавлять новую часть в блок if … else .
Итак, мои вопросы:
- Как я могу уменьшить количество каталогов и страниц просмотра, которые я создаю?
- Могут ли методы list_fields() или field_data() поддаваться какой-либо автоматизации?
Одна из моих идей заключалась в том, чтобы профилировать таблицу, с которой я взаимодействую, создать динамический ассоциативный массив, который определяет, какие поля я хочу отобразить, а также тип элемента формы, которым он должен быть, а затем передать это в общий вид. Мысли? Недостатки?
Ответ №1:
Хотя это может не дать прямого ответа на ваш вопрос, оно может предоставить вам основу для разработки вашего CRUD. Я уже довольно давно использую GroceryCRUD и в значительной степени клянусь им для базовых и продвинутых операций CRUD. Он довольно хорошо спроектирован и построен, и, помимо индивидуальной файловой структуры, похоже, предлагает все, что вы ищете.
CRUD можно легко изменить, чтобы включить структуру файла / URL, которую вы тоже ищете.
Комментарии:
1. Отлично, спасибо. На самом деле я только что нашел GroceryCRUD около часа назад и начинаю погружаться. Я бы поддержал вас, но у меня пока недостаточно репутации. 🙂
2. Получите некоторую репутацию 😉 GroceryCRUD — это фантастика. Просто будьте осторожны, чтобы не слишком полагаться на CRUD. Все они хороши в разработке, но я часто обнаруживаю, что мои приложения перерастают CRUD, и в конечном итоге мне все равно нужно его правильно разрабатывать. Более поздние версии Grocery великолепны — доступно множество обратных вызовов, загрузок и т. Д. Отношения 1-many и 1-1 тоже хороши. Удачи с вашим проектом.
3. Просто просматривал мои старые сообщения на предмет оставшихся без ответа — вы можете принять ответ, если он правильный, даже если, кстати, вы еще не можете проголосовать.
Ответ №2:
Вы можете расширить CI_Model и использовать некоторые функции отражения, такие как GetProperties(), чтобы помочь с вашими общими CRUD. В сочетании с list_fields () CI, как вы упомянули, вы определенно могли бы создать для этого несколько общих страниц.
Примером, который может обрабатывать данные формы для любого объекта, может быть
function processForm() {
$props = $this->self->getProperties(ReflectionProperty::IS_PUBLIC);
foreach ($props as $prop) :
$prop->setValue($this,$this->input->post($prop->getName()));
endforeach;
}
где
$this->self = new ReflectionClass($this);
Комментарии:
1. Отлично, спасибо. Я не знаком с отражением (пока), но я изучу его. Я бы поддержал вас, но у меня пока недостаточно репутации. 🙂
2. Определенно полезный материал, когда вы хотите приступить к написанию повторно используемого кода.