簡體   English   中英

在 Laravel 5.1 中獲取“找不到類 'app\\Http\\Controllers\\Controller'”

[英]Getting “Class 'app\Http\Controllers\Controller' not found” in Laravel 5.1

我對 Laravel 還很陌生,當我在學習教程時遇到此錯誤。 這是我在“testController.php”中的代碼。

<?php

namespace app\Http\Controllers;

use app\Http\Controllers\Controller;

class testController extends \app\Http\Controllers\Controller {

public function getAbout()
{
    return view('Learning.about') ;
}

public function getHome()
{
    return view('Learning.index');
}

}

這是我的“routes.php”。

<?php
Route::get('test', [
   'as' => 'test', 
   'uses' => 'testController@getHome',
]);

Route::get('about', [
    'as' => 'about', 
    'uses' => 'testController@getAbout',
]);

我收到此錯誤:

找不到類“app\\Http\\Controllers\\Controller”

我該如何解決這個錯誤?

讓我們一步一步來。

1. 檢查 composer.json 上的 autoload 指令

打開項目根目錄中的composer.json文件。 找到autoload部分。 它應該是這樣的:

{
    ...
    "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
}

確保你在psr-4選項下有這個配置:

"App\\": "app/"

此配置告訴作曲家我們要使用psr-4約定自動加載app目錄中的所有類,並將其放置在App命名空間下。

2. 更新您的控制器

首先,您的控制器文件名應該是駝峰式風格。 所以我們必須將它重命名為TestController.php 確保它保存在app/Http/Controllers目錄下。

現在打開您的TestController.php文件,我們必須將命名空間和類名大寫,如下所示:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class TestController extends Controller {
    public function getAbout()
    {
        return view('Learning.about') ;
    }

    public function getHome()
    {
        return view('Learning.index');
    }
}

請注意,我們也轉了這一行:

class testController extends \app\Http\Controllers\Controller

進入:

class TestController extends Controller

因為我們已經導入了基本的Controller類,所以我們不必指定完全限定的名稱。 我們使用use關鍵字導入了Controller類:

use App\Http\Controllers\Controller;

保存您的TestController.php文件。

3. 更新你的路由文件

現在我們必須更新我們的app\\Http\\routes.php文件。 我們只需要大寫控制器名稱:

<?php

Route::get('test', ['uses' => 'TestController@getHome', 'as' => 'test']);

Route::get('about', ['uses' => 'TestController@getAbout', 'as' => 'about']);

4 更新您的自動加載器

現在要做的最后一件事。 打開終端/命令提示符。 轉到您的項目目錄並運行以下命令:

composer dump-autoload

此命令將更新自動加載器文件(在此處閱讀更多信息)。

現在,如果您打開瀏覽器並點擊/test路由,您應該會看到來自resources/views/Learning/index.blade

使用正確的命名空間:

namespace App\Http\Controllers;

// Remove: use app\Http\Controllers\Controller;

class testController extends Controller {

根據我在 Laravel 項目中的經驗,命名空間以命名空間中使用的App的大寫字母A開頭,您應該嘗試將代碼更改為:

namespace App\Http\Controllers;

class testController extends Controller { }

還要檢查控制器 - App\\Http\\Controllers\\Controller是否與您的代碼中提到的命名空間相同。

將此包含在控制器文件的頂部。 這為我修好了。

namespace App\Http\Controllers;

在某些情況下,問題是框架無法實例化給定的控制器類。 例如,如果您使用Controllers下的子文件夾,並且當您擴展Controller.php類時,您沒有為該定義提供use語句*,則可能會發生這種情況。 其他運行時錯誤也可能導致這種情況。

*現在是必需的,因為您自己的控制器不再位於Controller文件夾的根目錄下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM