#php #model-view-controller #controller #naming-conventions
#php #модель-представление-контроллер #контроллер #соглашения об именовании
Вопрос:
Я создаю фреймворк MVC. Я использую соглашение об именовании PEAR. В классах первая буква каждого слова пишется с заглавной буквы.
Проблема в том, когда я добираюсь до классов контроллера. Платформа загружает контроллер на основе URL-пути. Однако я не хочу, чтобы в моих URL-адресах использовались заглавные буквы. Существует ли общий способ решения этой проблемы?
Комментарии:
1.
ucfirst()
? В чем конкретная проблема?2. @KingCrunch если класс состоит более чем из одного слова, ucfirst не будет приводить его в соответствие с правильными заглавными буквами. например, если имя классов контроллера было PhotoBooth
3. Во-первых, у вас не должно быть имен файлов со смешанным регистром. Это отвратительная практика разработчиков фреймворков, не имеющих понятия о семантике языка. Идентификаторы в PHP должны вести себя без учета регистра.
4. @mario итак, вы говорите, что new PhotoBooth(); совпадает с new photobooth(); во всех сборках php?
5. ДА.
stdClass
это то же самое, чтоStDcLaSS
иstrtolower
STRTOLOWER
то же самое, что и,,. Часто обсуждается, является ли это хорошим языковым дизайном, но PHP по-прежнему рассматривает их как эквивалентные. (Однако обратите внимание, что имена констант чувствительны к регистру. И переменные, конечно.)
Ответ №1:
Просто извлеките имя контроллера из URL (например, /controller/action/id
) и используйте ucfirst()
для получения имени класса вашего контроллера. Это обычный способ сделать это.
Комментарии:
1. эххх … а что, если имя вашего класса контроллера — PhotoBooth? вы не можете просто использовать ucfirst() для получения правильных регистров.
2. Тогда вы можете захотеть использовать соглашение, согласно которому для каждой заглавной буквы вы добавляете подчеркивание к URL. Таким образом, PhotoBooth был бы
photo_booth/action/..
.3. Просто в качестве примера: url
/photo-booth
=>implode('', array_map('ucfirst', explode('-', 'photo-booth')))
=> classPhotoBooth
. Преобразование строк обычно не так сложно, но отличная площадка для творчества 🙂4. использовалось что-то похожее на метод king crunches
5. вы можете использовать
strtolower()
сначала