【发布时间】:2020-11-12 01:54:24
【问题描述】:
我已经尝试了几种方法来实现这一点,但似乎都没有奏效, 似乎 CodeIgniter 4 无法将多个过滤器应用于单个路由,目前这是我正在尝试的:
提供InfoFilter.php:
<?php namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;
class ProvideinfoFilter implements FilterInterface
{
public function before(RequestInterface $request, $arguments = null)
{
echo "pinfo";
$account_data = new \App\Libraries\Account_Data;
return $account_data->no_info_redirect();
}
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
}
}
AccessFilter.php:
<?php namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;
class AccessFilter implements FilterInterface
{
public function before(RequestInterface $request, $arguments = null)
{
$account_data = new \App\Libraries\Account_Data;
echo "accessf";
if ($request->uri->getSegment(1) !== 'm' && $request->uri->getSegment(2) !== 'm' && !$request->getGet('token'))
{
return $account_data->is_logged_in();
}
}
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
}
}
Filters.php:
<?php namespace Config;
use CodeIgniter\Config\BaseConfig;
class Filters extends BaseConfig
{
public $aliases = [
'toolbar' => \CodeIgniter\Filters\DebugToolbar::class,
'accesscontrol' => \App\Filters\AccessFilter::class,
'provide_info' => \App\Filters\ProvideinfoFilter::class
];
public $globals = [
'before' => [
],
'after' => [
'toolbar'
],
];
public $methods = [];
public $filters = [
'provide_info' => ['before' => ['user', 'user/*']],
'accesscontrol' => ['before' => ['user', 'user/*']]
];
}
我添加了用于调试的 echo 语句
问题是,注释掉'accesscontrol' => ['before' => ['user', 'user/*']] 或'provide_info' => ['before' => ['user', 'user/*']] 会应用任何一个过滤器,并且可以在输出中看到回显的字符串。但是像上面演示的那样同时使用它们并不适用于它们。
运行这两个过滤器对我来说很重要,因为我想使用 $globals 数组为每个过滤器应用特定的豁免。
【问题讨论】:
-
如果您希望多个过滤器一个接一个地运行,则不应在之前的过滤器中返回某些内容。
$account_data->is_logged_in()和$account_data->no_info_redirect()返回了什么? -
@ViLar 都返回一个 CI 4 重定向对象
标签: php filter routes controller codeigniter-4