За последние 24 часа нас посетили 51346 программистов и 1758 роботов. Сейчас ищут 719 программистов ...

Помогите разобраться

Тема в разделе "PHP для новичков", создана пользователем Axios, 24 янв 2017.

  1. Axios

    Axios Активный пользователь

    С нами с:
    13 янв 2013
    Сообщения:
    52
    Симпатии:
    1
    Тренируюсь в коде, пишу небольшую CRMку для обработки заявок

    Вообщем, вот такой вопрос.


    в MySQL есть 2 таблицы

    application_list (тут сами заявки находятся)
    application_comments (тут комментарии к заявкам с id_applications)

    Суть вот какая:

    Список заявок формируется следующим образом:

    =====
    файл Routes.php из текущего url получается данные:

    PHP:
    1. $controllerName = ApplicationController;
    2. $actionName = actionList;
    3.  
    4. $controllerObject= new $controllerName;
    5. $result= call_user_func_array(array($controllerObject, $actionName), $parameters);
    =====
    Файл ApplicationController

    PHP:
    1. public function actionList($link)
    2. {
    3.     $result  = array();
    4.     $result  = Applications::getApplicationsList();
    5.     //Подключаем шаблон вывода
    6.     require_once(ROOT . '/views/applications/applications.view.list.php');
    7.     return true;
    8. }
    =====
    Файл applications.view.list.php все нормально выводится и прогоняется через foreach

    PHP:
    1. foreach($result as $row) {
    2. echo $row['fname']; //в таком виде и прочие параметры
    3.  
    4. /*тут хочу чтобы выводились комментарии к заявке. Делаю вот так*/
    5. $comments = new ApplicationsController();
    6. $comments->actionComments($row["id"]);
    7.  
    8. }
    ======
    Класс ApplicationsController метод actionComments

    PHP:
    1. public function actionComments($id)
    2. {
    3.  
    4.     if($id)
    5.     {
    6.         $comments_result  = array();
    7.         $comments_result = Applications::getApplicationsComments($id);
    8.     }
    9.  
    10.     //Подключаем шаблон вывода
    11.     require_once(ROOT . '/views/applications/applications.view.comments.php');
    12.  
    13.     if($comments_result != NULL)
    14.     {
    15.         return true;
    16.     }
    17.  
    18. }
    =====

    Файл getApplicationComments

    PHP:
    1. public static function getApplicationsComments($id)
    2.    {
    3.        $db = Db::getConnection(); //Соединяемся в БД
    4.        $ApplicationsComments = array(); //Создаем пустой массив
    5.        $result = $db->query('SELECT * FROM '.PREF.'applications_comments WHERE `id_applications`= "'.$id.'" ORDER BY date ASC');
    6.  
    7.        $i=0;
    8.        /*
    9. * Приводим данные к более красивому виду
    10. */
    11.        while($row = $result->fetch())
    12.        {
    13.            $ApplicationsComments[$i]['id']              = $row['id'];
    14.            $ApplicationsComments[$i]['date']            = $row['date'];
    15.            $ApplicationsComments[$i]['id_applications'] = $row['id_applications'];
    16.            $ApplicationsComments[$i]['id_manager']      = $row['id_manager'];
    17.            $ApplicationsComments[$i]['text']            = $row['text'];
    18.  
    19.            $i++;
    20.        }
    21.  
    22.        return $ApplicationsComments;
    23.    }
    ======


    Вот тут и проблема начинается. Если прямо в actionComments() вывести var_dump($comments_result);, то выйдет массив в том месте где мне и надо, вот такого вида:

    PHP:
    1. array(2) {
    2.    [0]=>
    3.              array(5) {
    4.               ["id"]=> string(4) "1092"
    5.               ["date"]=> string(10) "1482945716"
    6.               ["id_applications"]=>string(4) "1141"
    7.               ["id_manager"]=>string(1) "2"
    8.              ["text"]=>  string(46) "Текст комментария"
    9. }
    10. [1]=>
    11.            array(5) {
    12.              ["id"]=> string(4) "1092"
    13.              ["date"]=> string(10) "1482945716"
    14.              ["id_applications"]=>string(4) "1141"
    15.              ["id_manager"]=>string(1) "2"
    16.              ["text"]=>  string(46) "Текст комментария"
    17. }
    18. }
    Если я пытаюсь вывести vur_dump или прогнать через foreach в файле require_once(ROOT . '/views/applications/applications.view.comments.php'), то выходит пустой результат.
     
    #1 Axios, 24 янв 2017
    Последнее редактирование модератором: 24 янв 2017
  2. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Я всё не читал, но предположу что ты пытаешся вывести локальную переменную вне функции (класса). Попробуй инициализировать её в начале файла, а значения присваивать там где и сейчас.
     
  3. Axios

    Axios Активный пользователь

    С нами с:
    13 янв 2013
    Сообщения:
    52
    Симпатии:
    1
    проблема в том что не инклудится файл /views/applications/applications.view.comments.php

    В шаблоне вывода application.view.list.php (список заявок) идет вставка
    $comments = new ApplicationsController();
    $comments->actionComments($row["id"]);

    ApplicationController -> actionComment код

    Код (Text):
    1.  
    2. public function actionComments($id)
    3. {
    4.  
    5.     if($id)
    6.     {
    7.         $comments_result  = array();
    8.         $comments_result  = Applications::getApplicationsComments($id);
    9.  
    10. /*вот так информация не выводится, даже тестовая надпись*/
    11.         require_once(ROOT . '/views/applications/applications.view.comments.php');
    12.  
    13. /*если прям тут перебирать, то выводится инфрмация*/
    14.         echo '<ul class="view_comments">';
    15.  
    16.         foreach($comments_result as $row)
    17.         {
    18.             echo '<li>'.$row["text"].'</li>';
    19.         }
    20.         echo '</ul>';
    21.         return true;
    22.     }
    23.  
    24. }