首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在laravel 4中注册命名空间

如何在laravel 4中注册命名空间
EN

Stack Overflow用户
提问于 2013-03-04 22:41:26
回答 2查看 6.7K关注 0票数 2

问题:在PostController.php中或在修改命名空间时,找不到第4行的类PostRepostioryInterface,我甚至还得到了类App\Models\Interfaces\PostRepositoryInterface

问题:如何在laravel 4中注册命名空间?我需要做什么才能让L4识别此命名空间中的类/接口?

Larave 3在ClassLoader中有一个$namespaces静态对象,您可以通过以下方式添加名称空间

代码语言:javascript
复制
Autoloader::namespaces(array(
  'App\Models\Interfaces' => path('app').'models/interfaces',
));

我不确定我是否正确适用于laravel 3,但无论哪种方式,在Laravel 4中都不存在AutoLoader,而在Laravel 4中存在ClassLoader,但是在Laravel 4中ClassLoader中不存在方法名称空间。

我已经研究过这一点,但如果不以某种方式注册名称空间,它似乎无法工作。Using namespaces in Laravel 4

示例结构:

代码语言:javascript
复制
app/models/interfaces
    PostRepostitoryInterface.php
app/models/repositories
    EloquentPostRepository.php


namespaces:
    App\Models\Repositories;
    App\Models\Interfaces;

文件:

PostRepositoryInterface.php

代码语言:javascript
复制
<?php namespace App\Models\Interfaces;
interface PostRepositoryInterface {
    public function all();
    public function find($id);
    public function store($data);
}

EloquentPostRepository.php

代码语言:javascript
复制
<?php namespace App\Models\Repositories;
use App\Models\Interfaces\PostRepositoryInterface;
class EloquentPostRepository implements PostRepositoryInterface {

    public function all()
    {
        return Post::all();
    }

    public function find($id)
    {
        return Post::find($id);
    }

    public function store($data)
    {
        return Post::save($data);
    }
}

PostController.php

代码语言:javascript
复制
<?php
use App\Models\Interfaces\PostRepositoryInterface;
class PostsController extends BaseController {

    public function __construct( PostRepositoryInterface $posts )
    {
        $this->posts = $posts; 
    }

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-06 08:01:01

在laravel irc频道上,我发现名称空间应该可以在L4中工作,而不需要在任何地方注册它们。这是因为composer dump-autoload会将它们添加到composer/autoload文件中。所以这不是一个问题。

这个问题显然是一个打字错误(我在上面的代码中找不到它,但在复制/粘贴每一行的类名和命名空间后,有些地方发生了变化),而且不知何故,在我的实际代码中,我遗漏了EloquentPostRepository.php的'use‘语句

代码语言:javascript
复制
use App\Models\Interfaces\PostRepositoryInterface;

现在,我遇到了另一个障碍,试图通过ioc和控制器构造函数使用命名空间接口(目标接口App\Models\Interfaces\PostRepositoryInterface是不可实例化的),但我猜这应该是另一个问题。

票数 1
EN

Stack Overflow用户

发布于 2013-03-06 01:34:32

你可能忘了做composer dump-autoload。这将更新类Laravel自动加载的列表。

你可以在composer documentation上阅读更多。

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

https://stackoverflow.com/questions/15204103

复制
相关文章

相似问题

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