durpal是否支持php7,PHP-Drupal 7-无法显示服务端点

我尽全力试图解释为什么这不起作用.我正在尝试从Drupal 7实例设置REST服务器.目前关注的是不需要身份验证(一旦设法使它生效,我将对其进行设置).

以下是相关的代码位:

mymodule.module

/**

* Implements hook_ctools_plugin_api().

* Declares the mymodule services endpoint (stored in

* mymodule.services.inc). Note that the referenced ctools

* hook obviates creating this endpoint through the UI.

*/

function mymodule_ctools_plugin_api($owner, $api) {

if ($owner == 'services' && $api == 'services') {

return array(

'version' => 3,

'file' => 'mymodule.services.inc',

'path' => drupal_get_path('module', 'mymodule'),

);

}

}

/**

* Implements hook_services_resources

* Defines the resources available via services module (REST, in this case).

*

* @return array The definition array

*/

function mymodule_services_resources() {

watchdog('mymodule', __FUNCTION__, array(), WATCHDOG_NOTICE, 'link');

return array(

'#api_version' => 3001,

'test' => array(

'retrieve' => array(

'help' => t("A test of the REST api"),

'file' => array(

'type' => 'inc',

'module' => 'mymodule',

'name' => 'resources/test_resource',

),

'access arguments'=>array('access content'),

'callback' => 'mymodule_services_test',

'args' => array(

array(

'name' => 'id',

'type' => 'int',

'description' => t("a test of rest arguments"),

'source' => array('path' => '0'),

'optional' => FALSE,

),

),

),

'index' => array(

'help' => t('A test of the REST api index functionality'),

'file' => array(

'type' => 'inc',

'module' => 'mymodule',

'name' => 'resources/test_resource',

),

'callback' => 'mymodule_services_test',

),

),

);

}

resources / test_resources.inc

/**

*

*/

function mymodule_services_test() {

watchdog('mymodule', __FUNCTION__, array(), WATCHDOG_NOTICE, 'link');

$result = array('foo' => 'bar');

drupal_json_output($result);

}

/**

* Access callback for test services (currently unused)

* @param string $op The operation being performed: creat

* @param [type] $args [description]

* @return [type] [description]

*/

function mymodule_services_test_access($op, $args) {

watchdog('mymodule', __FUNCTION__, array(), WATCHDOG_NOTICE, 'link');

return TRUE;

}

mymodule.services.inc

/**

* @file

*/

/**

* Implements hook_default_services_endpoint().

*/

function mymodule_default_services_endpoint() {

watchdog('mymodule', __FUNCTION__, array(), WATCHDOG_NOTICE, 'link');

$endpoint = new stdClass();

$endpoint->disabled = FALSE; //Edit this to true to make a default endpoint disabled initially

$endpoint->api_version = 3;

$endpoint->name = 'mymodule_rest_api_v1';

$endpoint->server = 'rest_server';

$endpoint->path = 'api/mymodule/v1';

$endpoint->authentication = array();

$endpoint->server_settings = array(

'formatters' => array(

'json' => TRUE,

'bencode' => FALSE,

'jsonp' => FALSE,

'php' => FALSE,

'xml' => FALSE,

),

'parsers' => array(

'application/json' => TRUE,

'text/xml' => TRUE,

'application/vnd.php.serialized' => FALSE,

'application/x-www-form-urlencoded' => FALSE,

'application/xml' => FALSE,

'multipart/form-data' => FALSE,

),

);

$endpoint->resources = array();

$endpoint->debug = 0;

return array('mymodule'=>$endpoint);

}

我删除了该服务的UI内置定义,可以看到它已成功从代码中重新创建,此外,当我访问“ api / mymodule / v1 /”时,我看到消息“服务端点“ mymodule_rest_api_v1”已成功设置.”,所以我知道hook_default_services_endpoint和hook_ctools_plugin_api正常工作.

但是,无论出于何种原因,我无法获得mymodule_services_resources中定义的任何路径以将其识别为有效.我已经删除了所有访问限制,多次清除了缓存-总是,当我找到以’test’结尾的任何网址时,我最终都找不到404(例如https://[my-domain]/api/mymodule/v1/test和https://[my-domain]/api/mymodule/v1/test/1都产生了“找不到:找不到资源测试.”).

任何意见,将不胜感激.

解决方法:

弄清楚了.回传为什么万一其他人遇到这个问题.

hook_services_resources声明模块提供的资源.它不做的就是启用这些资源.回到服务端点的“资源”选项卡下,我发现“测试”作为可以公开的新资源可用.更重要的是,它尚未启用.

启用并将其导出到代码后,我可以将mymodule_default_services_endpoint的内容更改为此:

function mymodule_default_services_endpoint() {

watchdog('mymodule', __FUNCTION__, array(), WATCHDOG_NOTICE, 'link');

$endpoint = new stdClass();

$endpoint->disabled = FALSE; /* Edit this to true to make a default endpoint disabled initially */

$endpoint->api_version = 3;

$endpoint->name = 'mymodule_rest_api_v1';

$endpoint->server = 'rest_server';

$endpoint->path = 'api/mymodule/v1';

$endpoint->authentication = array(

'services' => 'services',

);

$endpoint->server_settings = array(

'formatters' => array(

'json' => TRUE,

'bencode' => FALSE,

'jsonp' => FALSE,

'php' => FALSE,

'xml' => FALSE,

),

'parsers' => array(

'application/json' => TRUE,

'text/xml' => TRUE,

'application/vnd.php.serialized' => FALSE,

'application/x-www-form-urlencoded' => FALSE,

'application/xml' => FALSE,

'multipart/form-data' => FALSE,

),

);

$endpoint->resources = array(

'test' => array(

'operations' => array(

'retrieve' => array(

'enabled' => '1',

),

'index' => array(

'enabled' => '1',

),

),

),

);

$endpoint->debug = 0;

return array('mymodule' => $endpoint);

}

现在我遇到了身份验证错误,这是我期望的并且可以解决.希望这对某人有帮助.

标签:drupal,drupal-7,php,drupal-services

来源: https://codeday.me/bug/20191027/1946645.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值