【问题标题】:I can't get the Controller in the laravel我无法在 laravel 中获取控制器
【发布时间】:2021-01-28 01:05:50
【问题描述】:

我在访问通过终端创建的控制器时遇到问题:

php artisan make:controller Admin\TestController

这是我创建的 TestController 类

<?php

namespace App\Http\Controllers\Admin;

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

class TestController extends Controller
{
    public function teste()
    {
        return 'Teste Controller';
    }
}

这是路由文件,我将尝试在其中调用teste 方法。默认情况下,正确的做法是调用 Admin 文件夹中的 TestController。

<?php

use Illuminate\Support\Facades\Route;

Route::get('/test', 'Admin\TestController@teste');

在我更新页面时的Web.php文件中,出现消息:

Illuminate\Contracts\Container\BindingResolutionException Target class
[Admin\TestController] does not exist.

只有在我放置完整目录时才有效:

<?php

use Illuminate\Support\Facades\Route;

Route::get('/test', 'App\Http\Controllers\Admin\TestController@teste');

但出于精简代码和易于理解的原因,我不想放置完整的目录。

如何在不放置完整目录的情况下调用 TestController?

我正在使用 Laravel 框架:8.9.0

我正在使用 php:7.2.19 (cli)

【问题讨论】:

    标签: php laravel laravel-8


    【解决方案1】:

    根据 Laravel 8upgrade 文档,您可以像这样使用 PHP 可调用语法:

    use App\Http\Controllers\Admin\TestController;
    
    Route::get('/test', [TestController::class, 'teste']);
    

    【讨论】:

      【解决方案2】:

      这是因为您使用的是最新版本的 Laravel。 阅读最新 Laravel 版本的文档here

      【讨论】:

        【解决方案3】:

        是的,如上所述,对于新的 Laravel 版本 8.x,在 routes.php 中,您必须以数组格式提及控制器类,例如

        <?php
        use App\Http\Controllers\Controller_Name;
        
        Route::get('/', [Controller_Name::class,'Function_Name']); ?>
        

        别忘了导入那个控制器类。

        这是 Laravel 8.x 的 link 引用路由。

        希望对您有所帮助。谢谢你

        【讨论】:

          猜你喜欢
          • 2018-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-28
          • 2022-01-09
          • 2017-05-23
          • 2022-12-05
          • 2020-09-24
          相关资源
          最近更新 更多