Задать вопрос
  • Как в symfony 4 разбить большую форму на вкладки?

    voronkovich
    @voronkovich
    Нужно просто вручную вывести поля формы в коде вкладок в шаблоне (How to Control the Rendering of a Form). Если это админка, и вы используете bootstrap, можете использовать табы: https://getbootstrap.com/docs/4.0/components/navs/#tabs.
    Основная проблема при использовании вкладок заключается в том, что вам нужно, чтобы после отправки формы текущая вкладка осталась открытой. Поэтому, нужно сохранять идентификатор текущей вкладки в хранилище браузера. Пример можете найти здесь: How to keep the current tab active on page reload ....

    Примерно так это может выглядеть:

    {% extends 'base.html.twig' %}
    
    {% block body %}
    <ul class="nav nav-tabs" role="tablist">
        <li class="nav-item">
            <a class="nav-link active" href="#general-tab" data-toggle="tab" role="tab" aria-selected="true">
                General
            </a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="#security-tab" data-toggle="tab" role="tab" aria-selected="false">
                Security
            </a>
        </li>
    </ul>
    <div class="tab-content">
        {{ form_start(form) }}
        {{ form_errors(form) }}
        <div class="tab-pane active show" id="general-tab" role="tabpanel" aria-labelledby="general-tab">
            {{ form_row(form.field1) }}
            {{ form_row(form.field2) }}
        </div>
        <div class="tab-pane" id="security-tab" role="tabpanel" aria-labelledby="security-tab">
            {{ form_row(form.field3) }}
            {{ form_row(form.field4) }}
        </div>
        <button type="submit">Submit</button>
        {{ form_end(form) }}
    </div>
    {% endblock %}
    
    {% block javascripts %}
    {{ parent() }}
    <script charset="utf-8">
    $(function() {
        $('a[data-toggle="tab"]').on('show.bs.tab', function(e) {
            localStorage.setItem('activeTab', $(e.target).attr('href'));
        });
    
        var activeTab = localStorage.getItem('activeTab');
    
        if (activeTab) {
            $('.nav-tabs a[href="' + activeTab + '"]').tab('show');
        }
    });
    </script>
    {% endblock javascripts %}
    
    {% block stylesheets %}
    {{ parent() }}
    <style type="text/css" media="screen">
    .tab-pane:not(.show) {
        display: none;
    }
    .tab-pane.show {
        display: block;
    }
    </style>
    {% endblock  %}
    Ответ написан
    Комментировать
  • Как защитить пароль при передаче формы на сервер?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Три ответа и куча лайков.
    Что характерно, если тех же самых людей спросить, надо ли хэшировать пароли на сервере - все дружно, строем и хором ответят - НУЖНО!

    При этом мысль, как совместить обе технологии, не приходит в голову ни одному из них. А они не совмещаются. Если "сервак со своей стороны так же солит пароль и считает хэш" то это значит... что пароли хранятся в открытом виде!

    Это квинтессенция подобныйх сайтов. Ответ почему-то всегда даётся самый буквальный. При этом вопрос никогда не подвергается сомнению или хотя бы минимальной проверке на осмысленность. Такое ощущение, что отвечающие воспринимают вопрос как экзамен что ли? Или как челендж - ответить любой ценой, пусть даже и неимоверных извращений и ГАРАНТИРОВАННЫХ граблей в будущем. Или - как сейчас - ценой СНИЖЕНИЯ защищенности! Но зато ответ буквальный. И так не только здесь - так практически в любом ответе. Ну никогда ни у кого не твремени задуматься над вопросом - все торопятся отвечать.

    Я не знаю, что с этим делать. Такой подход очень вредит как самому сайту, так и тем, кто задает вопросы. Вместо того, чтобы показать правильный подход, ему старательно, сопя и напрягая остатки извилин, помогают выстрелить себе в ногу.

    Возможно, одна из причин в том, что в голове у отвечателей отсутствуют реальные знания, а стоит органчик, в который записано несколько прочитанных когда-то ответов. И один из этих ответов выстреливается сразу после прочтения заголовка - даже не углубляясь в текст вопроса. Таких "отвечателей" надо гнать поганой метлой. Пусть самоутверждаются в другом месте. Тем же, кто хочет ответить, рекомендую придерживаться правила:

    Перед тем как отвечать, НАДО СНАЧАЛА ПОДУМАТЬ. Посчитать на ход вперед - "а что будет, если сделать, как я советую?" Посчитать на ход назад - "а зачем ему нужно это? Не похож ли этот вопрос на мой собственный, который я когда-то задавал от недостатка знаний?" И попробовать ответить так, чтобы РЕАЛЬНО помочь спрашивающему, а не просто выдать зазубренный ответ.

    Возвращаясь к вопросу: нет, нельзя без SSL. Хэширование на сервере важнее.
    Можно эмулировать SSL для передачи пароля, но куда проще воспользоваться готовым механизмом. На дворе 2014 год, все основные сайты перешли на шифрование всего трафика вообще. Пора переставать бояться SSL.
    Ответ написан
    11 комментариев
  • DigitalOcean как замена хостингу. Как всё грамотно настроить?

    @neol
    Во-первых, безопасность - это процесс, а не состояние.
    Чтобы система была более-менее безопасной, нужно:
    - быть в курсе существующих уязвимостей в используемом софте (как минимум следить за ubuntu security notices )
    - ставить апдейты
    - использовать достаточно стойкие пароли и периодически их менять
    - отключать неиспользуемые сервисы
    - если возможно, максимально ограничивать доступ по сети (например, не выставлять mysql на всеобщее обозрение)
    - отключать неиспользуемые модули, плагины, расширения, фичи etc.
    - делать бекапы
    - всегда строго соблюдать принцип минимальных привилегий
    - не подключаться к серверу с ненадежных систем (подключение с домашнего десктопа, на котором детишки гоняют пиратские игры, а вы смотрите "порно онлайн бесплатно без смс" - не очень хорошая идея).

    Эти довольно простые советы в стиле КО на самом деле дают практически 100% защиту от "автоматических" взломов (имеются в виду боты, которые сканируют все подряд в поисках уязвимых систем и троянчики, вытаскивающие сохраненные пароли). Все остальное больше зависит от вашего кода, чем от каких-то настроек.
    Ответ написан
    Комментировать