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
页面的路由,我使用cmdphp 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');
});