2013-10-17 71 views
0

我正在使用Yii,并且我有一个名为User的控制器以及一些CRUD操作的操作。我添加了一个新的动作如下:使用params返回404的控制器操作未找到

public function actionEmbedded($field, $action, $id){ 
    /* code */ 
} 

要访问这个动作的URL应该是

/user/embedded/field/logins/action/view/id/5542ab0cb0db0ab000000001 

但这返回404 Not found error

然而,当我改变参数之一$_id而不是$id ...

public function actionEmbedded($field, $action, $_id){ 
    /* code */ 
} 

...它可以访问就像预期

/user/embedded/field/logins/action/view/_id/5542ab0cb0db0ab000000001 

任何行动想法为什么?我的任何参数名称是否保留?我在其他操作中使用了$id,如果这可能是导致此行为的原因。

UPDATE: 下面是从我的config.php文件urlManager码。

'urlManager'=>array(
     'urlFormat'=>'path', 
     'showScriptName'=> false, 
     'rules'=>array(
      // Handles differen API versions 
      'api/1.0/<action:\w+>/*' => 'api_1_0_/<action>', 
      array('api_1_1_/<action>', 'pattern'=>'api/1.1/<action:\w+>', 'verb' => 'GET'), 
      //array('api_1_1_/Post<action>', 'pattern'=>'api/1.1/<action:\w+>/*', 'verb' => 'POST'), 

      // User specific API calls (starts with users/me) 
      array('api_1_1_/prices', 'pattern'=>'api/1.1/prices/<market:\w+>/<biddingArea:\w+>/hour/<period:\w+>', 'verb' => 'GET'), 
      array('api_1_1_/view/model/users/id/me', 'pattern'=>'api/1.1/users/me', 'verb' => 'GET'), 
      array('api_1_1_/listEmbeddedArray/model/users/id/me/array/contracts', 'pattern'=>'api/1.1/users/me/meters', 'verb' => 'GET'), 
      array('api_1_1_/view/model/units/id/<id>', 'pattern'=>'api/1.1/users/me/meters/<id:\w+>', 'verb' => 'GET'), 
      //array('api_1_1_/viewEmbeddedArray/model/users/id/me/array/contracts/ean/<ean>', 'pattern'=>'api/1.1/users/me/meters/<source:\w+>/<ean:\w+>', 'verb' => 'GET'), 
      //array('api_1_1_/series', 'pattern'=>'api/1.1/users/me/meters/<source:\w+>/<ean:\w+>/series/<query:\w+>', 'verb' => 'GET'), 
      //array('api_1_1_/series/source/<source>/ean/<ean>/resolution/<resolution>/query<query>', 'pattern'=>'api/1.1/users/me/meters/<source:\w+>/<ean:\w+>/series/<resolution:\w+>/<query:\w+>', 'verb' => 'GET'), 
      //array('api_1_1_/view/model/unit/id/<id>', 'pattern'=>'api/1.1/users/me/meters/<id:\w+>', 'verb' => 'GET'), 
      array('api_1_1_/series/id/<id>', 'pattern'=>'api/1.1/users/me/series/<id:\w+>', 'verb' => 'GET'), 

      array('api_1_1_/list', 'pattern'=>'api/1.1/users/me/<model:\w+>', 'verb' => 'GET'), 
      array('api_1_1_/view', 'pattern'=>'api/1.1/users/me/<model:\w+>/<id:\w+>', 'verb' => 'GET'), 
      array('api_1_1_/delete', 'pattern'=>'api/1.1/users/me/<model:\w+>/<id:\w+>', 'verb' => 'DELETE'), 

      // General API calls 
      array('api_1_1_/download', 'pattern'=>'api/1.1/download/<model:\w+>', 'verb' => 'GET'), 
      array('api_1_1_/series', 'pattern'=>'api/1.1/<model:\w+>/<id:\w+>/series', 'verb' => 'GET'), 

      array('api_1_1_/listEmbeddedArray', 'pattern'=>'api/1.1/<model:\w+>/<id:\w+>/<array:\w+>', 'verb' => 'GET'), 
      array('api_1_1_/updateEmbeddedArray', 'pattern'=>'api/1.1/<model:\w+>/<id:\w+>/<array:\w+>/<ean:\w+>', 'verb' => 'PUT'), 
      array('api_1_1_/deleteEmbeddedArray', 'pattern'=>'api/1.1/<model:\w+>/<id:\w+>/<array:\w+>/<ean:\w+>', 'verb' => 'DELETE'), 
      array('api_1_1_/viewEmbeddedArray', 'pattern'=>'api/1.1/<model:\w+>/<id:\w+>/<array:\w+>/<ean:\w+>', 'verb' => 'GET'), 
      array('api_1_1_/createEmbeddedArray', 'pattern'=>'api/1.1/<model:\w+>/<id:\w+>/<array:\w+>', 'verb' => 'POST'), 

      array('api_1_1_/list', 'pattern'=>'api/1.1/<model:\w+>', 'verb' => 'GET'), 

      array('api_1_1_/view', 'pattern'=>'api/1.1/<model:\w+>/<id:\w+>', 'verb' => 'GET'), 
      array('api_1_1_/update', 'pattern'=>'api/1.1/<model:\w+>/<id:\w+>', 'verb' => 'PUT'), 
      array('api_1_1_/delete', 'pattern'=>'api/1.1/<model:\w+>/<id:\w+>', 'verb' => 'DELETE'), 
      array('api_1_1_/create', 'pattern'=>'api/1.1/<model:\w+>', 'verb' => 'POST'), 

     ), 
    ), 
+0

您似乎在使用url管理器或其他东西,否则您的网址看起来像'/index.php?r = user/embedded&id = 5542ab0cb0db0ab000000001'。你如何使用该类型的网址访问您的操作? – deacs

+0

是的,我使用urlManager。我试图关闭它,并使用'/index.php?r=user/ embedded&id = 525ec506df6232341c000033&field = logins&action = view',但是它引起了同样的问题... – luttkens

+2

你能否发布urlmanager代码? – deacs

回答

1

我不能评论,所以我会张贴这个答案,即使它不是;检查你的urlManager规则,你的urlManager规则中可能存在一个模式,在这个模式中你的请求适合,并且框架试图执行它。如果我没有记错,视图的默认规则需要参数$id,因此,由于在您的配置中看起来像'<controller:\w+>/<id:\d+>'=>'<controller>/view'的规则,您的应用程序可能会或可能不会尝试呼叫userController::actionView($id),该规则不存在。

但是,这只是一个猜测,我建议你打开调试,并检查应用程序试图去的地方。您可能可以通过在urlManager配置中将视图规则更改为module/controller/view而不是controller/view来解决此问题。

干杯。

+0

这是一个好点!我检查了我的urlManager规则,但它们都以“api/1.1/...”开头,所以猜猜它们不应该影响以“user/...”开头的任何请求? – luttkens

相关问题