2010-11-20 149 views
4

更新:我写了一些关于在PHP中使用标题的错误陈述;所以忘记那部分:)Cakephp内部重定向从控制器到另一个控制器

我想要的是从另一个控制器获取并显示控制器的视图(与控制器的数据),而无需在浏览器中更改URL。

一些细节:因为是直接重定向(通过浏览器)

  • requestAction不允许我去取CSS和图像正确
    1. 重定向不会做的工作我需要这个东西,因为我有一个内部重定向到其他控制器的控制器分派器。

      我认为唯一的(正确的)解决方案是在路由器:: connect 的/ config中使用routes.php,并使用调度器控制器中的逻辑。

    +1

    “内部重写”通常通过路由完成。你的“控制器调度员”有什么特别之处,你不能用路由做同样的事情? – deceze 2010-11-21 00:29:02

    +0

    正如你所说,解决方案是做数据库和路由之间的交互......但我不知道是否有可能 – apelliciari 2010-11-21 10:29:36

    +0

    你想从另一个模型中的控制器动作显示一个模型的数据? – Nigel 2010-11-21 10:45:53

    回答

    12

    ummm ... header()是用于重定向的函数,除非PHP文档错误。 (http://php.net/manual/en/function.header.php)cakePHP中的核心使用重定向函数头(参见cake/libs/controller.php的第721-730行)。

    所以我不确定你的意思是“像正常的PHP”。 CakePHP是PHP,它只是建立在面向对象的代码上。这不是魔术或扭曲的做事方式。所以要做一个重定向蛋糕,你可以简单地使用:

    $this->redirect(array('controller' => 'my_controller', 'action' => 'my_action')); 
    

    它会调用header()函数。

    现在。如果你不想使用重定向(也许如果你要去一个外部站点),你可以调用代码中的header()。只要确保你把exit();在标题呼叫之后:

    header('Location: http://call/my/url'); 
    exit(); 
    

    它的工作原理与重定向一样。这只是很多不必要的额外工作。请记住,使用重定向会自动维护域名并为您构建网址。

    +0

    是的,你是对的我混淆了标题的使用。 我正在尽快修复这个问题。 我需要一些像htaccess url重定向(及其透明度) – apelliciari 2010-11-20 16:22:07

    +0

    FYI你可以使用头也转到相对路径 – apelliciari 2010-11-21 10:28:05

    2

    通常,将URL连接到控制器是路由的工作。如果你的逻辑非常复杂,并且正常的路由不会削减它,你甚至可以编写自己的路由解析器类,它可以执行更复杂的逻辑(这些都在手册中)。

    如果这个路由逻辑涉及数据库查询或任何其他类型的控制器逻辑,并可能导致基于某些内部状态的相同URL的输出会非常不同,但是您正在制作一个非常有用的RESTless应用程序,我会提交给您应该重新考虑你想要做的事情。话虽如此,您可以使用$this->render()来呈现任何控制器操作的任何视图。每个视图的控制器逻辑可以放在AppController中,或者可能(部分)放置在从任何地方被调用的模型中。因此,与其“重定向到”不同的控制器,路由只是路由到特定的控制器操作,该操作动态调用它需要调用的代码,然后呈现它需要呈现的视图。

    如果你希望你的应用保持在同一个URL上,但显示的内容非常不同,你应该也可以考虑制作一个AJAX应用。

    适合您的正确解决方案可能介于两者之间。

    相关问题