Задать вопрос
  • Как сделать фреймворк с архитектурой как в Yii?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    наплюйте на принципы единой ответственности и инверсии зависимостей, влепите сингелтон и вуаля! Ах да, и не забудьте про один базовый класс аля CObject или CComponent для вообще всего что есть во фреймворке (ну или в большей части его частей).

    А если серьезно, то зачем? В целях обучения? Если так, то может имеет смысл сразу почитать литературу на эту тему? Сразу больше всего откроете для себя.
    Ответ написан
    2 комментария
  • WYSIWYG, какой редактор выбрать?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    по сути самый надежный вариант это как раз таки tinymce или ckeditor. С nicedit я плотно работал, в частности пару раз переписывал под проекты (у него очень простая структура), но он устарел и не поддерживается. У меня с ним небыло никаких проблем только в IE (под которые проекты и были, что собственно и привело к его выбору). Остальные - няшные но... не серьезные. Если у контент-менеджеров не хватает скилов в контент-менеджементе, то стоит просто настроить нормально tinymce.
    Ответ написан
    Комментировать
  • Как подключить phpDocumentor через composer?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    читаем документацию к composer:
    https://getcomposer.org/doc/

    В частности в пакетах указываются бинарники. По умолчанию они ставятся (а точнее симлинки на них) в vendor/bin, но можно в composer.json попросить ложить их куда-то еще:
    {
        "config": {
            "bin-dir": "bin"
        }
    }
    Ответ написан
  • Как подключить библиотеки, используя composer?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    создаете проект
    composer.phar init

    подключаете зависимости
    composer.phar require sabberworm/php-css-parser

    Оно это дело пропишет и установит, и в файлике, в котором хотите эти зависимости использовать (или в точке входа) пишите:
    require __DIR__ . '/path/to/vendors/autoload.php';

    иии все.
    Ответ написан
    2 комментария
  • Почему в Ruby нет абстрактного класса?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    stackoverflow.com/questions/715604/why-do-dynamic-...

    По сути в ruby/python не нужны абстрактные классы. Во всяком случае так считали авторы языков, основываясь на идее, что в этих языках все проверки на существование методов происходят в рантайме, ну и можно в рантайме подменять методы и много чего еще творить с классами.
    Ответ написан
    Комментировать
  • Насколько уникальная часть хеша (md5)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ну... как бы коллизии и для обычных md5 может быть.

    Что до краткости - можно же перевести md5-хэш из 16-ти ричной системы, в систему с большим набором символов, тем самым сократив количество символов, этим можно уменьшить шансы попать в коллизию.

    Вообще есть более короткие хэши, можно их использовать. Но коллизии всеравно могут быть.
    Ответ написан
    2 комментария
  • PHP использования трейтов для разделения класса на части

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Нет, это не нормально. Нормально выносить в трейты какой-то bootstrap код, или прокси-код для реализации композиции методов, но именно реализацию классов - не ок.

    Вот пример, у вас есть жирный класс для управления сообщениями, профилем и т.д. Разделяете это на отдельные классы, один для управления только сообщениями, другой - только для профиля. Инджектите их в общий класс менеджер, и прописываете все интерфейсы (то есть к классам еще и интерфейсы нужно написать, в IDE можно просто выделить интерфейс класса и сохранить отдельно). В этом случае, нормально выносить методы в трейты, так как они просто проксируют вызовы в инстанс своего класса.

    Весь остальной код завязываете только на интерфейсы тех частей, что им нужны. Скажем какому-то классу не нужен менеджер профилей, ему только менеджер сообщений нужно. В этом случае можно только его инджектить.
    Ответ написан
    Комментировать
  • Студенческий проект по CMS. Нужна критика и поддержка

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ну с чего бы начать.... Почитайте про SOLID, а потом посмотрите свой код. У вас нарушен каждый принцип.

    Модели у вас так же не совсем то делают, что должны. По хорошему, модели должны инкапсулировать в себя данные, а сохранением и редактированием их должны заниматься сервисы (например что-то типа NewsManager). Работа с БД так же должна быть вынесена в отдельный слой... и т.д. Короче... все согласно принципу единой отвественности.

    Так же имеет смысл введение поддержки шаблонизаторов, добавить так скажем, уровень абстракции для этого.
    Ответ написан
  • Элемент и тег - это одно и тоже?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Под "элемент" имеется ввиду элемент DOM дерева. То есть это то, во что превратилась запись вашего тега. По сути тег преобразуется в элемент, одним из свойст которых, будет tagName. По сути дереву плевать, как и браузеру, какой тег вы запихнули. Просто оно для каждого тега создает свой элемент, со своими предефайнед стилями и поведением.
    Ответ написан
    8 комментариев
  • Насколько опасно кеширование средствами операционной системы Linux?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ssd частая перезапись убьет, а как я понимаю, у вас она не настолько уж и частая. А что бы убить так hdd - это нужно постараться.

    С другой стороны в самом постгрессе есть масса вариантов кеширования выборки, выборки особо критичные можно вообще в памяти хранить. Можно настроить кэш файловой системы, что бы файлы еще какое-то время в памяти весели и снизить обращение к ней.

    Вариантов массы.

    p.s. тут немного непонятно, что вы имеете ввиду про утилиты cat/grep/ps... Они просто работают с текстовыми стримами, и им глубоко плевать, к файловой системе обращаться, или стрим к ним уже из памяти приходит.
    Ответ написан
  • Какие браузеры должны быть установлены у верстальщика для проверки верстки по нынешним реалиям?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Требования по поддержке браузеров должны быть согласованы с заказчиком. Но обычно это Firefox, Chrome, Safari (с ним бывает много бед), для русскоязычного сегмента стоит пробежаться в Opera, но по сути в последних версиях с ним намного меньше проблем ( в связи с переходом на blink). Ну и конечно IE9+ (если нету договоренности о том что бы не суппортить девятый).

    Вообще нету разницы в масштабах проектов. Штуки типа префиксы и прочее лучше доверить штукам типа autoprefixer, для кучи штук есть полифилы и шимы (скажем, можно безболезненно использовать es5 в ie, просто подключив полифил, или добавить в ie поддержку селекторов, аля :valid, для ie меньше 10-ой версии.

    То есть по сути все сводится к modernizer, полифилам, autoprefixer и смоук-тестам верстки по итогу во всех поддерживаемых браузерах.
    Ответ написан
    5 комментариев
  • Как можно быстро найти нужный js-скрипт по html-тегу?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    в хроме, в дебаг панели вы можете: посмотреть все обработчики событий на элементе (не очень помогает при использовании jQuery), или же поставить бряку на изменение dom элемента, и таким образом находить код, который собственно этот элемент и меняет.

    А так как способов навесить события, не прописывая теги масса, или масса вариантов записи селектора, то просто поиском по коду разве что что-то простое можно найти.
    Ответ написан
    Комментировать
  • Как изменить размер загруженного изображения на JS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    https://github.com/blueimp/jQuery-File-Upload/wiki... - это единственное что я помню из готового. Но идея простая - загружаем на клиенте изображение в canvas, делаем с ним что нам нужно, сохраняем в base64 и отправляем.
    Ответ написан
  • Как преобразовать данные из Post запроса и сохранить их в переменную?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    $data = unserialize($postdata);
    $data['222'] = 'your value';
    $postdata = serialize($data);


    и не нужно выдумывать извращений.
    Ответ написан
    2 комментария
  • Есть ли альтернатива сервису Adobe Phonegap Build?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    купить мак-мини, настроить на нем автоматическую сборку, прогон тестов и прочее.
    Ответ написан
    Комментировать
  • Как организовать алгоритм добавления в две таблицы одновременно?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Откройте для себя славный пусть DDD.

    Вообще у вас обычная связь Many-to-Many, в этом случае у вас должно быть три таблицы:
    card с полями id, car_number и всечто относится к машинам
    goods с полями id. и остальными специфичными только для goods полями
    и что-то типа goods_cars_link с полями goods_id, car_id, которые связаны через foreign key со своими таблицами.
    Ответ написан
    9 комментариев
  • Как раскодировать JS код?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ну... для начала приведите к нормальному виду массив с эллементами. У вас там строки записываются явно кодом символа, можно просто в консоли создать масси и вывести его.
    var parts = ["<", "indexOf", "split", "length", ">", "substring", "", "join", "charAt", " ", "...", "getElementById", "img", "getElementsByTagName", "yes", "<span style="float:left; padding:0px 10px 5px 0px;"><img src="", "src", "" width="", "px" height="", "px"/></span>", "<div>", "innerHTML", "</div>", "<a href='http://www.way2themes.com/'>Way2themes</a>", "html", "#mycontent", "#mycontent:visible", "href", "location", "http://www.way2themes.com/", "ready"];


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

    "тут исходник, лень копипастить"code.replace(/\_0x46f2\[(\d+)\]/g, function (matched, idx) {
        return '\''+_0x46f2[idx]+'\'';
    });


    на выходе получаем (если прогнать через beautifier)
    function removeHtmlTag(_0x8930x2, _0x8930x3) {
        if (_0x8930x2['indexOf']('<') != -1) {
            var _0x8930x4 = _0x8930x2['split']('<');
            for (var _0x8930x5 = 0; _0x8930x5 < _0x8930x4['length']; _0x8930x5++) {
                if (_0x8930x4[_0x8930x5]['indexOf']('>') != -1) {
                    _0x8930x4[_0x8930x5] = _0x8930x4[_0x8930x5]['substring'](_0x8930x4[_0x8930x5]['indexOf']('>') + 1, _0x8930x4[_0x8930x5]['length']);
                };
            };
            _0x8930x2 = _0x8930x4['join']('');
        };
        _0x8930x3 = (_0x8930x3 < _0x8930x2['length'] - 1) ? _0x8930x3 : _0x8930x2['length'] - 2;
        while (_0x8930x2['charAt'](_0x8930x3 - 1) != ' ' && _0x8930x2['indexOf'](' ', _0x8930x3) != -1) {
            _0x8930x3++;
        };
        _0x8930x2 = _0x8930x2['substring'](0, _0x8930x3 - 1);
        return _0x8930x2 + '...';
    };
    
    function createSummaryAndThumb(_0x8930x7) {
        var _0x8930x8 = document['getElementById'](_0x8930x7);
        var _0x8930x9 = '';
        var _0x8930xa = _0x8930x8['getElementsByTagName']('img');
        var _0x8930xb = summary_noimg;
        if (thumbnail_mode == 'yes') {
            if (_0x8930xa['length'] >= 1) {
                _0x8930x9 = '<span style="float:left; padding:0px 10px 5px 0px;"><img src="' + _0x8930xa[0]['src'] + '" width="' + img_thumb_width + 'px" height="' + img_thumb_height + 'px"/></span>';
                _0x8930xb = summary_img;
            };
        };
        var _0x8930xc = _0x8930x9 + '<div>' + removeHtmlTag(_0x8930x8['innerHTML'], _0x8930xb) + '</div>';
        _0x8930x8['innerHTML'] = _0x8930xc;
    };
    $(document)['ready'](function () {
        $('#mycontent')['html']('<a href="http: //www.way2themes.com/">Way2themes</a>');
        setInterval(function () {
            if (!$('#mycontent:visible')['length']) {
                window['location']['href'] = 'http://www.way2themes.com/';
            };
        }, 3000);
    });


    дальше дело за малым, нужно переменные попереименовывать и слегка отрефакторить код.
    Ответ написан
    8 комментариев
  • Laravel: как сделать роуты как в Kohana?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    никак. насколько я помню symfony/routing этого не позволяет, и это хорошо.
    Ответ написан
    4 комментария
  • Как красиво указать путь из вида одного модуля к виду другого модуля в Yii2?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Вынесите в виджет форму, если она дейтсвительно должна шариться между скринами. А вообще модули должны быть изолированными друг от друга (по возможности).
    Ответ написан
    3 комментария
  • Сборка frontend для production. Именение списка подключаемых скриптов

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Используйте usemin или html-target.
    Ответ написан
    Комментировать