Оптимальный способ обработки URL-маршрутизации / контроллеров в Yii - PullRequest
0 голосов
/ 06 ноября 2011

Я пытаюсь разработать веб-сервис RESTful Yii. На верхнем уровне проекта у меня есть моя модель, которая была создана с использованием схемы базы данных + GiiX. У меня есть модуль веб-сервиса (ws), в котором я хочу, чтобы веб-сервис жил. На данный момент модель довольно проста:

  • Product (принадлежит Brand, имеет один Analysis)
  • Brand (имеет много Product)
  • Analysis (принадлежит одному Product)

Я хотел бы разумно создавать правила urlManager, чтобы мне не приходилось добавлять новые правила при создании новых действий и / или новых контроллеров. В чем я не уверен, так это как это сделать. Имейте в виду, что сейчас я просто пытаюсь предложить пользователю возможность перечислить их с некоторыми фильтрами по критериям.

Во-первых, я должен создать отдельный контроллер для каждой модели, над которой я могу захотеть работать - например, ws/ProductController, ws/BrandController, ws/AnalysisController - или я должен просто иметь один ws/WebServiceController с действиями, соответствующими каждой потенциальной отдаче тип

Имея в виду ответ на первый вопрос, какие правила URL я должен использовать для достижения следующего:

  • Выполнить действие на контроллере (ах) ws/* без параметров;
  • Выполнить действие на контроллере (ах) ws/* с некоторыми параметрами;

Кроме того, сейчас я просто использую GET.

Я взглянул на страницу Yii http://www.yiiframework.com/wiki/175/how-to-create-a-rest-api/ по созданию RESTful API, но был немного озадачен тем, как применить их пример к моему.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2011

Во-первых, я должен создать отдельный контроллер для каждой модели, которую я могу хотеть работать - как ws / ProductController, ws / BrandController, ws / AnalysisController - или я должен просто иметь один ws / WebServiceController с действиями, соответствующими каждому потенциалу тип возврата?

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

Выполнить действие на контроллере (ях) ws / * без параметров; Сделать действие на контроллер (ы) ws / * с некоторыми параметрами;

Предполагая, что ваш модуль зарегистрирован как "webService", вы можете использовать эти правила:

'ws/<_c>' => 'webService/<_c>',
'ws/<_c>/<model:\w+>/<id:\d+>' => 'webService/<_c>',

Использование параметров $ _GET не зависит от ваших правил, вы можете просто сделать URL-адреса приятнее с ними.

0 голосов
/ 10 ноября 2011

Вы можете сделать так или иначе.Будет работать как создание отдельных контроллеров, так и помещение нескольких действий в один контроллер.Лично я думаю, что было бы хорошо создать модуль Ws и поместить в него несколько контроллеров.Один на модель:

modules
  ws
    controllers
      ProductController
      BrandController
      …  

Таким образом, вы автоматически получите достаточно хороших URL: ws/product, ws/brand, ws/brand/search, ws/product/order и т. Д.

...