Laravel 3:在命名空间中找不到类

时间:2013-03-18 06:12:20

标签: namespaces laravel laravel-3

这是问题所在:我无法从命名空间加载类。

我正在开发一个安静的应用程序,我正在尝试按照实体/服务/存储库的方式访问并为所请求的数据提供格式。问题是我无法从服务加载任何类。我在我的应用程序中创建了一个名为 api 的文件夹,其中包含其他3个文件夹:api/entities/api/services/api/repositories/。服务中还有2个文件夹:验证器数据采集器

由于它是一个RESTulf应用程序,我还在控制器内部创建了一个api文件夹:controllers/api/

以下是我的app文件夹的当前树:

app/
   api/
       entities/
       repositories/
       services/
            datapickers/
                MemberData.php
                ConsumeData.php
            validators/
     ...
    models/
    controllers/
       api/
           members.php
           (other restful controllers)
    languages/
     ...

首先,这是 start.php 自动加载部分:

Autoloader::directories(array(
    path('app').'models',
    path('app').'libraries',
    path('app').'api'
));

Autoloader::namespaces(array(
    'Api' => path('app').'api',
));

这是MemberData.php

<?php 
namespace Api\Services\Datapickers;

use Api\Repositories as Repo;

class MemberData
{
     /* Do some stuff */
}

现在,当我尝试在MemberData中使用controllers/api/members.php时:

<?php
use Api\Services\Datapickers\MemberData;

class Api_Members_Controller extends Api_Base_Controller
{
    public function get_index($id = null)
    {
        if (!empty($id))
            $this->params->data = MemberData::getById($id);
        else
        {
            $this->params->data = MemberData::getAll(
                Input::get('offset'), 
                Input::get('limit')
            );
        }

        return Response::json($this->params, 200);
    }
}

我得到以下内容:

Unhandled Exception
Message:

Class 'Api\Services\Datapickers\MemberData' not found

Location:

/path_to_project/application/controllers/api/members.php on line 15

这一行:$this->params->data = MemberData::getById($id);

我自动加载 api 文件夹并在start.php中注册基本api名称空间,但我仍然收到相同的错误。就像Laravel不会识别api命名空间或类似的东西。

我尝试注册完整的命名空间:

Autoloader::namespaces(array(
    'Api\Services\Datapickers' => path('app').'api/services/datapickers',
));

但我得到的错误是:Call to undefinde method 'Api\Services\Datapickers\MemberData::getById()'。这只是一个测试(我不想在Autoloader中注册每个子命名空间)。

0 个答案:

没有答案