1

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

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

因为它是一个 RESTulf 应用程序,所以我还在控制器文件夹中创建了一个 api 文件夹:controllers/api/

这是我的应用程序文件夹的当前树:

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

首先,这是我在start.php中的Autoload部分:

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 */
}

现在,当我尝试使用MemberDatain 时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文件夹并在其中注册基本 api 命名空间,start.php但我仍然收到相同的错误。它就像 Laravel 不识别 api 命名空间或类似的东西。

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

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

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

4

0 回答 0