我正在Drupal 8中设计一个新模块.这是一个长期项目,至少几个月内不会上市,所以我用它来弄清楚什么是新的.
在这个模块中,我希望能够以编程方式创建节点.在Drupal 7中,我会通过创建对象,然后调用"node_submit"和"node_save"来完成此操作.
这些函数在Drupal 8中不再存在.相反,根据文档,"模块和脚本可以使用通常的表单API模式以编程方式提交节点." 我不知所措.这是什么意思?我已经使用Form API在Drupal 7中创建表单,但是我没有得到文档在这里说的内容.
我想要做的是基于不是直接从用户呈现的表单中获取的信息,以编程方式创建至少一个并且可能多个新节点.我需要能够:
1)指定内容类型
2)指定URL路径
3)设置以前已经过时的node_object_prepare()处理过的任何其他必要变量
4)提交新节点对象
我希望能够在一个独立的,高度抽象的函数中完成此操作,而不依赖于特定的块或形式.
那我错过了什么?
我正在使用PDO库从PHP脚本访问MySQL数据库,我之前没有使用过(我更熟悉MySQLi).我在结果中看到了额外的,意外的字段.它们并没有干扰我的代码,但我想知道它们来自哪里.
这是我的数据库调用:
SELECT
author.author_id AS author_id,
author.name_last AS name_last,
author.name_first AS name_first,
author.detail AS detail
FROM join_play_author
LEFT JOIN author
ON join_play_author.author_id = author.author_id
WHERE join_play_author.play_id = :play_id
ORDER BY author.name_last
Run Code Online (Sandbox Code Playgroud)
然后我成功绑定并执行,我的结果包含我所请求的所有字段,以及相应的标签.但是,每个字段在结果集中出现两次:一次使用我请求的标签,一次使用额外的自动递增值.例如,一个结果集(使用print_r()打印)如下所示:
Array
(
[author_id] => 41
[0] => 41
[name_last] => Dekker
[1] => Dekker
[name_first] => Thomas
[2] => Thomas
[detail] => 0
[3] => 0
)
Run Code Online (Sandbox Code Playgroud)
这些双字段并没有主动干扰我的代码,但它们在调试期间很烦人,我担心它们会影响大型结果集的性能,这将是生产站点上的一个问题.
删除AS标记不会影响结果数组.
有任何想法吗?这只是PDO的一个功能 - 如果是这样,有什么方法可以关闭它吗?我不记得在MySQLi结果中看到这些额外的字段,尽管我可能错过了它们.