我是Laravel新手。 我正在控制器方法中编写以下代码。
include_once(app_path() .'/Classes/Pgp_2fa.php');
$pgp = new Pgp_2fa();
显示以下错误。
AuthController.php第146行中的FatalThrowableError:类 找不到“ App \ Http \ Controllers \ Pgp_2fa”
答案 0 :(得分:2)
您必须为类使用正确的名称空间。
如果不使用任何名称空间,则应在类前面添加\
,以使php知道该类存在于根名称空间中。否则,当您在控制器中时,php将在当前的命名空间App\Http\Controllers
中查找。
$pgp = new \Pgp_2fa();
这不仅是Laravel的行为,还是一般的php。
答案 1 :(得分:2)
您需要为自定义类添加名称空间 或者只是在您的班级名称上添加斜线。就像:
$pgp = new \Pgp_2fa();
答案 2 :(得分:2)
添加新类时,有几种使用方法。 (我是说,加载它们)
如果您的类具有唯一的名称并且不使用名称空间,则可以在类的开头添加反斜杠\
。
$class = new \Pgp_2fa;
但是如果要定义它们的名称空间并使用相同的名称,则 很多次,那么您必须在composer.json中添加这些类。打开你的 composer.json并进入“自动加载”部分并定义类 类映射中的目录
"autoload": {
"classmap": [
"database/seeds",
"database/factories",
"app/Classes", // so all classes in this directory are going to load
],
在进行这些更改并创建新的类之后,别忘了说composer dump-autoload
如果您不想在添加新类时转储作曲家, 那么您可能需要在作曲家的
psr-4
部分中添加这些类
"autoload": {
"psr-4": {
"App\\": "app/",
"App\\Classes\\": "app/Classes",
}
},
答案 3 :(得分:0)
您可以像下面那样在内部构造函数中调用,并且可以使用 其余函数中的 $ Pgp_2fa 变量
class controllername extends Controller
{
public function __construct(Route $route,Request $request)
{
$Pgp_2fa = new \Pgp_2fa();
}
}
答案 4 :(得分:0)
您可以通过将自定义类添加到Composer的自动加载数组中来轻松添加自定义类。转到composer.json并将其添加到:
"autoload": {
"files": [
"app\\Classes\\Pgp_2fa.php"
]
},
现在,在您的应用文件夹中的classes文件夹下,添加将包含您的课程的Pgp_2fa.php文件。您可以在任何需要的地方使用它,它应该会自动自动加载。
添加班级写命令后:
composer dumpautoload刷新自动加载类映射。
答案 5 :(得分:0)
例如,在应用程序目录中名为Mylibs的目录中有我们的类 Common.php 。
app / mylibs / Common.php 我们需要命名空间App \ Mylibs ;
namespace App\Mylibs;
class Common {
public function getSite() {
return 'AmirHome.com';
}
}
现在,您可以像其他Laravel类一样使用类中的命名空间访问此类。
使用App \ Mylibs \ Common
在控制器中:
namespace App\Http\Controllers;
use App\Mylibs\Common;
class TestController extends Controller {
protected $common;
public function __construct(Common $common) {
$this->common = $common;
}
public function index() {
echo $this->common->getSite();
}
}