Laravel 在控制器中使用非 laravel 作曲家包
Laravel use non-laravel composer package in controller
我正在尝试在 Laravel 控制器中使用非 laravel 作曲家包。我已将项目添加到 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 returns 出现如下错误:
Trait 'App\Http\Controllers\Abraham\TwitterOAuth\TwitterOAuth' not found
我怀疑这与已声明命名空间这一事实有关,但我对 PHP 命名空间的了解不足以解决此问题。
欢迎任何帮助!
您的控制器文件位于 App\Http\Controllers
命名空间
namespace App\Http\Controllers;
您试图使用相对 class/trait 名称向您的控制器添加特征
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 定义中,你说
class HomeController extends Controller {
use Abraham\TwitterOAuth\TwitterOAuth;
public function index()
{
$o = new TwitterOauth();
return view('home');
}
}
当您在 class 中使用 use
时,PHP 会将其解释为 "apply this trait to this class"。我不熟悉图书馆,所以我认为 Abraham\TwitterOAuth\TwitterOAuth
是一个特征。不是。
当您在 class 定义的 use
外部使用 时,您是在告诉 PHP 到 "use this class in this namespace without a namespace prefix"。如果您从 class
中删除 use
语句
class HomeController extends Controller {
//use Abraham\TwitterOAuth\TwitterOAuth;
}
并将其放在外面,namespace
关键字
下
namespace App\Http\Controllers;
use Abraham\TwitterOAuth\TwitterOAuth;
您应该能够使用 class TwitterOAuth
来实例化您的对象。
我正在尝试在 Laravel 控制器中使用非 laravel 作曲家包。我已将项目添加到 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 returns 出现如下错误:
Trait 'App\Http\Controllers\Abraham\TwitterOAuth\TwitterOAuth' not found
我怀疑这与已声明命名空间这一事实有关,但我对 PHP 命名空间的了解不足以解决此问题。
欢迎任何帮助!
您的控制器文件位于 App\Http\Controllers
命名空间
namespace App\Http\Controllers;
您试图使用相对 class/trait 名称向您的控制器添加特征
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 定义中,你说
class HomeController extends Controller {
use Abraham\TwitterOAuth\TwitterOAuth;
public function index()
{
$o = new TwitterOauth();
return view('home');
}
}
当您在 class 中使用 use
时,PHP 会将其解释为 "apply this trait to this class"。我不熟悉图书馆,所以我认为 Abraham\TwitterOAuth\TwitterOAuth
是一个特征。不是。
当您在 class 定义的 use
外部使用 时,您是在告诉 PHP 到 "use this class in this namespace without a namespace prefix"。如果您从 class
use
语句
class HomeController extends Controller {
//use Abraham\TwitterOAuth\TwitterOAuth;
}
并将其放在外面,namespace
关键字
namespace App\Http\Controllers;
use Abraham\TwitterOAuth\TwitterOAuth;
您应该能够使用 class TwitterOAuth
来实例化您的对象。