<?php
class EventHandler
{
/**
* Отсутствующий перевод
*
* @param CMissingTranslationEvent $event Событие
* @return void
*/
public static function handleMissingTranslation($event)
{
//вызываемый файл
$files = array();
//
$needle = dirname(dirname(__FILE__));
//находим файл, из которого вызван перевод
$trace = debug_backtrace();
foreach ($trace as $x)
{
//ищем файл, который начинается
if (isset($x['file']) && ($x['file'] !== __FILE__) && (stripos($x['file'], $needle) === 0))
{
$file = $x['file'];
$line = isset($x['line']) ? $x['line'] : -1;
$files[] = "{$file} ({$line})";
}
}
}
}
Во-первых это не решает изначально неправильную структуру процесса создания и перевода текстов в Yii. Во-вторых, onMissingTranslation вызывается только когда это окно показывается пользователю. То есть, чтобы собрать все переводы нужно обойти все возможные страницы и вызвать все возможные ошибки. Я не думаю, что это оптимальный путь. Это лучший из придуманных на данный момент, да. Но не оптимальный.
johnatanb писал(а):
1) Ну у меня есть пример текста, который "переводчик" не может найти в массиве и из-за этого выводит оригинал постоянно. Куда кинуть? Там двадцать строк. Я профайлер включил, но ошибок-то он никаких не даёт. Просто нет такого перевода и всё.
Ну так а почему бы не поставить брейкпоинт на месадже, который не переводится и продебажить?
<?php
class EventHandler
{
/**
* Отсутствующий перевод
*
* @param CMissingTranslationEvent $event Событие
* @return void
*/
public static function handleMissingTranslation($event)
{
//вызываемый файл
$files = array();
//
$needle = dirname(dirname(__FILE__));
//находим файл, из которого вызван перевод
$trace = debug_backtrace();
foreach ($trace as $x)
{
//ищем файл, который начинается
if (isset($x['file']) && ($x['file'] !== __FILE__) && (stripos($x['file'], $needle) === 0))
{
$file = $x['file'];
$line = isset($x['line']) ? $x['line'] : -1;
$files[] = "{$file} ({$line})";
}
}
}
}
Во-первых это не решает изначально неправильную структуру процесса создания и перевода текстов в Yii. Во-вторых, onMissingTranslation вызывается только когда это окно показывается пользователю. То есть, чтобы собрать все переводы нужно обойти все возможные страницы и вызвать все возможные ошибки. Я не думаю, что это оптимальный путь. Это лучший из придуманных на данный момент, да. Но не оптимальный.
Ещё есть локализованные файлы. Я думаю, что разработчик должен посетить свои страницы раньше пользователя
Самое главное что бы я хотел - официальные дополнения. Без них, если честно, стрёмно брать хоть и полезное, но сторонее расширение, которое может через несколько версий застыть (автор прорпал) и начинается бедлам с поддержкой в рабочем состоянии.
Сами расширения могли-бы поддерживаться внешними разработчиками (можно иметь возможность назначать другого главного разработчика если автор пропал/ушел), но окончательный контроль качества (помимо сообщества) мог бы быть за коммандой Yii.
хотелось бы появления метода saveAll(), updateAll() для CactiveRecord, который бы делал один запрос, чтобы не нужно было к примеру при обработке табличного ввода, в цикле сохранять каждую запись.
видимо я погорячился ) просто подумал, например findAll() же возвращает массив объектов и к примеру у нас есть табличная форма, и когда данные приходят в $_POST, они присваиваются массово сразу специальному объекту, который коллекционирует все пришедшие записи и вызывался бы метод saveAll() который компонует данные и выполняет один INSERT/UPDATE, ну и автоматическая валидация всех моделей. наверное так не получится, да и будет ли большая польза от этого..
Sam Dark писал(а):
Psih
Текущей командой не вытянем. Возможно только если набрать extension review team. Но дело это не очень интересное и, боюсь, народу надоест.
Ну надо не только review, но и тех, кто может поддерживать. Как с yiiext по сути. ИМХО, наверно стоит развивать Yiiext дальше и подключить как официальную библиотеку и по немногу принимать народ именно по доработке/поддержке расширений.
alexy писал(а):Неплохо было бы реализовать получение lastInsertId а AR )
lastInsertId - никакого отношония к AR не имеет, это свойство базы данных, вот оттуда и бери это значение. AR должен работать независимо от базы и от типа подключения.
1. git
2. решения для более комфортного тестирования моделей/контроллеров (голый phpunit совсем не торт). + присоединяюсь за Behat. Еще кстати в Symfony 2 тоже неплохо устроено в плане tdd (контроллеры например удобно тестировать с помощью встроенного Crawler). Хотелось бы похожее в Yii.
Самое классное в git: это наличие гитхаба, на котором можно сделать форк проекта, что-то пофиксить или что-то добавить, а потом делать так называемый pull request, т.е. попросить принять изменения в upstream (работает из веб-морды). Т.е. потенциально более удобно вливать "чужие" фиксы.
Кстати, сегодня с утра конвертил репозиторий в git с сохранением всей истории: https://github.com/Stamm/yii. Только у некоторых коммитеров не знаю email'ов. Осталось прикрутить тэги =)