codeigniter (CI 4)如何在控制器内重定向?

bfnvny8b  于 2022-12-07  发布在  其他
关注(0)|答案(2)|浏览(184)

如何在一个控制器中引用另一个控制器?在CI 3中(例如在controller client.php中),我解决了这个问题,如下所示:

redirect('/Clients', 'refresh');

但在CI 4中似乎不再起作用。“反向路由时无法找到路由。”)我也尝试了

redirect()->route('/Clients');

但误差是相同的。

redirect()->to('/Clients');

不重定向到任何地方(无输出,无任何内容)
为了更好地理解:我想使用控制器(例如客户端/创建到客户端/详细信息)

fcwjkofz

fcwjkofz1#

您应该注意到redirect()并不像在CI 3中那样只设置头,在CI 4中它返回一个RedirectResponse对象,您可以使用该对象请求控制器进行重定向。
要做到这一点,你需要在你的控制器中return这个RedirectResponse对象。没有return语句,重定向就不会发生。
另一件需要注意的事情是,redirect()可以通过一些“选项”来调用:

前往命名路由

return redirect()->route('named_route');

return redirect('named_route');

要使用此功能,您需要在app/Config/Routes.php文件中添加一个命名路由:

$routes->get('/', 'MyController::index', ['as' => 'named_route']);

转到特定URI

return redirect()->to('Clients');

它会将您重定向到末尾带有 /Clients 的基本URL。
请查看文档以了解更多信息:https://codeigniter.com/user_guide/general/common_functions.html#redirect

wwodge7n

wwodge7n2#

Codeingiter 4文档对此并不十分清楚。它们并没有给你提供所有不同的重定向选项。我不会开始这里一一列举,但要找到更多的选项,请查看system-〉HTTP目录中的大多数文件都有可以使用redirect()函数的函数,主要是ResponseTrait.php文件。
例如,要进行重定向,并且如果您想立即发送标头,可以执行以下操作:

redirect('my_route')->sendHeaders();
die();

例如,如果您有一个扩展了另一个控制器的控制器,并且父控制器可以从浏览器访问该控制器,请尝试使用以下命令:

return redirect('named_route');

它可能不起作用,因为路由是返回到父控制器的对象。如果在父控制器中返回它,则它将起作用。(即)

class Home extends BaseController {

   public function my_handler($funcCall=''){
     
     // call function in child controller
     $response = $this->$funcCall();

     // Handle Response from child controller...

   }
}

class Childcontroller extends Home {

    protected function someData(){
        // do something here...

        if($this->request->isAJAX()){
          // Do something...
          
        }else{

          // have to return again in parent controller
          // or won't redirect
          return redirect('some_route');

          // Else you can use 
          redirect('my_route')->sendHeaders();
          die();
        }
    }
}

相关问题