这就是问题所在:我无法从命名空间加载类。
我正在开发一个安静的应用程序,我正在尝试遵循实体/服务/存储库的方式来访问并为请求的数据提供格式。问题是我无法从服务加载任何类。我在我的应用程序中创建了一个名为api的文件夹,并在其中创建了其他 3 个文件夹api/entities/
:api/services/
和api/repositories/
. 服务内还有 2 个文件夹:validators和datapickers。
因为它是一个 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 */
}
现在,当我尝试使用MemberData
in 时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 中注册每个子命名空间)。