• Как в Angular custom control вывести весь список ошибок контрола?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    Потому что ваш компонент, реализующий ControlValueAccessor , знать ничего не знает про ошибки в контроле формы. Он вообще про этот контрол ничего не знает, связующим звеном тут служит директива formControl, которая слушает контрол и при внешнем изменении его вызывает writeValue.

    Можно сделать свою еще директиву которая будет вызывать другой метод, типа setErrors, но стандартной такой функции нет.
    Вот в этой статье можно найти похожую реализацию, только там передаются pristine и touched. https://habr.com/ru/post/491062/

    Или проще, просто передать ошибки внутрь через инпут :)
    А чтобы наоборот, перекинуть внутренние ошибки на верхний контрол нужно реализовать Validator
    Ответ написан
    1 комментарий
  • Как решить проблему с CORS при использовании локального сервера и webpack dev server с прокси?

    @tonyshow Автор вопроса
    В общем сам решил проблему! Как говориться: "Спасение утопающих - дело рук самих утопающих!"

    Суть того что я делаю, я просто подменяю host:port в адресе заголовка в ответе от локального сервера (proxyRes.headers.location) на host:port webpack dev server'a и CORS идет нах...(лесом), так как не вдупляет, что его наеб... (обманули) ))) и подсунули другой адрес.

    devServer: {
        contentBase: params.path.public, // Путь до корневой дериктории, где dev server будет запрашивать файлы, которые не компилируются webpack'om
        // Например: c://web-site-path/public
        publicPath: params.path.publicPath, // Перфикс пути, по которому будут лежать файлы у вебпак дев сервера 
        // Например: '/public/assets/' - файлы будут доступны по адресу: http://anyships.site/public/assets/file_name.js
        host: 'anyships.site', // Host webpack dev server'a
        port: 3000, // Port webpack dev server'a
        hot: true, // Включить автоперезагрузку страницы при изменении файлов
        proxy: { // Собственно настройки прокси
          '**': { // С какого адреса webpack dev server'a будут проксироваться запросы на адрес локального сервера. 
            // В данном случае ** - значит все адреса проксировать, начиная с корня http://anyships.site:3000
            // Например: http://anyships.site:3000/user запрос на http://anyships.site/user (адрес из target ниже)
            target: `http://anyships.site`, // Целевой адрес локального сервера, куда будут проксироваться запросы с дев сервера 
            onProxyRes(proxyRes, req, res) {
              if (proxyRes.headers.location) { // Если есть заголовок со свойством location (Где храниться полный адрес запроса к локальному серверу)
                let location = proxyRes.headers.location; // Сохраняем адрес зоголовка location из ответа в переменную location
                console.log(`LOCATION: ${proxyRes.headers.location}`); // Выводит в консоль адрес до замены
                location = location.replace('anyships.site', 'anyships.site:3000'); // Заменяем адрес локального сервера на адрес webpack dev server'a
                proxyRes.headers.location = location; // Присваиваем в заголовок location подмененный адрес из переменной location
                console.log(`REPLACED: ${proxyRes.headers.location}`); // Выводит в консоль адрес после замены
              }
            }
          }
        }
      },
      plugins: [
        new webpack.HotModuleReplacementPlugin()
      ]


    5ca0ffd89decb123739532.jpegНадеюсь мой ответ поможет кому-то еще, кроме меня самого! )) Успехов всем!
    Ответ написан
    2 комментария
  • Какой существует PHP Open Source site-builder (наподобии механизма Liferay портлетов) можно использовать?

    zorca
    @zorca
    Grapes.js
    Плюс много плагинов для WordPress.
    Ответ написан
    Комментировать
  • Как скрыть пароль для WebSocket авторизации на html странице?

    @RidgeA
    Когда пользователь авторизуется, то попадает в личный кабинет.

    Если пользователь авторизируется как-то, ему же выдается какой-то токен, который в куки, например, попадает.
    Вот его и передавать в запросе на открытие ws соединения. При обработке открытия соединения и проверять в куках.
    Ответ написан
    Комментировать
  • Doctrine - структура БД для хранения документов, и участников документооборота?

    @u_elnur
    Веб разработчик, Начинающий предприниматель
    Приветствую! Мне в течение последнего года доводилось делать три похожих проекта документооборота. Хотелось бы поделиться со своим решением, как я организовал структуру таблиц (они же и сущности в доктрин).

    Первое:
    У моих проектов было несколько маршрутов согласования. Поэтому я хранил их отдельно. И называл их workflow (бизнес процесс)
    Workflow: (Маршрут согласования)
        id
        name (Название маршрута согласования)
    WorkflowPoint: (Точка согласования)
        id
        title (Название точки. Например "Согласование фин директора")
        workflow_id (Связанный маршрут)
        user_id (Пользователь, который рассматривает документ в этой точке согласования)
        order_id (Порядковый номер точки в маршруте)
        roles (Права пользователя, в данной точке согласования)


    Второе:
    В моих проектов в одном документе согласования могли храниться несколько файловых вложении. Поэтому Файл и Документ согласования хранились отдельно.

    Approval: (Документ согласования)
        id
        title (Название документа)
        author_id (Инициатор)
        state = 0 (Состояние документа. 0 - черновик. 1 - в процессе согласования. 2 - одобрено. 3 - отказано. 4 - архивировано)
        workflow_id (Маршрут, по которому движется данный документ. По умолчанию null, кроме того, когда состояние документа в процессе согласования)
        workflow_point_id (Текущая точка согласования в маршруте. При одобрении, указывается следующая точка)
        approval_user_id (Пользователь, который должен рассмотреть документ в текущий момент. Это поле чисто для удобства в поиске)
    Attachment: (Файл-вложение)
        id
        approval_id (Связанный документ)
        file_path (Путь к файлу)
        author_id (Пользователь, который вложил файл)


    Я значительно упростил структуру, чтобы просто дать Вам идею для размышления. В реальных проектах было гораздо сложнее
    Ответ написан
    3 комментария
  • Doctrine - структура БД для хранения документов, и участников документооборота?

    Задача не сложная. Но вы сами себя запутали. Методик вы не найдёте. Вам надо научиться анализировать происходящий у вас бизнес-процесс и разделять его на алгоритм и контекст. Решать эту задачу за вас было бы неправильно, поэтому вот вам советы:
    1. Выкиньте из документа все признаки, отвечающие за согласование.
    2. Введите новую сущность Согласование.
    3. Свяжите Документ с сущностью Согласование единственной ссылкой. Так вы очистите документ от ненужной ему информации. Ссылка должна храниться на стороне Согласования (Owning Side Relation), но на стороне Документа должна быть возможность получить сущность Согласования (Inverse Side Relation).
    4. Если я правильно понял, то ваш документ может быть согласован по трём разным алгоритмам. Если это так, то воспользуйтесь возможностью доктрины Class Table Inheritance. Вы получите одну связь со стороны документа, но разные алгоритмы аппрува со стороны Согласования.
    5. В каждом из Согласований реализуйте метод isApproved со своей логикой.
    6. После такого разделения вы сможете строить алгоритмы, привязываясь к каждому типу Согласований по отдельности, не обращая внимание на другие.
    Ответ написан
    1 комментарий
  • Doctrine - структура БД для хранения документов, и участников документооборота?

    myrkoxx
    @myrkoxx
    developer
    чисто мое ИМХО в разрезе Symfony я никогда не стал бы проектировать сначала схему базы. Всегда начинаю с создания мапинга Doctrine. Вот как пример (очень простой)

    BlogBundle\Entity\Blog:
      type: entity
      table: bb_blog
      repositoryClass: BlogBundle\Entity\Repository\BlogRepository
      fields:
          name:
              type: string
              length: 100
              nullable: false
          status:
              type: string
              length: 10
              nullable: false
      manyToOne:
          user:
              targetEntity: BlogBundle\Entity\User
              joinColumn:
                  name: user_id
                  referencedColumnName: id
      oneToMany:
          posts:
              targetEntity: BlogBundle\Entity\Post
              mappedBy: blog
              orderBy: { 'createdAt': 'ASC' }
              cascade:
                  - remove


    А потом уже с помощью DoctrineMigrationsBundle генерю миграции которые приведут базу в необходимое состояние.
    Ответ написан
    2 комментария
  • Какие посмотреть уроки по symfony?

    Austin_Powers
    @Austin_Powers
    Web developer (Symfony, Go, Vue.js)
    У Symfony хорошая документация.
    https://symfony.com/doc/current/index.html
    Ответ написан
    Комментировать
  • Таблицы в БД для Symfony Bundle - префиксы таблиц или отдельные БД?

    myrkoxx
    @myrkoxx
    developer
    Думаю лучше использовать префикс. Использовать разделение по бд возможно будет уместно если у вас будет (есть) большая нагрузка, хотя думаю в таком случае есть и лучшие паттерны . Как вариант при нагрузке возможно будет лучше дробить ваше приложение на микросервисы с api нежели держать монолитом.
    Ответ написан
    Комментировать
  • Как организовать Doctrine One-To-One, Unidirectional with Join Table?

    myrkoxx
    @myrkoxx
    developer
    Вот как описано в доке:
    docs.doctrine-project.org/projects/doctrine-orm/en...

    Маленький соевет. Всегда опишите мапинг в Entity через annotanions, xml или yml и пользуйтесь бандлом DoctrineMigrationsBundle

    После добавлений изменений в мапинге делайте просто:

    app/console (bin/console if symfony 3+) doctrine:migrations:diff

    вам миграция нагенерит sql для приведения к актуальному состоянию.
    Ответ написан
    2 комментария
  • Как в Yii2 прикрутить админку rbac к отдельным модулям с помощью mdmsoft yii2-admin?

    slo_nik
    @slo_nik Куратор тега Yii
    Доброе утро.
    Есть хорошая статья, как добавить rbac на сайт. Без сторонних пакетов, силами одного framework. Как раз используется yii2-basic.
    Ответ написан
    Комментировать
  • Какие существуют протоколы передачи данных прикладного уровня для gps-трекинга?

    georgas
    @georgas
    Кратко о себе
    Я запрашивал протокол у livegpstracks.com.
    Протокол простой, но нам такой и нужен был. Судя по названию - наверное есть еще варианты. Сейчас используем его в своем решении.
    Сам протокол:
    Облегченный открытый RTT-протокол версии 003
    
    Сервер: srv1.livegpstracks.com или 5.9.136.109
    Порт: 3339
    Устройство для выбора из списка при подключении: RTT Light
    
    От устройства приходит строка с данными. Пример:
    rtt003,356217625371625,-59.4364251,-129.9839853,0023,0014,123,090,20130618,195430,-11,24,60,A,1
    
    В ответ сервер выдаст "OK\r\n". Под "\r\n" понимается последовательность 0x0D, 0x0A.
    
    Расшифровка пакета:
    Протокол: rtt003, (string) 6 символов
    imei: 356217625371625, (string) 15 символов
    долгота: -59.4364251, (float) 11 символов
    широта: -129.9839853, (float) 12 символов
    скорость: 23, (int) 2 символа
    высота: 14, (int) 2 символа
    азимут: 123, (int) 3 символа
    заряд батареи: 90, в процентах, (int) 3 символа
    дата: 20130618, (string) 8 символов
    время: 195430, (string) 6 символов
    UTC: -11, (int) 3 символа
    количество спутников: 24, (int) 2 символа
    уровень GSM сигнала: 60, (int) 2 символа
    признак GPS или LBS: A (координаты определены по GPS или V - по LBS), (string) 1 символ
    SOS: 1 (сработала кнопка SOS) или 0 (не нажата), (int) 1 символ
    Ответ написан
    Комментировать
  • Как грамотно организовать удаление/переименование файла на Java?

    @bobzer
    Java EE Developer
    Что такое Java Web Start:
    • Позволяет активировать приложения одним щелчком мыши
    • Обеспечивает использование новейших версий приложений
    • Устраняет необходимость проведения сложных процедур установки и обновления
    Ответ написан
    Комментировать
  • Где в JavaFX грамотнее писать метод main?

    halogen
    @halogen
    Java developer
    Плохо использовать пренебрежительные названия, особенно когда дядька даёт дельный совет, ю ноу. Автор на S.O. имеет в виду, что нужно разделять понятия entry point и application. Т.е., должна быть входная точка, а должно быть и приложение. Отдельно. Плюс такого подхода в том, что лучше соблюдается SRP, а также приложение можно использовать в других входных точках "более чисто": будь то Android или GWT (но это зависит от крутости понимания и реализации ООП), или обычные юнит-тесты. Класс Application можно считать фасадом с точки зрения шаблонов проектирования. JavaFx здесь ни при чём.

    ----

    Заметки на полях

    В учебниках стараются писать максимально простой код, чтобы упростить понимание и закрепление материала. Поэтому main(String... args) в таких случаях встречается почти везде.
    Ответ написан
    Комментировать
  • Как JavaFX Separator заставить быть шириной в 1px?

    timych
    @timych
    Мне кажется что тут нет никакой ошибки - элемент имеет нулевую высоту. Бордер добавляется с каждой стороны . То есть верхний бордер плюсуется с нижним - вот вам и два пикселя.
    Не уверен на сто процентов, но возможно это вам поможет: -fx-border-style: hidden hidden solid hidden;
    Ответ написан
    Комментировать
  • Что не так с моим pom.xml для сборки десктопного приложения в exe?

    @mefisto666series Автор вопроса
    проблема была связана с тем, что я использовал java 8, а мавен ставил ещё когда java была 7й. и вот в java home был прописан неверный путь и мавен обращался не туда куда следовало
    Ответ написан
    Комментировать
  • Заражение сайта, что делать дальше?

    @SanyaZol
    Если бэкапов нет, а лечить надо, то рецепт примерно такой:
    - Берем чистую CMS той же версии и делаем diff. будут отличаться все файлы из-за этого кода.
    - Анализируем изменения, внесенные вирусом во все файлы. Скорее всего, их можно поправить простым скриптом на php - правим, и стараемся привести файлы к изначальному виду.
    Далее делаем diff с чистой CMS (в режиме ignore whitespace если изменения показывают кучу пробелов из-за неточного лечения) и решаем что делать с оставшимися "несинхронизированными" файлами: чистить ручками или писать скрипт или ещё что.
    - не забываем проверить базу. там тоже могло остаться много интересного
    - когда всё очищено - делаем бэкап, обновляем всё, снова делаем бэкап.
    Ответ написан
    Комментировать