我开始了解Laravel 5存储库模式,我无法做对!我可能使用了错误的命名空间或'使用';这是我得到的错误:Class App\Http\Controllers\ServiceController does not exist
这是我的控制器:
namespace App\Http\Controllers;
namespace Repo;
use App\Http\Controllers\Controller;
use Repo\ServiceRepository;
class ServiceController extends Controller {
public function __construct(ServiceRepository $service){
$this->service = $service;
}
public function showServices()
{
$services = $this->service->getAllServices();
return view('services', compact('services'));
}
}
这是存储库:
class ServiceRepository {
public function getAllServices(){
return \App\Service::all();
}
}
这是我的路线:
Route::get('/services', 'ServiceController@showServices');
我试图更改一些名称空间,但最终会出现更多错误:/
答案 0 :(得分:0)
你必须在PHP中阅读一些关于命名空间的内容。
如果您的ServiceController
位于app/Http/Controllers
目录中,则代码必须如下所示:
<?php
namespace App\Http\Controllers;
use Repo\ServiceRepository;
class ServiceController extends Controller
{
public function __construct(ServiceRepository $service)
{
$this->service = $service;
}
public function showServices()
{
$services = $this->service->getAllServices();
return view('services', compact('services'));
}
}
请注意,我删除了namespace Repo
和第一个use
语句。
一个类必须只有一个命名空间,所以我删除了第二个Repo
命名空间。
命名空间非常简单。在大多数情况下,类的名称空间只反映该类的路径。在您的情况下,它是App\Http\Controllers
,因为您的控制器可能位于app/Http/Controllers
目录中。
我已删除use App\Http\Controllers\Controller
,因为您的ServiceController
和App\Http\Controllers\Controller
位于同一目录中,因此它们位于同一名称空间中。当两个类位于同一名称空间中时,没有必要使用带有名称空间的完整路径来使它们能够相互访问。
希望这会有所帮助。