php 代码点火器4:如何从Controllers/api子文件夹访问控制器方法?

sczxawaw  于 2022-12-02  发布在  PHP
关注(0)|答案(1)|浏览(135)

我正在使用Codeigniter 4创建一个项目。除了对“Controllers/api”子文件夹中的控制器的调用之外,一切都正常。
安装Rocky Linux 8.7版(绿色黑曜石)的服务器。Apache Php 8.1
php控制器的url是https://test.myweb.com/api/usr,即/home/test/public_html/app/控制器/api/Usr. php
我尝试使用“curl”获取Usr.php的任何方法的内容,例如“login”:但是我总是得到404。
我尝试在system/Config/Routes.php中放入以下代码行:

$routes->resource('api/usr');
$route['api'] = 'api';
But I always get a 404.

我也尝试过在app/Config/Routes.php中:

$route['api/(:any)'] = 'api\$1';
$routes->resource('App\Controllers\api');
$route['api/usr'] = 'https://test.myweb.com/api/Usr';
$route['api/([^/]+)'] = 'api/usr/$1';

没有结果。这是.htaccess:

RewriteEngine On
#Deny Access
RewriteRule "^(.*/)?\.gitignore" - [F,L]
RewriteRule "^(.*/)?\_sql/" - [F,L]
RewriteRule "^(.*/)?doc-project/" - [F,L]
RewriteRule "^(.*/)?\.git/" - [F,L]
RewriteRule "^(.*/)?README.md" - [F,L]

#Force HTTPS
RewriteCond %{HTTPS} off
RewriteCond %{SERVER_ADDR} !=127.0.0.1
RewriteCond %{SERVER_ADDR} !=::1
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteRule ^(.*)$ index.php?/ [L]
RewriteCond $1 !^(index\.php|images|php|script|styles|js|css)

<IfModule mod_rewrite.c>
    RewriteBase /        
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>

知道吗?谢谢。

mrphzbgm

mrphzbgm1#

在CodeIgniter 4中,我们修改文件system/Config/Routes.php,因为它是CodeIgniter 4核心框架的一部分。在那里所做的任何更改都可能在框架升级后被覆盖。您应该改为在文件中添加自定义路由定义:app/Config/Routes.php .
代码触发器4:设置路由规则
其次,您似乎将CodeIgniter v3与CodeIgniter v4路由定义/规则语法混合在一起。例如:
从3.x升级到4.x /升级路由

  • test.myweb.com/api/usr/login*

| 编号|CI第3版|CI第4版|
| - -|- -|- -|
| 路由文件路径| * 应用程序/配置/路由.php*|* 应用程序/配置/路由.php*|
| 路由规则|$route['api/usr/login']['GET'] = 'api/usr/login';| $routes->get('api/usr/login', '\App\Controllers\api\Usr::login');|
| 控制器路径| * 应用程序/控制器/api/Usr.php*|* 应用程序/控制器/api/Usr.php*|

附录

在CodeIgniter 4中,不要忘记禁用自动路由。即:

  • 应用程序/配置/路由.php*
// ...
$routes->setAutoRoute(false);
// ...

相关问题