【问题标题】:Pass params into custom url route将参数传递到自定义 url 路由
【发布时间】:2016-11-14 07:46:36
【问题描述】:

我创建了这样的自定义 url 路由:

Router::connect('/subjects.details', array(
    'plugin' => 'subjects',
    'controller' => 'subjects',
    'action' => 'details'
));

但是该动作/视图需要一个参数。

所以当我去像localhost/foo/subjects.details/12 这样的链接时,它会给我缺少控制器错误。

缺少控制器

错误:找不到 Subjects.detailsController。

错误:在文件下面创建类 Subjects.detailsController: app/Controller/Subjects.detailsController.php

如何为这个 url 添加 id 参数?

【问题讨论】:

  • 您也可以使用subject-details 代替subject.details,并在路由'controller' => 'Subjects' 中使用CamelCased 控制器名称。
  • @user3082321 不会改变任何东西
  • 它一定是改变了错误信息。错误信息是什么。
  • @user3082321 它根本没有改变任何东西。无论如何,已经找到了解决方案。

标签: cakephp routing cakephp-2.0 cakephp-2.3


【解决方案1】:

您必须在 url 和您的操作中定义参数:

  Router::connect('/subjects.details/:id', array(
        'plugin' => 'subjects',
        'controller' => 'subjects',
        'action' => 'details'
    ));

【讨论】:

  • http://localhost/tmc/subjects/subjects/details/1 返回一个包含数据的页面,而http://localhost/tmc/subjects.details/1 返回错误页面:`错误:在此服务器上找不到请求的地址'/tmc/subjects.details/1'。`跨度>
  • 好像 cakephp 将 subject.details 解释为插件/控制器
【解决方案2】:

激光回答返回另一个错误。它基本上将新键 'id' => '1' 添加到 $this->params 数组中,而不是添加到 $this->params'passed' 键数组中。把它改成这个就可以了:

Router::connect('/subjects.details/*', array(
  'plugin' => 'subjects',
  'controller' => 'subjects',
  'action' => 'details'
));

【讨论】:

  • 这是一个可变长度的参数路由匹配/subjects.details/12/12/1/24/4/45/45/5/ ......这不是你需要的如果您打算检索单个文档
  • 那么你还有什么建议,因为:id 不起作用?
【解决方案3】:

这是一个可行的解决方案。你必须通过参数,然后它就会开始工作。这是方法-

  Router::connect('/subjects.details/:id', [
    'plugin' => 'subjects',
    'controller' => 'subjects',
    'action' => 'details'
   ],
   [
    'pass' => ['id']
   ]
  );

你的方法应该是这样的-

public function details($id){
  //....
}

我希望这会有所帮助。谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多