Laravel 5.2 Class 未找到,但 class 有命名空间
Laravel 5.2 Class not found but class is there with namespace
UPDATE 01/26/16 10:30pm EST: 通过大量 Google 搜索,我发现我误解了如何利用命名空间和自定义类。如果其他人遇到此问题,请阅读本教程:http://www.techigniter.in/tutorials/how-to-add-custom-class-in-laravel-5/
它很短而且很容易理解。它帮助解决了这个问题并将我带到了下一个错误...:D
问题:
尝试全新安装 Laravel 5 并将我的 Laravel 4 代码转换为 Laravel 5.
请求:请帮助我找出错误并提供有关如何更正错误的详细说明。
错误:
additionalPCs.php 第 4 行中的 FatalErrorException:
Class 'App\Library\AdditionalPCs\additionalComputer' 未找到
注意事项: 我已将 additionalComputer.php 文件放在其自己的目录 App\Libary\additionalPCs 中,并直接放入 App\Libary 目录中。这两个地方都产生相同的错误。我正在使用名称空间。 (可能不正确)
Composer.json
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\": "app/"
}
},
IndexController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Library\additionalPCs;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class IndexController extends Controller
{
Protected $layout = 'master';
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
/** Wayne - 03-02-2014 - Moved for loop to a method within its own class. */
$numberofpcs = new additionalPCs();
$addtpcs=$numberofpcs->display();
$this->layout->content = View::make('index')->with('addtpcs', $addtpcs)->with('businesstypelist', businesstype::dropdown())->with('contracttermlist',ContractTerm::dropdown());
}
}
additionalPCs.php
<?php
namespace App\Library;
class additionalPCs extends additionalComputer {
public function display() {
return $this->displayMenu();
}
}
additionalComputer.php(我也尝试过使用App\Library\additionalComputer;)
<?php
namespace App\Library;
use App\Library\AdditionalPCs\additionalComputer;
class additionalPCs extends additionalComputer {
public function display() {
return $this->displayMenu();
}
}
每个 class 的命名空间是 class 的容器目录,而不是 class 文件本身。
在命名空间的 additionalPCs.php 文件中,删除 \AdditionalPCs,它应该只是:
namespace App\Library;
在您 post 更新后更新:
你想使用additionalComputer,所以你必须导入他的命名空间,像这样:
<?php
namespace App\Library;
use App\Library\additionalComputer;
class additionalPCs extends additionalComputer {
public function display() {
return $this->displayMenu();
}
}
(为 additionalComputer 添加了命名空间导入)
原文post:
你的图书馆里有这行:
namespace App\Library\AdditionalPCs;
要使用 AdditionalPCs(例如在您的控制器中),更改:
use App\Library\AdditionalPCs;
至
use App\Library\AdditionalPCs\AdditionalPCs;
The first AdditionalPCs
is from your namespace, the second is your class name. Your class AdditionalPCs is in the sub namespace AdditionalPCs.
重要:是new AdditionalPCs()
(看开头A
而不是a
),一定是你的class姓名完全!这是一般规则!
注意你的名字(区分大小写)。最好使用 PSR-2 中的代码约定:https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md
UPDATE 01/26/16 10:30pm EST: 通过大量 Google 搜索,我发现我误解了如何利用命名空间和自定义类。如果其他人遇到此问题,请阅读本教程:http://www.techigniter.in/tutorials/how-to-add-custom-class-in-laravel-5/ 它很短而且很容易理解。它帮助解决了这个问题并将我带到了下一个错误...:D
问题: 尝试全新安装 Laravel 5 并将我的 Laravel 4 代码转换为 Laravel 5.
请求:请帮助我找出错误并提供有关如何更正错误的详细说明。
错误: additionalPCs.php 第 4 行中的 FatalErrorException: Class 'App\Library\AdditionalPCs\additionalComputer' 未找到
注意事项: 我已将 additionalComputer.php 文件放在其自己的目录 App\Libary\additionalPCs 中,并直接放入 App\Libary 目录中。这两个地方都产生相同的错误。我正在使用名称空间。 (可能不正确)
Composer.json
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\": "app/"
}
},
IndexController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Library\additionalPCs;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class IndexController extends Controller
{
Protected $layout = 'master';
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
/** Wayne - 03-02-2014 - Moved for loop to a method within its own class. */
$numberofpcs = new additionalPCs();
$addtpcs=$numberofpcs->display();
$this->layout->content = View::make('index')->with('addtpcs', $addtpcs)->with('businesstypelist', businesstype::dropdown())->with('contracttermlist',ContractTerm::dropdown());
}
}
additionalPCs.php
<?php
namespace App\Library;
class additionalPCs extends additionalComputer {
public function display() {
return $this->displayMenu();
}
}
additionalComputer.php(我也尝试过使用App\Library\additionalComputer;)
<?php
namespace App\Library;
use App\Library\AdditionalPCs\additionalComputer;
class additionalPCs extends additionalComputer {
public function display() {
return $this->displayMenu();
}
}
每个 class 的命名空间是 class 的容器目录,而不是 class 文件本身。
在命名空间的 additionalPCs.php 文件中,删除 \AdditionalPCs,它应该只是:
namespace App\Library;
在您 post 更新后更新:
你想使用additionalComputer,所以你必须导入他的命名空间,像这样:
<?php
namespace App\Library;
use App\Library\additionalComputer;
class additionalPCs extends additionalComputer {
public function display() {
return $this->displayMenu();
}
}
(为 additionalComputer 添加了命名空间导入)
原文post:
你的图书馆里有这行:
namespace App\Library\AdditionalPCs;
要使用 AdditionalPCs(例如在您的控制器中),更改:
use App\Library\AdditionalPCs;
至
use App\Library\AdditionalPCs\AdditionalPCs;
The first
AdditionalPCs
is from your namespace, the second is your class name. Your class AdditionalPCs is in the sub namespace AdditionalPCs.
重要:是new AdditionalPCs()
(看开头A
而不是a
),一定是你的class姓名完全!这是一般规则!
注意你的名字(区分大小写)。最好使用 PSR-2 中的代码约定:https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md