首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未重定向到Codeigniter 4中的特定URL

未重定向到Codeigniter 4中的特定URL
EN

Stack Overflow用户
提问于 2020-03-01 15:17:18
回答 5查看 6.3K关注 0票数 4

为什么每当我通过我的Codeigniter 4控制器的构造函数重定向某个东西时,它就不能工作了?

代码语言:javascript
运行
复制
<?php namespace App\Controllers\Web\Auth;

class Register extends \App\Controllers\BaseController
{
    function __construct()
    {
        if(session('username')){
            return redirect()->to('/dashboard');
        }
    }
    public function index()
    {
        // return view('welcome_message');
    }
}

但是如果我把它放在索引中,它就会像预期的那样工作。

代码语言:javascript
运行
复制
public function index()
{
        if(session('username')){
            return redirect()->to('/dashboard');
        }
}

问题是,我不想直接在索引中使用它,因为它需要在同一个文件的其他方法上使用。

EN

Stack Overflow用户

发布于 2020-09-23 08:16:43

在这种情况下,您甚至不应该在控制器中执行这种逻辑。这应该在过滤器中完成,而不是在控制器中完成。

所以你有你的控制器登记册了。

您应该在应用程序/过滤器文件夹中创建一个过滤器,类似于checkLogin.php。

该过滤器应该具有以下结构:

代码语言:javascript
运行
复制
<?php

namespace App\Filters;

use CodeIgniter\Filters\FilterInterface;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;

class CheckLogin implements FilterInterface
{

    /**
     * Check loggedIn to redirect page
     */
    public function before(RequestInterface $request, $arguments = null)
    {
        $session = \Config\Services::session();
        if (session('username')) {
            return redirect()->to('/dashboard');
        }
    }

    public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
    {
        // Do something here
    }
}

然后,在app/config/Filters.php中,应该将过滤器添加到所需的控制器中。

代码语言:javascript
运行
复制
public $aliases = [
    'csrf' => \CodeIgniter\Filters\CSRF::class,
    'toolbar' => \CodeIgniter\Filters\DebugToolbar::class,
    'honeypot' => \CodeIgniter\Filters\Honeypot::class,
    'checkLogin' => \App\Filters\CheckLogin::class,
];

// List filter aliases and any before/after uri patterns
public $filters = [
    'checkLogin' => ['before' => ['Register']],
];

有关过滤器和如何使用的更多信息,请查看文档。

指南/传入/filters.html?高亮=过滤器

然后,您甚至可以为其他控制器创建过滤器,以便在用户未登录时重定向到此控制器。

票数 0
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60476570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档