Структура папок структуры PHP MVC … Я делаю это правильно?

В настоящее время я работаю над своей собственной PHP Framework, и мне нужна помощь в выяснении, если я пойду в правильном направлении или нет …

Рамки как для моего собственного использования, так и для дальнейшего продвижения моих навыков PHP. Я столкнулся с многочисленными проблемами, которые, преодолевая их, я многому научился и люблю создавать что-то из ничего, поэтому я бы предпочел не видеть таких ответов, как «Just use Zend»! 😉

Я прочитал кучу статей как на Stack Overflow, так и на кучу других сайтов, но не могу получить правильный ответ, я надеюсь, кто-то может дать мне полезный совет!

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

«Теоретическая» структура структуры

- .htaccess - index.php - private/ - app/ - bootstrap.php - modules/ - default/ - controllers/ - pages.php - index.php - models/ - views/ - admin/ - controllers/ - models/ - views/ - config/ - config.php - autoloader.php - lib/ - Some_Library - Class1 - class1.php - Class2 - class2.php - public/ - css - images - scripts 

Детали

  • index.php является основным файлом, где каждый запрос направляется с .htaccess .
  • Очевидно, что приватный / доступ к нему недоступен публично.
  • public / содержит все общедоступные файлы.
  • app / содержит весь код приложения.
  • lib / может содержать Zend или другую библиотеку (я тоже работаю самостоятельно), для вызова с автозагрузчиками
  • bootstrap.php – это код, специфичный для приложения … Нужно ли мне это? является основным «index.php»? ,
  • модули / будут содержать каждый модуль … Мне нужны модули вообще? ,
  • default / является модулем по умолчанию, который будет содержать MVC для большинства запросов (используется, когда «admin» не является первой частью URL-адреса).
  • admin / это модуль, который будет содержать MVC для раздела admin.

В любом случае, на мой вопрос …

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

Если на сайт попадает запрос site.com/videos/view/1/ ..

Модуль : контроллер по умолчанию: видео Действие : просмотр Params : array ('1')

и если на сайт появится сайт site.com/admin/pages/view/1/ ..

Module : Admin Controller : Pages Action : View Params : array ('1')

Правильно ли это? Или я слишком усложняю это и делаю то, чего не стоит делать?

Должен ли я иметь полностью отдельную структуру приложения для моего раздела администратора …? Мне даже нужно отделить MVC от раздела?

Извините за массивный вопрос, просто хотел дать вам как можно больше информации! Не стесняйтесь отвечать на любую часть, которую вы можете = P

Одно решение для маршрутизации admin – это то, что делает CakePHP, вы сначала определяете конфигурацию для строки администратора, а затем в вашем контроллере используете действия с определенным преобразованием имен

 //Configuration ============================ Configure::write("admin_routing" , true ); Configure::write("admin_prefix" , "admin" ); //Controller =============================== class MyController extends AppController{ function index(){ //Will map to /mycontroller/ } function admin_index(){ //Will map to /admin/mycontroller/ } } 

Вы можете обобщить это, используя систему маршрутизации, просто посмотрите, как это работает ваша любимая инфраструктура

На другой ноте

  1. Папка модулей кажется незарегистрированной
  2. Я согласен с antpaw, вы должны добавить globals view и модельную папку, чтобы делиться ими по всем приложениям
  3. Я не понимаю, почему автозагрузчик находится внутри каталога config, а не как часть каталога lib, вы также можете просто переместить файл boostrap.php в каталог конфигурации

Надеюсь это поможет

Я знаю, что это было задано давно, но я был в той же ситуации несколько дней назад.

Предлагаемое решение айзера в основном связано с тем, с чем я пошел, как ни странно. В принципе, я заимствовал концепцию из ASP.NET MVC2 под названием «области». Области – это участки сайта, у которых есть свои собственные контроллеры и просмотр (также модели, но я не знаю, почему … модели обычно должны быть универсальными). Так что это очень похоже на вашу первоначальную идею.

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

Моя маршрутизация просто учитывает области. Маршруты жестко закодированы, поэтому, если мне нужна другая область, я просто настраиваю свой файл маршрутизации. О, также, мои автозагрузчики настроены на просмотр в папке области, если указана $ area.

/admin/team/add/ is read as, Area: Admin, Controller: team, Действие: добавить

в то время как

/team/add/ будет читать как, Area: [none], Controller: team, Action: add

Структура папки выглядит следующим образом:

 app/ areas/ admin/ controllers/ views/ staff/ controllers/ views/ controllers/ models/ views/ 

я бы предложил вам использовать bootstrap.php, который управляет всеми маршрутами, поэтому вы никогда не сталкиваетесь с такими проблемами, как «Я хочу, чтобы я мог больше вложить одну папку в мой модуль администрирования».

Я также не буду использовать модули и держать контроллеры по умолчанию прямо в контроллере / dir и контроллерах администратора внутри директории controller / admin. для моделей и представлений.

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