Yii YiFramework以RESTful方式提供多个可选参数

Yii YiFramework以RESTful方式提供多个可选参数,yii,restful-url,Yii,Restful Url,我有一个查询界面,可以查询4个可能的字段:姓名、生日、星座和出生状态。用户可以为这些字段中的任何一个提供值。我使用的是AngularJS(此处不重要)和YiIfFramework(材料) 我见过类似问题的答案,但大多数情况下,人们最终使用querystring参数。我可以在我的urlManager中解释这一点,但我更愿意以“正确的”RESTful方式来完成这一点。我看到了一些例子,展示了如何做到这一点: /myservice/index.php/names/jones?birthyears=&s

我有一个查询界面,可以查询4个可能的字段:姓名、生日、星座和出生状态。用户可以为这些字段中的任何一个提供值。我使用的是AngularJS(此处不重要)和YiIfFramework(材料)

我见过类似问题的答案,但大多数情况下,人们最终使用querystring参数。我可以在我的urlManager中解释这一点,但我更愿意以“正确的”RESTful方式来完成这一点。我看到了一些例子,展示了如何做到这一点:

/myservice/index.php/names/jones?birthyears=&signs=leo&birthstates=maine——这意味着他们没有提供生日

我的想法是完全通过跳过空白值的路径来实现。这是否合理的做法:

/myservice/index.php/api/modelname/names/jones/birthyears//signs/leo/birthstates/maine

如果是这样的话,那么我正在努力使用urlManager模式

数组('api/find','pattern'=>'api//names//birthyears//signs//birthstates/','verb'=>'GET')


当我通过上面的路径到达这个位置时,我没有得到预期的分辨率。我确信有更好的方法来处理这个问题

我在这里测试了它,它成功了

如何设置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
    ),
),
'urlManager'=>数组(
'urlFormat'=>'path',//您必须像这样保留它。
//'urlSuffix'=>'.html',
'showScriptName'=>false,
“区分大小写”=>正确,
“useStrictParsing”=>true,
'规则'=>数组(
数组('api/find','pattern'=>'/names//birthyears//signs//birthstates/','verb'=>'GET'),
//这里还有其他规定
),
),

谢谢,我现在再次尝试使用您的附加urlManager参数。我将其设置为urlFormat path,但没有设置其他参数。我在解析控制器时遇到一个错误:“系统无法找到请求的操作”我最终移除了分隔符并使系统正常工作。我想这不是restful,但我的路径现在类似于:/jones//leo/maine-这与///匹配,现在将分组放回原处,这也很有效。所以,谢谢你的帮助。很高兴能帮上忙,需要谈谈!