存储库模式Laravel 5

时间:2015-08-01 10:53:28

标签: laravel-5

我开始了解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');

我试图更改一些名称空间,但最终会出现更多错误:/

1 个答案:

答案 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,因为您的ServiceControllerApp\Http\Controllers\Controller位于同一目录中,因此它们位于同一名称空间中。当两个类位于同一名称空间中时,没有必要使用带有名称空间的完整路径来使它们能够相互访问。

希望这会有所帮助。