php
  • oop
  • xpath
  • simplexml
  • 2017-01-20 2 views 1 likes 
    1
    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 в функцию, и она работает одновременно.передал параметр, не работающий на xpath, хотя работает в модульном тесте

    <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')); 
    

    screenshot of the debug page

    Я пошел каждый шаг в пути, повторяющий все переменные, чтобы проверить, что они не являются нулевыми, но для по какой-то причине xpath просто не работает при вызове с основного контроллера, но он отлично работает с модульным тестом, даже если передаются одни и те же параметры.

    ответ

    0

    я нашел решение было неявно сказать XPath это было ИНТ

    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; 
    } 
    

    по какой-то причине, если я изложу его в строку она по-прежнему не работает, возможно, кто-то может поделиться свет на это.

    Смежные вопросы