yiiframework несколько необязательных параметров в стиле RESTful

У меня есть интерфейс запроса, который позволяет, скажем, 4 возможных поля для запроса: имя, год рождения, астрологический знак и состояние рождения. Пользователь может указать значение для любого из этих полей. Я использую AngularJS (здесь несущественно) и YiiFramework (материально).

Я видел ответы на подобные вопросы, но по большей части люди используют параметры строки запроса. Я могу объяснить это в своем urlManager, но предпочел бы сделать это «правильным» способом RESTful. Я видел примеры, показывающие, как это сделать:

/myservice/index.php/names/jones?birthyears=&signs=leo&birthstates=maine — это означает, что они не указали год рождения

Моя мысль сделать это полностью с путями, пропускающими пустые значения. Это разумный подход:

/myservice/index.php/api/имя модели/имена/джонс/годы рождения//знаки/лев/состояния рождения/мейн

если да, то я борюсь с шаблоном urlManager

массив('api/найти', 'шаблон'=›'api/‹модель:\w+›/имена/‹имена:(|\w+)›/годы рождения/‹годы рождения:(|\d{4})›/ знаки/‹знаки:(|\w+)›/состояния рождения/‹состояния рождения:(|\w+)›', 'глагол'=›'ПОЛУЧИТЬ')

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


person Cord    schedule 24.10.2012    source источник


Ответы (1)


Я проверил это здесь, и это сработало.

Как вы устанавливаете параметры своего urlManager?

Свойство urlFormat имеет значение «путь»?

'urlManager' => array(
    'urlFormat' => 'path', // You have to leave it like that.
 //   'urlSuffix' => '.html',
    'showScriptName' => false,
    'caseSensitive' => true,
    'useStrictParsing' => true,
    'rules' => array(
       array('api/find', 'pattern'=>'<model:\w+>/names/<names:(|\w+)>/birthyears/<birthyears:(|\d{4})>/signs/<signs:(|\w+)>/birthstates/<birthstates:(|\w+)>', 'verb'=>'GET'),
       // Other rules here
    ),
),
person FabianoLothor    schedule 24.10.2012
comment
Спасибо, я пробую это снова сейчас с вашими дополнительными параметрами urlManager. Я установил путь urlFormat, но не другие параметры. Я получаю сообщение об ошибке при разрешении контроллера: система не может найти запрошенное действие - person Cord; 25.10.2012
comment
В итоге я удалил разделители и смог заставить систему работать. Я понимаю, что это не успокаивает, но теперь мой путь выглядит примерно так: /jones//leo/maine, который соответствует /‹именам:(|\w+)›/‹годы рождения:(|\d{4})› /‹signs:(|\w+)›/‹birthstates:(|\w+)› и теперь возвращаем группировку, и это тоже работает. так что, спасибо за вашу помощь. - person Cord; 25.10.2012
comment
Рад, что помог, нужно просто поговорить! - person FabianoLothor; 25.10.2012