这是问题所在:我无法从命名空间加载类。
我正在开发一个安静的应用程序,我正在尝试按照实体/服务/存储库的方式访问并为所请求的数据提供格式。问题是我无法从服务加载任何类。我在我的应用程序中创建了一个名为 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中注册每个子命名空间)。