首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储库模式Laravel 5

存储库模式Laravel 5
EN

Stack Overflow用户
提问于 2015-08-01 10:53:28
回答 1查看 219关注 0票数 2

我开始了解Laravel 5存储库模式,我无法得到任何正确的!我可能使用了错误的命名空间或“使用”;这是我得到的错误:Class App\Http\Controllers\ServiceController does not exist

这位是我的财务总监:

代码语言:javascript
复制
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'));
    }

}

这是存储库:

代码语言:javascript
复制
class ServiceRepository {

    public function getAllServices(){
        return \App\Service::all();
    }
}

我的路线是:

代码语言:javascript
复制
Route::get('/services', 'ServiceController@showServices');

我尝试更改了一些名称空间,但最后出现了更多的错误:/

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-01 11:16:11

您必须阅读一下PHP中的名称空间。

如果您的ServiceController位于app/Http/Controllers目录中,则代码必须如下所示:

代码语言:javascript
复制
<?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位于同一个目录中,所以它们位于同一个名称空间中。当两个类位于同一个名称空间中时,不需要有名称空间的完整路径才能相互访问。

希望这能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31761019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档