![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
{ "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'] ); } }
Потому что она включает в себя два пути, чтобы вернуться к формату, и в интервью, неоднократно вызывая инстанцируется контроллер, это, как правило, не часто. Таким образом, это явление особое положение. Проблема была найдена.