Найти yii2 время отклика выходной проблемы

{
     "IsSuccess": 1, 
    "ErrMsg": "OK", 
    "Данные": {
         "IsSuccess": 1, 
        "ErrMsg": "OK", 
        "Данные": {
             "IsSuccess": 1, 
            "ErrMsg": " OK», 
            "Данные": {
                 "IsSuccess": 1, 
                "ErrMsg": "OK", 
                "Данные": {
                     "IsSuccess": 1, 
                    "ErrMsg": "OK", 
                    "Данные":{
                         "Error_code": 1, 
                        "сообщение": "OK", 
                        "res_msg":{
                             "Error_code": 1, 
                            "сообщение": "OK", 
                            "res_msg": {
                                 "error_code": 1, 
                                "сообщение": "OK", 
                                "res_msg": {
                                     "error_code": 1, 
                                    "сообщение": " OK», 
                                    "res_msg": {
                                         "error_code": 1, 
                                        "сообщение": "OK", 
                                        "Res_msg":{
                                             "Error_code": 1, 
                                            "сообщение": "OK", 
                                            "res_msg": {
                                                 "error_code": 1, 
                                                "сообщение": "OK", 
                                                "res_msg": {
                                                     "error_code": 1, 
                                                    "сообщение": " OK», 
                                                    "res_msg":{
                                                         "Error_code": 1,
                                                        "сообщение": "OK", 
                                                        "res_msg": {
                                                             "error_code": 1, 
                                                            "сообщение": "OK", 
                                                            "res_msg": {
                                                                 "error_code": 1, 
                                                                "сообщение": "OK", 
                                                                "res_msg":{
                                                                     "Error_code": 1,
                                                                    "сообщение": "OK", 
                                                                    "res_msg": {
                                                                         "error_code": 1, 
                                                                        "сообщение": "OK", 
                                                                        "res_msg": {
                                                                             "error_code": 1, 
                                                                            "сообщение": "OK",
                                                                            "res_msg":{
                                                                                 "Error_code": 1, 
                                                                                "сообщение": "OK", 
                                                                                "res_msg": {
                                                                                     "error_code": 1, 
                                                                                    "сообщение": "OK", 
                                                                                    "res_msg":{
                                                                                         "Error_code": 1,
                                                                                        "сообщение": "OK", 
                                                                                        "res_msg": {
                                                                                             "error_code": 1, 
                                                                                            "сообщение": "OK", 
                                                                                            "res_msg": {
                                                                                                 "error_code": 1,
                                                                                                "сообщение": "OK", 
                                                                                                "res_msg": {
                                                                                                     "error_code": 1, 
                                                                                                    "сообщение": "OK", 
                                                                                                    "res_msg": {
                                                                                                         "error_code": 1,
                                                                                                        "сообщение": "OK", 
                                                                                                        "res_msg": {
                                                                                                             "error_code": 1, 
                                                                                                            "сообщение": "OK", 
                                                                                                            "res_msg":{
                                                                                                                 "Error_code": 1,
                                                                                                                "сообщение": "OK", 
                                                                                                                "res_msg": {
                                                                                                                     "error_code": 1, 
                                                                                                                    "сообщение": "OK", 
                                                                                                                    "res_msg":{
                                                                                                                         "Error_code": 1, 
                                                                                                                        "сообщение": "OK", 
                                                                                                                        "res_msg": {
                                                                                                                             "error_code": 1, 
                                                                                                                            "сообщение": "OK",
                                                                                                                            "res_msg": "error_code": 1,{
                                                                                                                                 "Error_code": 1, 
                                                                                                                                "сообщение": "OK", 
                                                                                                                                "res_msg": {
                                                                                                                                    
                                                                                                                                    "сообщение": "OK", 
                                                                                                                                    "res_msg": {
                                                                                                                                         "error_code": 1, 
                                                                                                                                        "сообщение": "OK",
                                                                                                                                        "res_msg":{
                                                                                                                                              "Доступен":[
                                                                                                                                                 "/ Апи / авт / вид", 
                                                                                                                                            ] , 
                                                                                                                                            "присвоен": [
                                                                                                                                                 "/ *»,
                                                                                                                                                "/ администратор / *", 
                                                                                                                                                "/ администратор / апи / *" 
                                                                                                                                            ] 
                                                                                                                                        } 
                                                                                                                                    } 
                                                                                                                                } 
                                                                                                                            }
                                                                                                                        } 
                                                                                                                    } 
                                                                                                                } 
                                                                                                } 
                                                                                            } 
                                                                                                            }
                                                                                                        } 
                                                                                                    } 
                                                                                        } 
                                                                                    } 
                                                                                } 
                                                                            } 
                                                                        } 
                                                                    }
                                                                } 
                                                            } 
                                                        }  
                                                    } 
                                                }
                                            } 
                                        } 
                                    } 
                                } 
                            } 
                        } 
                    } 
                } 
            } 
        } 
    } 
}
Просмотр кода

