Codeigniter 4 -如何重定向到其他控制器

vohkndzv  于 2023-02-01  发布在  其他
关注(0)|答案(1)|浏览(180)

这个问题有很多线索,但我还没有找到一个完全解决我的问题。许多线索涉及CodeIgniter的旧版本,我目前使用的是CodeIgniter版本4.3.1。我还使用HMVC设置,我希望在其中有一个子文件夹App\Modules,我在其中保存模块,如"auth"用于身份验证,"home"用于 Jmeter 板和用户特定页面
我的目标是创建一个简单的登录,一旦成功登录,我就可以指向一个 Jmeter 板页面。
我遇到的问题是,在我的登录控制器中,如果身份验证成功,我会重定向到/home/dashboard,但由于我没有(或无效)路由,或者它会拧断链接并将我指向默认控制器,因此会出错。
以下是我的文件中主要相关组件的摘录:

  • *\应用程序\模块\授权\控制器\登录。php:**(控制器)
<?php namespace app\Modules\auth\Controllers;
class Login extends \CodeIgniter\Controller
{
        ...
    public function attempt()
        {
              ...
              //if success
              $resp = redirect()->to("home/dashboard);
              ...
        }
        ...
}
  • *\应用程序\模块\home\控制器\ Jmeter 板. php:**( Jmeter 板控制器)
<?php namespace app\Modules\home\Controllers;
use \CodeIgniter\Controller;
class Dashboard extends Controller
{
      ...
      public function index()
      {
             ...
             return view('\App\Modules\home\Views\dashboard', $data)

      }
}
  • \应用程序\配置\路由. php:*
<?php
namespace Config;
$routes = Services::routes();
$routes->setDefaultNamespace('App\Modules');
$routes->setDefaultController('company\Controllers\Home');
$routes->setDefaultMethod('index');
$routes->setTranslateURIDashes(false);
$routes->set404Override();
//$routes->setAutoRoute(true);

...

/* auth routes */
$routes->get('auth/login', 'auth\Controllers\Login::index');
$routes->get('auth/login/(:any)', 'auth\Controllers\Login::index/$1');
$routes->post('auth/login/attempt', 'auth\Controllers\Login::attempt');

/* home */
$routes->get('/home/dashboard', 'home\Controllers\Dashboard::index');

if (is_file(APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php')) {
    require APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php';
}

成功登录后,我将被重定向到此URL,其中仅显示默认容器:http://localhost/ci4/public/index.php?%2Fhome%2Fdashboard=它至少应该显示或充当http://localhost/ci4/public/index.php/home/dashboard
请告诉我是什么阻止我看到App\Modules\home\Controllers\Dashboard控制器及其调用的视图...
先谢了!

qvsjd97n

qvsjd97n1#

经过尝试,我发现了一种方法:所以与其

$resp = redirect()->to("home/dashboard);

使用

return redirect()->redirect("/ci4/home/dashboard");

对我来说,这听起来像是CI4. 3. 1的bug而不是特性。从重定向调用重定向看起来像是一个令人困惑的设计。
我把这个贴出来也许能帮到大家

相关问题