• Почему Hibermate не создает таблицы?

    IvanCher
    @IvanCher
    Мысли шире
    Может кому пригодится ещё, потому что достаточно неочевидное поведение и нигде не объясняется.
    Исходные данные:
    Я только начинаю знакомство с java и решил использовать Java SE8, Hibernate 5.1, JPA для небольшого десктоп-приложения.
    Задача:
    Сгенерировать схему базы данных из аннотированных entity-классов, используя SchemaExport из командной строки.
    Проблема:
    SchemaExport не поддерживает пока аннотированные entity-классы из коробки, он ждёт старые *.hbm.xml файлы мапинга.
    Объяснение:
    Команда имеет простой синтаксис
    java -cp hibernate_classpaths org.hibernate.tool.hbm2ddl.SchemaExport options mapping_files

    Все варианты options можно посмотреть в классе org.hibernate.tool.hbm2ddl.SchemaExport строки с 499 по 551. Там всё понятно.
    Если используете hibernate.cfg.xml, то можете этот файл указать в опции --config.
    mapping_files ожидает либо jar-файлы, либо *.hbm.xml-файлы мапинга. Я сперва думал, что если передать jar, то он в нём найдет аннотируемые entity-классы и увидит их, но не тут-то было. В jar-архивах он перебирает все файлы и ищет среди них *.hbm.xml-файлы мапинга. Какой-то замкнутый круг ...
    Решение:
    Тут я выложил небольшой пример кода, который подсвечивает строку, добавляющую аннотированный entity-класс. Для этого entity-класса будет сгенерирован запрос.

    Внимание!
    Данный класс HibernateUtil является просто небольшим примером. Он только генерирует SQL-команды и вставляет их в файл init.sql.
    Можете сделать класс-обертку для SchemaExport, чтобы иметь все его возможности, только придумать какой-то вариант, чтобы добавлять аннотированные entity-классы. Хотя, если меня попросят, то и я могу такой класс написать, это вообще не сложно.
    Core-team говорят, что им сейчас некогда заниматься tools для hibernate, поэтому не известно сколько ждать от них этой правки.

    Прям целая статья получилась, надеюсь кому-то она будет полезной.
    Ответ написан
    Комментировать
  • PHP скрипт открывается как текст и не выполняется. В чем причина?

    IvanCher
    @IvanCher
    Мысли шире
    Вам нужно понимать, что происходит, когда запрос доходит до веб-сервера.

    Сперва веб-сервер (обычно Apache или Nginx) получают запрос и принимают решение, что делать с ним дальше. Если нет правила для такого запроса, то они просто попытаются найти файл и отдать его, как статический. В вашем случае так и происходит. Часто веб-серверу пишут правило типа "если запрос заканчивается на .php, то передай его на исполнение php (mod-php, php-fpm, php-fastcgi и т.п.), а полученный от php ответ верни клиенту (браузеру, как правило)".

    Я использую во время разработки встроенный php-веб-сервер, но не вздумайте его использовать на живом проекте. На реальном сервере с проектом лучше использовать nginx+php-fpm.
    В unix-подобных системах встроенный пхп-веб-сервер запускается очень просто:
    - Через консоль(терминал) заходите в папку с проектом и пишете "php -S localhost:8000".
    - После этого в браузере заходите на урл localhost:8000 и Ваш проект работает.
    Если Вы работаете на windows, то быстрее осваивайте линукс\mac и разрабатывайте сразу на нормальных системах. Или, как я раньше делал, на виртуалке поднимайте сервер и на нем разрабатывайте.
    Ответ написан
    5 комментариев
  • С чего начать создание веб-сервиса?

    IvanCher
    @IvanCher
    Мысли шире
    Толковый пхп-шник, который умеет пользоваться фотошопом и бутстрапом. Хорошо, если еще знает основы сео и смм. Если слишком большой проект, то еще 1 джуниор. Но вообще, если требуется намного больше для старта, то подумайте еще раз над необходимостью многих функций приложения.
    Ответ написан
    4 комментария
  • Yii боевка игры?

    IvanCher
    @IvanCher
    Мысли шире
    Он ведь у тебя наносит удар после какого-то действия пользователя ? Если так, то аяксом отправляй запрос, на сервере записывай показатели здоровья в бд и в ответ с сервера отсылай нанесенный урон, на клиенте просто нужное значение подставляй.
    Ответ написан
    2 комментария
  • Yii2 Active Form: как скрыть тег с ошибкой, если текста ошибки нет?

    IvanCher
    @IvanCher
    Мысли шире
    <?= $form->field($model,  'name', [
        template' => "
            {label}
            {input}
            {error}",
        'errorOptions' => "
            'tag' => 'span',
            'class' => 'error',
        "
    ]) ?>
    Ответ написан
  • Как в Yii2 basic убрать web/ из url при помощи .htaccess и правил urlManager'а?

    IvanCher
    @IvanCher
    Мысли шире
    Если коротко, то вам нужно WebRoot указать не корневую папку с проектом (***/project), а папку web(***/project/web).
    Ответ написан
    Комментировать
  • Как делается валидация динамических полей?

    IvanCher
    @IvanCher
    Мысли шире
    Пусть у поля атрибут name будет каким-то идентификатором, по которому можно будет узнать все его ограничения. В контролере отдаешь данные на валидацию модели поля, модель по идентификатору получает правила(ограничения), валидирует, отвечает контролеру, контролер формирует ответ клиенту.
    Ответ написан
    Комментировать
  • Где правильнее проверять пользовательские данные? В контроллере или модели?

    IvanCher
    @IvanCher
    Мысли шире
    За работу с данными должна отвечать модель. Именно модель должна знать какие данные допустимы, а какие нет, потому что на ней лежит функция обработки/записи этих самых данных.
    У контролера цель - обрабатывать пользовательские запросы и решать, как на них ответить.
    Иными словами, вы принимаете данные с формы контролером и говорите модели сказать валидные ли данные пришли. Модель отвечает контролеру, контролер принимает решение, как на это ответить пользователю (ошибкой, каким-то конкретным представлением и т.п.).
    UPDATE
    MVC советую всем прочесть, прежде, чем давать странные советы. Особенно внимательно прочесть "Наиболее частые ошибки", как раз говориться, что делать из контролера Толстый Тупой Уродливый Контролер - не правильно по определению шаблона. Можно спорить сколько угодно, но об этом прямо многие авторитеты. Другое мнение сформировано отсутствием глубокого понимания MVC и малым опытом на крупных проектах.
    Ответ написан
    17 комментариев
  • Какой фрэймворк выбрать Yii 2 или Symfony 2?

    IvanCher
    @IvanCher
    Мысли шире
    Симфонисты не работают с yii2 и не до конца понимают о чем пишут :)
    Я скажу так: оба фреймворка на высоте, по возможностям одинаковы, но подходы очень разные.
    Объективно скажу так: на yii2 не получится запускать отдельные модули без запуска всего приложения, тут у симфони2 огромный плюс. Так же у симфони более классные консольные команды для генерирования каркасов, мне больше нравится, чем gii(но дело вкуса). Но по факту большинство сильных сторон симфони не оправдывается в связи с высоким порогом вхождения. Найти хорошего симфони программиста намного сложнее, чем найти его на yii2. Поэтому взависимости от бюджета и масштаба проекта можете выбирать. Симфони2 - это больше уровень корпораций, yii2 более простой при практчески том же функционале.
    Если знаете симфони2, то лучше подтяните его. Yii2 изучить намного проще, намного всё прозрачнее внутри работает, там Вам хватит пару вечеров, чтобы пройтись по исходникам и всё для себя понять как изнутри как работает.
    Ответ написан
    7 комментариев
  • Почему не сразу срабатывает функция?

    IvanCher
    @IvanCher
    Мысли шире
    Ну а то, что данный код выполняется при событии keypress(нажатие клавиши) и привязан к textarea Вас не смущает ? :)
    Ответ написан
  • Как подключить один модуль в разных приложениях, построенных на Yii 2 Advanced Application?

    IvanCher
    @IvanCher
    Мысли шире
    1. Сделайте лучше АПИ отдельным приложением, а общие модели создайте в common.
    2. Кофиг-файлы в приложениях должны мерджиться с конфигом common-приложения, поэтому пропишите модуль в конфиге common-приложения и модуль будет доступен в любом.
    Ответ написан
    Комментировать
  • PHP Рекурсивный обход данных из базы?

    IvanCher
    @IvanCher
    Мысли шире
    $sourceArray = *предполагаю, что извлекли все записи из базы*;
    $newArray = [];
    foreach ($sourceArray as $el) {
        if ($el['parent_id']) {
            $newArray[$el['parent_id']]['children'] = [
                'id' => $el['id'],
                'text'=>$el['text'],
                ...
            ];
        } else {
            $newArray[$el['id']] = [
                'id' => $el['id'],
                'text'=>$el['text'],
                ...
            ];
        }
    }

    подойдет ?
    Ответ написан
  • Как с помощью jquery выбрать все ссылки, подходящие под условие?

    IvanCher
    @IvanCher
    Мысли шире
    jQuery('a[href!="sitename"]').not('a[href^="https://stat"], a[href^="http://support"]')
    Ответ написан
    Комментировать
  • Если вызвать модальное окно с середины - страница скроллится к верху, как запретить?

    IvanCher
    @IvanCher
    Мысли шире
    Можете использовать этот плагин, специально сделан для Вашего случая. Можете поковырять его и разобраться, как в плагине предотвращается скролл.
    Ответ написан
  • Возможно ли сделать что то подобное?

    IvanCher
    @IvanCher
    Мысли шире
    Эти возможности появились в php 5.4. https://php.net/manual/ru/migration54.new-features.php
    Что про них читать, я даже ума не приложу. Чего тут читать ? Функция возвращает массив, значит можешь сразу обращаться к элементу этого массива по индексу.
    $user_foto = $this->getUserInfo($id)['foto'];
    $user_foto = $this->getUserInfo($id)->foto; // Если возвращается объект.

    Только проверки на существование этого делать не забывай.
    Аналогично и с созданием объекта. Не хочешь использовать промежуточную переменную, просто помести создание объекта в скобки.
    Ответ написан
    Комментировать
  • Как создать одну AR модель для двух таблиц в Yii?

    IvanCher
    @IvanCher
    Мысли шире
    1. Создаешь 2 модели: Account и AccountC (назови, как нравится).
    2. В модели Account создаешь публичные свойства с названиями полей, которые нужно сохранить во второй таблице.
    3. В модели Account в методе afterSave сохраняешь нужные свойства в таблицу модели AccountC.

    Можешь сделать тоже самое в методе afterSave вручную, например через это.
    Ответ написан
    Комментировать
  • Ленивая загрузка данных из базы?

    IvanCher
    @IvanCher
    Мысли шире
    Случаем код у тебя не такого плана:
    foreach($models as $model) {
      $model-> getAllTimes();
    }

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

    IvanCher
    @IvanCher
    Мысли шире
    любой берите, зарегистрированный в США или Европе, и чтобы сервер физически располагался где-нибудь там же, лучше в Голандии. Абузоустойчивые жутко глючные и ненадежные сами по себе. Просто думайте о том, кому вы "переходите дорогу" и исходя из этого думайте где бы всё это расположить дело. А вообще, если айпи спрячете надежно за прокси-сервером и не спалите, то хоть в России располагайте, всё ровно никто не узнает.
    Ответ написан
    2 комментария
  • WordPress отключиться от интернета?

    IvanCher
    @IvanCher
    Мысли шире
    Вы запустили скрипт обновления, он видимо скачивал обновления какие-то. У вас в настройках пхп стоит максимальное время работы скрипта 30сек, скрипту не хватило этого времени для обновления и он завершился.
    Увеличьте max_execution_time в php.ini.
    Ответ написан
    Комментировать