Php 尽管在RouteServiceProvider中取消注释,但控制器在Laravel 8上不工作

Php 尽管在RouteServiceProvider中取消注释,但控制器在Laravel 8上不工作,php,laravel,routes,controller,namespaces,Php,Laravel,Routes,Controller,Namespaces,我尝试创建到我的index.blade.php页面的路由,我使用cmdphp artisan make:controller-ProductController制作了一个控制器“ProductController”,因此在http-->控制器中我有一个ProductController.php文件,并将此代码放入其中: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class ProductCon

我尝试创建到我的
index.blade.php
页面的路由,我使用cmd
php artisan make:controller-ProductController
制作了一个控制器“ProductController”,因此在http-->控制器中我有一个ProductController.php文件,并将此代码放入其中:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ProductContoller extends Controller
{
    public function index()
    {
        return view('products.index');
    }
}
但是它不起作用

首先,当我使用Laragon-->
Projetname.test
进入本地主机上为我的项目设置的漂亮url时,我会看到正常的Laravel欢迎页面,但当我尝试进入url时,我只会像这样设置:
ProjectName.test/boutile
,我会看到

“目标类[App\Http\Controllers\ProductController]不存在。”

在阅读了自Laravel更新为V8以来的更改之后,我发现更新对路由提出了一些要求,因为$namespace prefix不是自动启用的,但是可以通过在
RouteServiceProvider

// protected $namespace = 'App\\Http\\Controllers';
我会取消对该行的注释,然后使用
php-artisan-route:cache
清除缓存,但它仍然不工作

当我第一次开始在Laravel中研究路由问题时,我看到许多论坛发现httpd.config文件中的apache Allowoverride设置可能会导致问题,所以我将其设置从
None
更改为
All
,然后重新启动Laragon,但没有任何效果

在更正控制器上的标签后,它仍然不起作用,我尝试了两种方法(旧方法和新方法)。它们对我都不起作用,cmd不断返回我:

λ php artisan route:list

   Illuminate\Contracts\Container\BindingResolutionException

  Target class [ProductController] does not exist.

  at C:\laragon\www\ProjectName\vendor\laravel\framework\src\Illuminate\Container\Container.php:835
    831▕
    832▕         try {
    833▕             $reflector = new ReflectionClass($concrete);
    834▕         } catch (ReflectionException $e) {
  ➜ 835▕             throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e);
    836▕         }
    837▕
    838▕         // If the type is not instantiable, the developer is attempting to resolve
    839▕         // an abstract type such as an Interface or Abstract Class and there is

  1   [internal]:0
      Illuminate\Foundation\Console\RouteListCommand::Illuminate\Foundation\Console\{closure}(Object(Illuminate\Routing\Route))

  2   C:\laragon\www\ProjectName\vendor\laravel\framework\src\Illuminate\Container\Container.php:833


      ReflectionException::("Class "ProductController" does not exist")

拉雷维尔8号线应为

Route::get('/boutique', [NameController:class,'method']);
因此,在web.php文件中添加

 use  App\Http\Controllers\ProductContoller
然后像这样写下你的路线:

Route::get('/boutique', [ProductContoller::class,'index']);

我认为在你的“ProductController”类名中缺少了一个“r”我在这里看了一篇关于新路由方法最常见问题的教程后发现,当取消对RouteServiceProvider的注释时,使用旧方法需要在web.php上也使用旧路由方法,看起来是这样的:

Route::get('/boutique', 'ProductController@index');
请使用

Route::get('/boutique', '\App\Http\Controllers\ProductController@index');
或者使用名称route group并指明名称空间

Route::group(['namespace' => 'App\Http\Controllers'], function(){
  Route::get('/boutique', 'ProductController@index');
});

让我知道它是如何工作的。

ProductController.php
class-ProductController
<代码>产品控制器!=ProductController不确定是否能完全理解,您能给出您的答案吗?只要阅读,您应该能够看到区别:-)名称不同现在我得到“语法错误,意外标记“返回”,期望“函数”或“常量”使用stacktrace。。。然后你就会知道错误是由哪一行引起的,这样你就可以知道要修复什么了是的,我确实删除了我以前的控制器,清除了缓存,然后用“controller”创建了一个新的控制器,但是现在我有这个错误“语法错误,意外的标记“return”,期望“function”或“const”,我也不需要使用如果我在RouteServiceProvider中取消了名称空间的注释,请在我的web.php中使用App\Http\Controllers\ProductContoller?也是在这个错误之前,我在进入ProjectName时在chrome中遇到了错误404。测试/精品店是否缺少一个“:“在ProductController::class之间?是的,谢谢你的提醒,我在@JawadBouna–s修复了它。我猜不出新错误的原因,如果可能的话,尝试进一步澄清它@JawadBouna–s”
Route::group(['namespace' => 'App\Http\Controllers'], function(){
  Route::get('/boutique', 'ProductController@index');
});