class ad_xml_model extends \ITico_core\common_class {
public function get_info_from_ad($input_id) {
$xml_file = parent::get_set('xml');
$ad_info = $xml_file->xpath("//ad[@id='" . $input_id . "']");
parent::get_set('ad_info', $ad_info);
return $ad_info;
}
}
Приведенный выше код работает при модульном тестировании, я попытался передать в функцию как строку, так и int, и он работает оба раза.
<h2>get_info_from_ad</h2>
test data: 1<br>
info from ad:- <br>
<?php
$ad_xml_model->get_info_from_ad(1);
$ad_info = $ad_xml_model->get_set('ad_info');
print_r($ad_info);
но в коде ниже, когда вызывается из контроллера его не работает
class main_controller(){
$ad_top_limit = count($ads_from_category);
$key = rand(0, $ad_top_limit - 1);
$chosen_ad = $ads_from_category[$key];
parent::get_set('chosen_ad', $chosen_ad);
$ad_info = $ad_xml_model->get_info_from_ad($chosen_ad);
parent::get_set('ad_info', $ad_info);
if ($ad_info != null) {
switch ($ad_type) {
case NUll:
break;
case 'long':
$long_view = new long_view($ad_info);
$long_view->show_ad();
}
}
}
и тестирование страницы отладки
<?php
echo $main_controller->get_set('chosen_ad') . "<br>";
?>
ad information:-: <br>
<?php
print_r($main_controller->get_set('ad_info'));
Я прошел каждый шаг по пути, повторяя все переменные, чтобы убедиться, что они не равны NULL, но по какой-то причине xpath просто не работает при вызове из основного контроллера, но он прекрасно работает из модульного теста, хотя точно так же параметры передаются.
Я нашел решение было неявно сказать xpath, что это был int
public function get_info_from_ad($input_id) {
$xml_file = parent::get_set('xml');
$ad_info = $xml_file->xpath("//ad[@id='" . (int)$input_id . "']");
parent::get_set('ad_info', $ad_info);
return $ad_info;
}
по какой-то причине, если я установлю ее на строку, она все равно не будет работать, возможно, кто-то еще сможет поделиться этим.
Других решений пока нет …