我是laravel的新手并导入现有的php网站。 我创建了一个名为“List”的控制器,然后我需要创建一个类的对象,编码在一个包含include_once()的文件中,如图所示,
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
$INCLUDE_ROOT = 'path/to/file';
include_once($INCLUDE_ROOT . "ServiceDetails.class.php");
class Lists extends Controller
{
public function show()
{
$objServiceDetails= new ServiceDetails;
.........
........
}
}
但是我收到了像
这样的错误致命错误:未找到类'App \ Http \ Controllers \ ServiceDetails
我对命名空间“use”和“as”并不了解。 可能这就是为什么我无法解决这个问题。 在创建一个新对象时,它只在命名空间位置搜索类,但我认为它也应该查看包含的文件。
答案 0 :(得分:3)
如果当前文件中存在命名空间,PHP将尝试在当前命名空间中查找类,如果找不到它,则会出现致命错误。您应该打开ServiceDetails.class.php
类来验证文件开头是否有namespace ...;
(<?php
之后)。如果没有,您可以在以下内容之后简单地添加Lists
文件:
use App\Http\Controllers\Controller;
以下一行:
use ServiceDetails
如果是,则应复制该命名空间并添加以下行:
use namespaceyoucopied\ServiceDetails;
当然在namespaceyoucopied
地方你需要放置正确的复制命名空间,所以它看起来像这样:
use A\B\C\ServiceDetails;
您还可以查看How to use objects from other namespaces and how to import namespaces in PHP或PHP namespaces manual
答案 1 :(得分:2)
您只需要为该类添加use
语句,以便当前文件中的类可以&#34;参见&#34;它
<?php
namespace App\Http\Controllers;
$INCLUDE_ROOT = 'path/to/file';
include_once($INCLUDE_ROOT . "ServiceDetails.class.php");
use App\Http\Controllers\Controller;
use Namespace\To\ServiceDetails;
class Lists extends Controller
{
public function show()
{
$objServiceDetails= new ServiceDetails;
.........
........
}
}
但是,如果您正在使用Laravel并执行此操作,那么您并未充分利用自动加载功能。我建议您将此文件放在应用程序的命名空间目录中,并按照PSR-4进行操作。然后Laravel会为你加载它,它会让你的类文件看起来干净。
将文件放在如下路径中:/path/to/projectRoot/app/Lib/ServiceDetails.php
。然后使文件看起来如下所示,它遵循PSR-4:
<?php namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Lib\ServiceDetails;
class Lists extends Controller
{
public function show()
{
$objServiceDetails= new ServiceDetails;
.........
........
}
}