![](/img/trans.png)
[英]Laravel Class 'App\Http\Controllers\Controller' not found
[英]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”
我該如何解決這個錯誤?
讓我們一步一步來。
打開項目根目錄中的composer.json
文件。 找到autoload
部分。 它應該是這樣的:
{
...
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
}
},
}
確保你在psr-4
選項下有這個配置:
"App\\": "app/"
此配置告訴作曲家我們要使用psr-4約定自動加載app
目錄中的所有類,並將其放置在App
命名空間下。
首先,您的控制器文件名應該是駝峰式風格。 所以我們必須將它重命名為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
文件。
現在我們必須更新我們的app\\Http\\routes.php
文件。 我們只需要大寫控制器名稱:
<?php
Route::get('test', ['uses' => 'TestController@getHome', 'as' => 'test']);
Route::get('about', ['uses' => 'TestController@getAbout', 'as' => 'about']);
現在要做的最后一件事。 打開終端/命令提示符。 轉到您的項目目錄並運行以下命令:
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.