如何解决PHP RuntimeException:无法启动会话,因为当我尝试回显字符串时已发送标头
我在自定义 Drupal 8 模块中有两个文件:a.module 文件和 FaqSchemaService.PHP 文件。我的目的是抓取页面内容并创建 JSON-LD 模式。在 FaqSchemaService.PHP 中,我创建了 JSON-LD 模式,它可以正确验证。但是,当我尝试输出缓冲并回显结果时,我得到 RuntimeException: Failed to start the session because headers have been sent 错误。我在这里做错了什么?请帮忙!
a.module:
<?PHP
function _page_attachments_alter(&$page){
$node = \Drupal::routematch()->getParameter('node');
// check if node is faq page content type,excluding admin nodes from check
if(!\Drupal::service('router.admin_context')->isAdminRoute()) {
if($node && $node->bundle() == 'faq_page') {
ob_start();
echo \Drupal::service('service.name')->getFaqs();
ob_end_flush();
}
}
}
FaqSchemaService.PHP:
<?PHP
use Drupal\paragraphs\Entity\Paragraph;
/**
* Class FaqSchemaService
*/
class FaqSchemaService {
public function getFaqs() {
$array = [];
$node = \Drupal::routematch()->getParameter('node');
$target = \Drupal::entityTypeManager()->getStorage('node')->load($node->id());
foreach($target->field_bands as $item) {
if($item->entity && $item->entity->bundle() == 'tabs_accordion') {
$paragraph = Paragraph::load($item->entity->id());
foreach($paragraph->field_tab as $tab) {
$array[] = array('@type' => 'Question','name' => json_encode($tab->entity->field_tab_title->value),'acceptedAnswer' => array('@type' => 'Answer','text' => json_encode($tab->entity->field_tab_content->value)));
};
}
};
$script = '<script type="application/ld+json">{
"@context": "https://schema.org/","@type": "FAQPage","mainEntity": ' . json_encode($array) . '}
</script>';
return $script;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。