我正在尝试在Laravel控制器中使用非laravel composer包。我已经将项目添加到composer.json文件中,如下所示:
"require": {
"laravel/framework": "5.0.*",
"php": ">=5.4.0",
"abraham/twitteroauth": "0.5.2"
},
然后我跑了:
composer update
在项目中,已按预期在vendor /目录中安装了软件包,我在那里看到了它。但是,将以下代码添加到控制器时:
<?php
namespace App\Http\Controllers;
class HomeController extends Controller {
use Abraham\TwitterOAuth\TwitterOAuth;
public function index()
{
$o = new TwitterOauth();
return view('home');
}
Laravel返回以下错误:
Trait'App \ Http \ Controllers \ Abraham \ TwitterOAuth \ TwitterOAuth'未找到
我怀疑这与已声明命名空间这一事实有关,但我对PHP名称空间的了解不足以解决问题。
欢迎任何帮助!
答案 0 :(得分:4)
您的控制器文件位于App\Http\Controllers
命名空间
namespace App\Http\Controllers;
您试图使用相对类/特征名称
向控制器添加特征use Abraham\TwitterOAuth\TwitterOAuth;
如果您使用相对特征名称,PHP会假设您想要当前命名空间中的特征 ,这就是它抱怨的原因
App\Http\Controllers\Abraham\TwitterOAuth\TwitterOAuth
或
App\Http\Controllers\
combined with
Abraham\TwitterOAuth\TwitterOAuth
尝试使用绝对特征名称,你应该没问题
use \Abraham\TwitterOAuth\TwitterOAuth;
或者,将TwitterOAuth
导入当前名称空间
namespace App\Http\Controllers;
use Abraham\TwitterOAuth\TwitterOAuth;
然后使用短名称
class HomeController extends Controller {
use TwitterOAuth;
}
更新:
好的,我们可以责怪PHP在这里使用use
。在你的课程定义中,你说
class HomeController extends Controller {
use Abraham\TwitterOAuth\TwitterOAuth;
public function index()
{
$o = new TwitterOauth();
return view('home');
}
}
当你在一个类中使用use
时,PHP会将其解释为&#34;将此特征应用于此类&#34;。我不熟悉这个库,所以我认为Abraham\TwitterOAuth\TwitterOAuth
是一个特征。不是。
当你使用类定义的use
时,你要告诉PHP要在这个命名空间中使用这个类而没有名称空间前缀&#34; 。如果您从班级中删除use
语句
class HomeController extends Controller {
//use Abraham\TwitterOAuth\TwitterOAuth;
}
并将其放在namespace
关键字
namespace App\Http\Controllers;
use Abraham\TwitterOAuth\TwitterOAuth;
您应该能够使用类TwitterOAuth
来实例化对象。