Here is my controller:

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class RegisterController extends Controller
{
    public function register(Request $request)
    {
        dd('aa');
    }
}

如屏幕截图所示,该类存在并且位于正确的位置:

enter image description here

My 100 route:

Route::get('register', 'Api\RegisterController@register');

当我使用postman 点击我的register路由时,它给了我以下错误:

目标类[Api\RegisterController]不存在.


Update:

多亏了这个答案,我才把它修好.我决定对这个路由使用完全限定的类名,但还有其他选项,如答案中所述.

Route::get('register', 'App\Http\Controllers\Api\RegisterController@register');

推荐答案

你使用的是Laravel 8.在新安装的Laravel 8中,没有将名称空间前缀应用于路由加载到的路由组.

"在以前版本的Laravel中,RouteServiceProvider包含$namespace属性.此属性值将自动添加到控制器路由定义和对action helper/URL::action方法的调用中.在Laravel 8.x中,此属性默认为null.这意味着Laravel不会自动添加名称空间前缀."Laravel 8.x Docs - Release Notes

在不使用命名空间前缀的情况下,在路由中引用控制器时,必须使用控制器的完全限定类名.

use App\Http\Controllers\UserController;

Route::get('/users', [UserController::class, 'index']);
// or
Route::get('/users', 'App\Http\Controllers\UserController@index');

如果你喜欢老办法:

App\Providers\RouteServiceProvider:

public function boot()
{
    ...

    Route::prefix('api')
        ->middleware('api')
        ->namespace('App\Http\Controllers') // <---------
        ->group(base_path('routes/api.php'));

    ...
}

对任何想要为其声明名称空间的路由组执行此操作.

The 100 property:

虽然在发布说明中提到要在RouteServiceProvider上设置$namespace属性,并在RouteServiceProvider中进行了 comments ,但这不会对您的路由产生任何影响.它目前仅用于添加名称空间前缀,以生成动作的URL.因此,您可以设置此变量,但它本身不会添加这些名称空间前缀,因此在将名称空间添加到路由组时,您仍必须确保使用此变量.

This information is now in the Upgrade Guide

Laravel 8.x Docs - Upgrade Guide - Routing

升级指南向important部分展示的内容是,您正在路由组上定义名称空间.将$namespace变量本身设置为only有助于生成操作的URL.

再次强调,important部分是为路由组设置名称空间,它们恰好是通过在示例中直接引用成员变量$namespace来实现的.

更新:

如果从laravel/laravel版的8.0.2开始安装了Laravel 8的新副本,则可以在RouteServiceProvider中取消对protected $namespace成员变量的注释,以回到原来的方式,因为路由组被设置为使用该成员变量作为组的名称空间.

// protected $namespace = 'App\\Http\\Controllers';

取消注释会将名称空间前缀添加到分配给路由的控制器的only个原因是,路由组被设置为使用此变量作为名称空间:

...
->namespace($this->namespace)
...

Php相关问答推荐

FatFreeFramework上的不同路由

在函数内部获取一致的单选按钮值以更新WordPress用户数据

在php中有没有办法比较两个包含相同枚举类型的枚举数组

PHP日期操作,将多个日期输出为格式化字符串

在WooCommerce产品中按类型对产品属性术语进行分类以供显示

在Laravel中修改JSON输出

在WooCommerce管理中 for each 运输方法设置添加自定义字段

使用ESI的Symfony Sulu清漆

PHP:使用FORT从数据库获取USERS表到AUTH表

用户注册表单中的 HTTP 错误 405

Symfony:从控制器内部调用自定义命令

由于 PHP 版本不受支持,如何终止 PHP 脚本?

尽管有use指令,PHP 类在其他文件中仍处于可见状态

避免在 WooCommerce 中多次触发挂钩函数

Google Sheets PHP API - 添加多个选项卡时出现问题

WooCommerce checkout 流程中基于所选选项添加自定义费用

显示时间范围内的可用空位,同时考虑已预订的空位

如何用 php ML 解决这个问题?

如何在 WooCommerce 中显示每个自定义选项卡的内容

将样式文件或脚本引入WordPress模板