Поскольку многие из нас продолжают продвигаться вперед с PHP7+, мы можем продолжать использовать множество новых функций, которые предлагает язык.
Тем не менее, тем не менее, в PHP и связанном с ним программном обеспечении все еще есть функции, которые мы можем использовать для оптимизации нашей разработки. Наименее из них (и то, о чем я немного писал и говорил) — это пространства имен.
Однако вот в чем дело: мне нравится, когда файлы и каталоги моего плагина структурированы так, чтобы они отражали соглашения о пространстве имен, которым они следуют. И это можно сделать для таксономий, мета-полей, объектов предметной области, функций, связанных с базой данных, и так далее.
Однако в этом посте я хочу поговорить о способе организации экранов настроек WordPress как из логической — то есть их местоположения в файловой системе — так и из виртуальной — то есть их пространств имен — организационных структур.
Организация экранов настроек WordPress
Первое, что я хочу сделать, это следующее: хотя я говорю об организации экранов настроек WordPress, я ничего не говорю об API. Вместо этого предположим, что в этом посте я говорю о следующем:
- пользовательское меню, имеющее связанную страницу меню,
- страница меню, отображающая требования для страницы настроек (например, поле одноразового номера и т. д.)
- часть, которая содержит фактические настройки (или несколько частей, если вы хотите включить несколько настроек).
Я не буду говорить о процессе очистки, сериализации, извлечения, проверки и отображения. Это чисто организационно.
Продумывая процесс
Учитывая, что мы собираемся организовывать наши файлы через каталоги, которые также сопоставляются 1:1 с пространствами имен, давайте продумаем, что именно нам нужно. Я подхожу к этому так:
- Мы создаем что-то специально для контекстного приложения WordPress. Это указывает на пространство имен.
- Мы собираемся создать административное меню, что означает, что мы оба работаем в области администрирования WordPress, то есть в другом пространстве имен, и с меню, которое является другим пространством имен.
- Далее нам нужны файлы для отображения стандартного экрана для WordPress, поэтому нам понадобится пространство имен Views,
- Затем нам понадобится доменно-зависимый код, чтобы попасть в представление, поэтому в конечном итоге нам потребуется каталог Partials (и, следовательно, пространство имен).
Таким образом, окончательная логическая организация данных будет выглядеть примерно так:
Возможно, самое важное, что следует отметить в отношении этой конкретной организации файлов, это то, что класс AdminMenu является базовым классом, от которого могут наследоваться все конкретные (или более конкретные) классы.
Это означает, что класс AcmeAdminMenu наследует от него определенные свойства и функции, а затем реализует его логику или также добавляет свою логику.
Пространство имен каждого файла
Когда вы организуете свои файлы таким образом, пространства имен становятся почти самоочевидными, не так ли? Вот пространство имен для каждого из файлов:
- WordPressAdminMenuAdminMenu
- WordPressAdminMenuAcmeAdminMenu
- WordPressAdminMenuViewsSettings
- WordPressAdminMenuViewsSettingsPartials
Обратите внимание, что поскольку файл acme-settings.php технически представляет собой просто разметку для параметров рендеринга, он не обязательно должен иметь пространство имен, потому что он включен в представление, которое его рендерит.
В любом случае, если вы предпочитаете держать вещи как можно более организованными, имеет смысл вкладывать партиал только в каталог с таким именем.
Что насчет кода?
Если вам интересно увидеть код для чего-то подобного, я подумываю собрать небольшой плагин, который демонстрирует, как все это сочетается друг с другом. В конце концов, это немного высокоуровнево, не так ли? Я имею в виду, что нет никакой реализации.
Опять же, если это поможет вам выбрать правильное направление для текущего или будущего проекта, то этого может быть достаточно.
Так почему бы не сообщить мне через Твиттер ваши мысли, и я пойду оттуда. Если вам нравится видеть какой-то код, круто; в противном случае не беспокойтесь. Этого поста будет достаточно.