конфликт соглашения об именовании класса контроллера (php)

#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'))) => class PhotoBooth . Преобразование строк обычно не так сложно, но отличная площадка для творчества 🙂

4. использовалось что-то похожее на метод king crunches

5. вы можете использовать strtolower() сначала