我在目录app
中创建了一个名为Services
的新文件夹。所以服务目录是app/Services
。我想在Controller app / Http / Controllers中使用名为Connection.php
的服务文件,但是当我尝试这样做时,我得到以下错误:
Class App \ Services \ Connection不存在
我还尝试在我的composer.json中添加目录和文件,但这也没有修复它。
控制器:
namespace App\Services;
namespace App\Http\Controllers;
use App\Services\Connection;
use Illuminate\Http\Request;
class ExampleController extends Controller
{
protected $conn;
public function __construct(Connection $conn)
{
$this->conn = $conn;
}
Composer.json
"autoload": {
"classmap": [
"database",
"app/Services"
],
"autoload-dev": {
"classmap": [
"tests/TestCase.php",
"app/Services/Connection.php"
]
},
编辑17.12.2016:(问题尚未解决)
感谢所有坚持这个问题的人!我很吵,如果我提供的信息太少,那么我总结一些我尝试过的东西。
1 =>删除了secound名称空间App\Services
2 =>添加路线(或目录)到我的composer.json(如上所述)
3 =>已使用composer updated
和作曲家dump-autoload
4 =>使用use App\Services\Connection
(我在服务中连接类的路径,我想在App\Http\Controllers\ExampleController
中的ExampleController中使用)
连接类:
class Connection
{
//Some guzzle stuff
}
因此,ExampleController看起来与上面完全没有服务名称空间,我得到完全相同的错误。我做错了什么?
答案 0 :(得分:3)
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Contracts\Auth\Guard;
use App\Http\Controllers\Controller;
use App\Services\Connection;
class ExampleController extends Controller
{
public function __construct(Guard $auth, Connection $conn)
{
$this->auth = $auth;
$this->conn = $conn;
}
}
请尝试使用此代码。
答案 1 :(得分:1)
错误在您的命名空间声明中。你正在为同一个类声明两个名称空间!
namespace App\Services;
namespace App\Http\Controllers;
将使用最后一个。
删除App\Http\Controllers
命名空间行。
还记得你应该导入基本控制器:
use App\Controllers\Controller;
当您尝试使用App\Services\ExampleController
时,composer将在自动加载路径中查找该类,但由于您的命名空间不同,因此无法加载它。
答案 2 :(得分:1)
提出此解决方案作为评论,但为了让未来的观众更容易:
解决方法是确保所有正在引用的文件中包含正确的名称间距,包括控制器和类。如果命名空间不正确,则无法访问它。
在这种情况下,您必须确保Connection类的名称空间使用App\Services
作为名称空间,并且控制器在App\Services\Connection
的同一名称空间中访问它。