Codeigniter 4: Как я могу получить доступ к методам контроллера из подпапки Controllers/api?

Я создаю проект с помощью Codeigniter 4. Все работает нормально, за исключением вызовов контроллеров в подпапке «Controllers/api».

Сервер с Rocky Linux версии 8.7 (Green Obsidian) ID_LIKE="rhel centos fedora". Апач Php 8.1

URL-адрес контроллера Usr.php: https://test.myweb.com/api/usr, то есть /home/test/public_html/app/Controllers/api/Usr.php

Я пытаюсь увидеть содержимое любого из методов Usr.php, но это не работает. Ответ: «404 — файл не найден. HTTP.controllerNotFound"

Я попытался добавить в 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';

$routes->get('api/usr', '\App\Controllers\api\Usr');

Без результатов. Это Usr.php:

<?php
namespace App\Controllers\Api;
use CodeIgniter\Controller;

class Usr extends Controller {

    public function index(){
        echo "OK INDEX";die;
    }
}

Это .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>

Есть идеи? Спасибо.

Сначала попробуйте заставить его работать в браузере - это исключит проблемы с Curl и другие проблемы. Убедитесь также, что бит Usr в URL-адресе не чувствителен к регистру, так как иногда это может быть проблемой.

Antony 01.12.2022 12:59

Спасибо. Я сократил тест до максимума, отредактировал вопрос. Я последовал вашему совету, но он все еще не работает.

Telerín 04.12.2022 13:06

@Telerin Пожалуйста, избегайте изменения вопроса таким образом, чтобы сделать недействительными уже существующие ответы. Вопросы не должны быть движущимися мишенями. Если вы столкнулись с совершенно другой проблемой, изучите ее, запросите разъяснения в комментариях или задайте новый вопрос.

steven7mwesigwa 04.12.2022 19:54
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В CodeIgniter 4 мы не изменяем файл system/Config/Routes.php, так как он является частью ядра CodeIgniter 4. Любые внесенные там изменения, скорее всего, будут переопределены после обновления фреймворка. Вместо этого вы должны добавить свои собственные определения маршрутов в файл: app/Config/Routes.php.

CodeIgniter 4: Настройка правил маршрутизации

Во-вторых, вы, кажется, смешиваете CodeIgniter v3 с синтаксисом определения/правила маршрута CodeIgniter v4. То есть:

Обновление с 3.x до 4.x / Upgrade Routing

test.myweb.com/api/usr/логин

# КИ v3 КИ v4 путь к файлу маршрута приложение/config/routes.phpapp/Config/Routes.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 не забудьте отключить автомаршрутизацию. То есть:

приложение/Конфигурация/Routes.php

// ...
$routes->setAutoRoute(false);
// ...

Хорошо, на маршрутах я использовал C3. попробую и прокомментирую.

Telerín 04.12.2022 12:04

Я установил $routes->setAutoRoute(true). Если я установлю для него значение false, должен ли я также указать все пути для всех контроллеров, системы, представлений, моделей и т. д.? Спасибо

Telerín 04.12.2022 12:07

Важно: я отредактировал вопрос.

Telerín 04.12.2022 12:48

Другие вопросы по теме