【问题标题】:Controller Redirect issue in CakePHPCakePHP 中的控制器重定向问题
【发布时间】:2011-09-05 19:17:34
【问题描述】:

我有一个名为 users_controller 的控制器,在登录操作中我想重定向到我的affiliate_redirect_controller.php,现在我在用户控制器中使用以下代码进行重定向

$this->redirect(array(
      'controller'=>'affiliate_redirect',
      'action'=>'logRedirect' ));

然后我收到以下似乎无法解决的错误

Error: The requested address '/affiliate_redirect/logRedirect' was not found on this server.

老实说,我不知道这可能是什么,对 cakePHP 来说很新,而且没有找到适合我的解决方案。

affiliate_redirect_controller.php 的内容是这样的

class AffiliateRedirectController extends AppController
{
    var $name = 'AffiliateRedirect';

    function logRedirect(){
     }
}

【问题讨论】:

  • 尝试给出直接路径 $this->redirect('/affiliate_redirect/logRedirect');根据 cake 的约定,控制器名称应该是 AffiliateRedirects,文件名是affiliate_redirects_controller;这应该不是问题,但无论如何都要检查一下。
  • @Ehtesham,不,它不起作用,这可能是我的命名约定吗?
  • 好吧,只是为了测试重命名控制器文件名到affiliates.php,类名到AffiliatesController, $name = 'Affiliates' 然后看看它是否有效 $this->redirect(array('controller' = > 'affiliates', 'action' => 'logRedirect'));
  • 还有其他问题,没有重定向也会出现同样的问题

标签: cakephp


【解决方案1】:

我可以看到您的代码中有一个错误,这是因为命名约定。

$this->redirect(array(
      'controller'=>'affiliate_redirects',
      'action'=>'logRedirect' ));

当您以小写形式编写控制器名称时,请参阅上述更改,如上它应该是复数 affiliate_redirects 而不应是 affiliate_redirect

除此之外,您还可以像这样直接使用重定向。

$this->redirect('affiliate_redirects/logRedirect');

请试一试,应该可以的。

【讨论】:

  • 它重定向到logRedirect方法,我怎么知道当我在它回显的方法中回显某些东西,但错误仍然存​​在,这是因为没有视图吗?
  • 是的,你是对的。每个动作都应该有一个视图。如果您不希望有任何视图,那么只需编写一条语句 $this->autoRender = false;或者,如果您不想要任何主布局,则只需使用 $this->layout = 'ajax';
【解决方案2】:

您的数据库中是否有对应于关联重定向控制器的表?

您可能需要重新考虑您的逻辑,并使用 CakePHP 路由将 URL 设置为您想要的。拥有一个名为affiliate_redirect_controller 的控制器不符合 CakePHP 的命名约定。

由于我不确切知道您要做什么,因此我不知道这是否适合您,但也许可以考虑重定向到 UsersController 中的单独操作,例如 /users/affiliate_redirect/
或者你可以创建一个AffiliatesController,然后重定向到/affiliates/redirect/

另外,如果您没有将调试模式设置为 2,您应该这样做。它可能有助于揭示实际问题。

【讨论】:

  • 不,我需要添加一个表,但还没有做。因此,如果类被命名为 AffiliateRedirect,控制器文件的正确命名约定应该是affiliateredirect_controller.php。 AffiliateController 基本上在数据库中记录一个条目,然后将用户重定向到他需要的位置
  • 正确的文件名是affiliate_redirects_controller.php,类名是AffiliateRedirectsController,$name是AffiliateRedirects,然后你会创建一个名为affiliate_redirects的数据库表和一个名为affiliate_redirect.php
【解决方案3】:

您在 app/config/core.php 中有什么调试级别?大多数时候,当你收到消息时

Error: The requested address '/controller/action' was not found on this server.

这意味着您将调试级别设置为 0 并将其增加到 1 或 2 可以获取有关错误的更多详细信息。

【讨论】:

  • 它为零,我将其设置为 1,当我将其设置为 2 时,我会收到一些已弃用的错误。但不推荐使用的东西不应该是问题,因为所有其他控制器都可以工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2018-10-06
  • 1970-01-01
  • 2011-12-20
相关资源
最近更新 更多