Структура папок PHP MVC Framework ... я делаю это правильно? - PullRequest
7 голосов
/ 14 июня 2010

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

Фреймворк предназначен как для моего собственного использования, так и для него.в целом продвинуть мои навыки PHP дальше.Я столкнулся с многочисленными проблемами, которые, преодолев их, я многому научил, и мне нравится создавать что-то из ничего, поэтому я бы предпочел не видеть ответов типа «Просто используйте Zend»!;)

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

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

"Теоретическая" структура каркаса

- .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 .
  • private / canочевидно, не доступен публично.
  • public / содержит все публичные файлы.
  • app / содержит весь специфичный для приложения код.
  • lib / может содержать Zend или другую библиотеку (я тоже работаю самостоятельно) для вызова с автозагрузчиками
  • bootstrap.php это код приложения ... Нужно ли это?Достаточно ли основного index.php? .
  • modules / будет содержать каждый модуль ... Нужны ли модули вообще? .
  • default / - это модуль по умолчанию, который будет содержать MVC для большинства запросов (используется, когда «admin» не является первой частью URL).
  • admin / - это модуль, который будет содержать MVC для раздела администратора.

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

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

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

Модуль : По умолчанию Контроллер : Видео Действие : Просмотр Параметры : массив ('1 ')

и если запрос site.com / admin / pages / view / 1 / приходит на мой сайт ..

Модуль : Admin Контроллер : Страницы Действие : Просмотр Параметры : Массив ('1')

Это правильный путь?Или я слишком усложняю и делаю что-то, что не стоит делать?

Должен ли я иметь совершенно отдельную прикладную среду для моего раздела администратора ...?Нужно ли мне даже отделять MVC административного раздела от всего остального?

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

Ответы [ 3 ]

2 голосов
/ 16 июня 2010

Одним из решений для маршрутизации администратора является то, что делает 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, вам следует добавить представление глобалов и папку модели для совместного использования их в приложениях
  3. Я не понимаю, почему автозагрузчик находится внутри каталога config, а не как часть каталога lib, вы можете просто переместить boostrap.php в каталог config

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

2 голосов
/ 13 мая 2011

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

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

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

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

/admin/team/add/ читается как, Area: Admin, Controller: team, Action: add

/team/add/ будет читаться как, Область: [нет], Контроллер: команда, Действие: добавить

Структура папок примерно такая:

app/
   areas/
      admin/
          controllers/
          views/
      staff/
          controllers/
          views/
   controllers/
   models/
   views/
1 голос
/ 15 июня 2010

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

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

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

...