Это явление.

действие:

общественная функция actionRefresh () 
    { 
        $ модель = новый маршрут (); 
        $ модели-> недействительными (); 
        вернуть $ модели-> getRoutes (); 
    }

Доступ к этому действию генерируется. Поскольку этот контроллер я унаследовал коллега писать базовый контроллер, код выглядит следующим образом:

функция инициализации общественности () 
    { 
        родительский :: Init (); 
        // связать beforeSend событие, изменить формат вывода данных 
        Yii :: $ app-> GetResponse () -> по (Response :: EVENT_BEFORE_SEND, [$ это, 'beforeSend' ]); 
    } 

    / ** 
     * Вывод данных в формате изменения 
     * случай , когда выход по умолчанию между данными Json 
     * @param \ Yii \ Base \ $ Событие Событие 
     * / 
    общественная функция beforeSend ($ Event) 
    { 
        / * @var Response $ \ Yii \ Web \ Отклик * / 
        $ $ Ответ = событийно> ОТПРАВИТЕЛЬ; 
        $ = $ MSG response-> его статуса; 
        $ StatusCode = $ response-> StatusCode; 
        $ isSuccess = $ response-> getIsSuccessful (); 

        IF (Исеть ($ response-> данные [ 'код']) && $ response->данные [ 'код'] == 0) {
            $ код = 0; 
        } еще { 
            если ($ isSuccess) { 
                $ код = 1; 
            } еще { 
                $ код = 0; 
            } 
        } 
        Если ($ response-> StatusCode> = 400) { 
            //异常处理
            если (истина && $ исключение = Yii :: $ app-> getErrorHandler () -> исключение) { 
                 $ данных = $ response-> данные; 
                // $ данных = $ this-> convertExceptionToArray ($ исключение); 
            } 
            // Модель出错了 , 
            если ($ response-> StatusCode == 422) { 
                $ сообщения = []; 
                Еогеасп ($ response-> данные как $ v) {
                    $ сообщения [] = $ v [ 'сообщение']; 
                } 
                //请求错误时数据为{ "Успех": ложные, "данные": { "имя": "Not Found", "сообщение": "页面未找到.", "Код": 0, "Статус": 404}} 
                $ = данные [ 
                    'код_ошибки' => $ код, 
                    'сообщение' => Implode (»», $ сообщений), 
                    'res_msg' => $ response-> данные 
                ]; 
            } 
            $ Response-> isSent = истина; 
          // $ response-> StatusCode = 200; 
        } 
        ElseIf ($ response-> StatusCode> = 300) { 
          // $ response->
            $ данных = $ this-> convertExceptionToArray (новый ForbiddenHttpException (Yii :: гр ( 'юй', 'Логин Обязательно'))); 
        } 
        Еще { 
            $ данных = $ response-> данные; 
        } 

        //请求正确时数据
        $ response-> данные = [ 
            'error_code' => $ код, 
            'сообщение' => $ MSG, 
            'res_msg' => пустые ($ данные)? массив ( 'сообщение' => '暂无数据'): данные $, 
        ]; 

        Формат $ response-> = Response :: FORMAT_JSON; 
     // \ Yii :: $ app-> GetResponse () -> getHeaders () -> набор ( 'Access-Control-Allow-Origin', '*'); 
      // \ Yii :: $ app-> GetResponse () -> getHeaders () -> набор (» Access-Control-Allow-Credentials', 'истинный'); 

    }

在 中 beforeSend Yii :: информация ($ response-> StatusCode);

Ответ :: EVENT_BEFORE_SEND нашел событие, которое срабатывает несколько раз, что привело к вышеупомянутому явлению.

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

