我有一个函数,它创建我创建的表单模板的新实例(不使用模板引擎(,并根据传递给它的对象填充各种数据。当页面加载时,我使用这个函数为现有对象创建表单,但我在界面中也有一个按钮,它向一个单独的脚本发出ajax请求,该脚本创建一个新对象,然后调用该函数为对象创建一个表单,作为对ajax的响应发送。
错误为:
Warning: DOMDocument::loadHTMLFile(): I/O warning : failed to load external entity "templates/form_edit_event.html" in C:wamp64www<private>src<private>componentscomponent_edit_event.php on line 12
它引用的代码:
11 $eventDom = new DOMDocument();
12 $eventDom->loadHTMLFile('templates/form_edit_event.html');
不过,当第一次加载页面时,我的脚本和loadHTMLFile函数可以很好地为已经存在的对象创建表单。只有当我使用按钮尝试创建新的I/O时,才会出现I/O错误。它的确切文本如下,尽管我模糊了一些不重要的目录名:
它加载的文件是纯html,甚至不是页眉/页脚等,只是<form>contents</form>
。我不知道为什么它有时会失败。
从ajax调用的整个脚本(减去一些不必要的使用/包含(是这样的,component_edit_event.php
是上面提到的创建表单的脚本:
include_once __DIR__ . '..componentscomponent_edit_event.php';
$tourneyId = $_POST['tourneyId'];
/** @var DimTournament $tourney */
$tourney = DimTournament::findById($tourneyId);
$newEvent = new DimEvent($tourney);
echo createEventForm($newEvent)->saveHTML();
我认为我不需要包含任何其他代码,但如果需要的话,我绝对可以。
将$eventDom->loadHTMLFile('templates/form_edit_event.html');
中的相对路径交换为绝对路径解决了此问题。引发错误的脚本与运行正常的脚本位于不同的目录中。
我将制作一个带有某种$srcRoot变量的配置文件,以便在路径名中保留一些伪相对性的外观。