INIT в следующем:

функция инициализации общественности () 
    { 
        родительский :: Init (); 
        // Bind beforeSend событие, изменить формат вывода данных 
        IF (Yii :: $ app-> response-> hasEventHandlers (ответ :: EVENT_BEFORE_SEND)!) { 
            // избежать дублирования связывание 
            Yii :: $ app-> GetResponse () -> ON (Ответе :: EVENT_BEFORE_SEND, то [это $ 'beforeSend']); 
        } 
    }

  метод

Тем не менее, после добавления определения, отсутствует какой-то выход, но есть шесть выходов, следующим образом:

{ 
    "IsSuccess": 1, 
    "ErrMsg": "OK", 
    "Данные": { 
        "IsSuccess": 1, 
        "ErrMsg": "OK", 
        "Данные": { 
            "IsSuccess": 1, 
            "ErrMsg": " OK», 
            "Данные": { 
                "IsSuccess": 1, 
                "ErrMsg": "OK", 
                "Данные": { 
                    "IsSuccess": 1, 
                    "ErrMsg": "OK", 
                    "Данные": { 
                        "error_code": 1,
                        "сообщение": "OK", 
                        "res_msg": { 
                            "доступен": [
                                "/ апи / авториз / вид", 
                                "/ апи / авт / создать" 
                            ], 
                            "присвоен": [ 
                                "/ *", 
                                "/ администратор / *", 
                                "/ администратор / апи / *", 
                            ] 
                        } 
                    } 
                } 
            } 
        } 
    } 
}

Внезапно обнаружил, перед выход:

"IsSuccess": 1,
"ErrMsg": "OK",
"Данные": {}

И это событие я связан в другом базовом контроллере для воспроизведения формата результата, следующим образом:

Функция инициализации общественности () { 
        родительский :: Init (); 
        Событие :: на ( 
            Response :: имя класса (), 
            ответ :: EVENT_BEFORE_SEND, 
            [$ это, 'formatDataBeforeSend'] 
        ); 
    }

Очень странно, почему он был смешан с этим?

Кстати, так как эта ситуация всего приобретение метод getAppRoutes система маршрута, в котором выполняются операции для всех экземпляров контроллера. Суть его здесь. 

Способ инициализации для преобразования:

Функция инициализации общественности () { 
        родительский :: Init (); 
        если (! Event :: hasHandlers (Response :: имя класса (), ответ :: EVENT_BEFORE_SEND)) { 
            Event :: на ( 
                Response :: имя класса (), 
                ответ :: EVENT_BEFORE_SEND, 
                [$ это, 'formatDataBeforeSend'] 
            ); 
        } 
    }

Однако, после этого лечения, есть проблемы, а именно:

{ 
    "IsSuccess": 1, 
    "ErrMsg": "OK", 
    "Данные": { 
        "error_code": 1, 
        "сообщение": "OK", 
        "res_msg": { 
            "доступен": [ 
                «/ апи / авт / вид», 
                "/ апи / авт / создать", 
                "/ API / аутентификации / обновления", 
            ], 
            "назначенный": [ 
                "/ *", 
                "/ администратор / *" 
            ] 
        } 
    } 
}

Есть проблемы, но причина этой проблемы является то, что из-за события, которые инициируют, связанные как контроллер маршрута, в сочетании с обычным триггером, вызывая проблемы.

В дополнение к этой проблеме, чем предшествовало определение, мы должны были справиться с этим, следующим образом:

Функция инициализации общественности () { 
        родительский :: Init (); 
        если ( 
            ! Event :: hasHandlers (Response :: имя класса (), ответ :: EVENT_BEFORE_SEND) 
            &&! Yii :: $ app-> response-> hasEventHandlers (Response :: EVENT_BEFORE_SEND) 
        ) { 
            Event :: на ( 
                Response :: имя класса (), 
                ответ :: EVENT_BEFORE_SEND, 
                [$ это, 'formatDataBeforeSend'] 
            ); 
        } 
    }

Потому что она включает в себя два пути, чтобы вернуться к формату, и в интервью, неоднократно вызывая инстанцируется контроллер, это, как правило, не часто. Таким образом, это явление особое положение. Проблема была найдена.

рекомендация

отwww.cnblogs.com/jiangtian/p/10991576.html