Задать вопрос
  • Как разрешить CORS запрос для API?

    pro-dev
    @pro-dev Автор вопроса
    SagePtr,
    MacBook-Pro-Maksim:public maksimvorozcov$ curl -I -X OPTIONS 127.0.0.1:8000
    HTTP/1.1 200 OK
    Host: 127.0.0.1:8000
    Date: Fri, 15 Nov 2019 18:27:51 +0000
    Connection: close
    X-Powered-By: PHP/7.1.23
    X-Blablabla: OPTIONS
    Content-type: text/html; charset=UTF-8


    Получается что-то с сервером? Где смотреть? Можете подсказать? Я вообще сервер запускаю от симфони. bin/console serve:run может быть в этом проблема? Что-то я не подумал об это
  • Как разрешить CORS запрос для API?

    pro-dev
    @pro-dev Автор вопроса
    BoShurik, а в какую сторону смотреть хотя бы? Чтобы хоть запрос правильный в гугл вбить
  • Как разрешить CORS запрос для API?

    pro-dev
    @pro-dev Автор вопроса
    BoShurik, вот это не пробовал. А стоит его использовать? Попробую с ним, если больше ничего не остается, но почему вот в index файле не работает без компонентов
  • Как разрешить CORS запрос для API?

    pro-dev
    @pro-dev Автор вопроса
    SagePtr, самое интересное, что ничего не делал там. максимум делаю htaccess. Но там ничего нет....
  • Как разрешить CORS запрос для API?

    pro-dev
    @pro-dev Автор вопроса
    SagePtr, можно. Звёздочка указывает на все. Но и тот вариант пробовал. Похоже дело не в этом. Или я что-то не понимаю)
  • Как разрешить CORS запрос для API?

    pro-dev
    @pro-dev Автор вопроса
    Ярослав Поляков,
    Под каким вебсервером крутится это приложение?

    Apache

    Попробуйте командой вроде:
    curl -I -X OPTIONS https://mail.google.com/mail/
    Только, естественно, с вашим адресом.

    Ответ прошёл вот такой. Хотя заголовки добавил все методы....
    MacBook-Pro-Maksim:project-manager maksimvorozcov$ curl -I -X OPTIONS 127.0.0.1:8000/api/events/1960aaeb-5c81-471a-bd3d-...
    HTTP/1.1 405 Method Not Allowed
    Host: 127.0.0.1:8000
    Date: Fri, 15 Nov 2019 02:01:56 +0000
    Connection: close
    X-Powered-By: PHP/7.1.23
    Access-Control-Allow-Origin: *
    Content-Type: text/html; charset=UTF-8
    Cache-Control: no-cache, private
    Date: Fri, 15 Nov 2019 02:01:56 GMT
    X-Debug-Token: de7df8
    X-Debug-Token-Link: 127.0.0.1:8000/_profiler/de7df8
    X-Robots-Tag: noindex
    Allow: PUT
    X-Previous-Debug-Token: f4b5a4


    P.S.
    CORS не просто так по дефолту запрещен, приложение возможно будет легко взломать через XSS атаку, если вы это разрешите.

    Пока что мне нужно просто дать возможность всем. Это на локальном сервере. Когда буду выкладывать - укажу только свой. Хотя это API...)
  • Vue Как отправить такой запрос на api?

    pro-dev
    @pro-dev Автор вопроса
    WinPooh32,
    По-моему сортировку лучше сделать перед коммитом.

    У меня как раз перед коммитом.

    Вопрос как мне лучше передавать данные из сортировки? Сейчас у меня при обновлении страницы всё хорошо.

    async created() {
          await this.getAll({
            page: this.$route.query.page,
            filter: this.$route.query.q,
            sort: this.$route.query.sort
          })
        },

    Единственное напрягает, что метод created загружает страницу, а потом данные. Немного не красиво смотрится. Я раньше использовал
    async fetch({store, params}) {
          await store.dispatch('events/getAll');
        }
    При таком случае загрузка страницы после загрузки данных.

    Получаю из строки. А вот как при нажатии enter фильтровать по поиску и при переходе на другую страницу обновлять стор используя новый запрос
  • Vue Как отправить такой запрос на api?

    pro-dev
    @pro-dev Автор вопроса
    WinPooh32, точно ведь получилось))))) Это я накосячил.
    Можете подсказать ещё такой момент как лучше делать динамическую фильтрацию и сортировку в vuex?

    Метод получился такой:
    async getAll({commit}, { page, filter, sort}) {
        const res = await this.$axios.$get('events',  {
          params: {
           page: page,
           filter: { filter: filter },
           sort: sort,
          },
          paramsSerializer: function (params) {
            return qs.stringify(params, {arrayFormat: 'brackets', encode: false})
          },
        });
        commit('SET_EVENTS', res.items)


    А вот как лучше обрабатывать это в компоненте что-то опять затормозил
  • Vue Как отправить такой запрос на api?

    pro-dev
    @pro-dev Автор вопроса
    А вы уверены, что encode: false нужен вам на всех запросах?

    Если делаю прямо в store, то ошибка:
    index.js?8535:43 Uncaught (in promise) ReferenceError: qs is not defined

    Я пробовал даже без посредников так:
    const res = await this.$axios.$get('events', {
          params: {
            filter: { filter: 123 },
          }
        });


    Запрос прилетает такой
    http://127.0.0.1:8000/api/events?filter=%7B%22filter%22:123%7D

    А должен быть:
    http://127.0.0.1:8000/api/events?filter[filter]=123
  • Vue Как отправить такой запрос на api?

    pro-dev
    @pro-dev Автор вопроса
    WinPooh32,
    Сам инпут
    <b-input
              type="search"
              v-model="q"
              placeholder="Поиск..."
              @keydown.enter="search"
              autofocus
            />


    Скрипт:
    async created() {
          await this.getAll({
            page: this.$route.query.page,
            filter: this.$route.query.q,
            sort: this.$route.query.sort
          })
        },

    Хранилище:
    async getAll({commit}, { page, filter = null, sort = null}) {
        const res = await this.$axios.$get('events', {
          params: {
            page: page,
            filter: filter,
            sort: sort
          }
        });
        commit('SET_EVENTS', res.items)
      },


    настройки:
    ['@nuxtjs/axios', {
          baseURL: 'http://127.0.0.1:8000/api',
          paramsSerializer: function (params) {
            return Qs.stringify(params, {arrayFormat: 'brackets', encode: false})
          },
        }],


    И что у вас не работает? Такой же результат выдает?
    Не работает именно фильтрация из поля input. Не может распарсить такой запрос. page и sort работает
  • Vue Как отправить такой запрос на api?

    pro-dev
    @pro-dev Автор вопроса
    что-то я поторопился с решением.. Проверил вот это и ничего не дало

    {
     params: {
        filter: {filter: this.filter.q},
     },
     paramsSerializer: function (params) {
         return Qs.stringify(params, {arrayFormat: 'brackets', encode: false})
     },
    }


    точно так?
  • Архитектура приложения на vue?

    pro-dev
    @pro-dev Автор вопроса
    SOLID знаю что такое. Я хорошо знаю как это делается на php, но ту немного не понимаю)
  • Как отрефакторить работу с ошибками?

    pro-dev
    @pro-dev Автор вопроса
    Игорь, теперь понял) Спасибо)
  • Как отрефакторить работу с ошибками?

    pro-dev
    @pro-dev Автор вопроса
    Игорь,
    this.$root.$emit("progress-dialog-show", "Подождите...")


    А как можно понять что тут вызывается?
    Откуда берется $root и $emit?
  • Как отрефакторить работу с ошибками?

    pro-dev
    @pro-dev Автор вопроса
    Игорь, вот это как раз кстати)) Тоже о диалогах думал как выводить их при ошибках)) Пригодится. Но пока вообще сложновато это всё осмысливать) Вроде бы просто, но мозг ломается с непривычки)
  • Как отрефакторить работу с ошибками?

    pro-dev
    @pro-dev Автор вопроса
    Игорь, благодарю вас за помощь) На php освоил чистый код, а вот Vue только начинаю. Ещё мало опыта и есть много вопросов) Так как привык на php следовать SOLID, то и тут это хочется использовать. Но пока не очень есть понимание как это все разносить. Компоненты более понятно было, а вот с обработкой ошибок затормозил. Но помогли) Попробую))

    А по ответу зря) Мне помог ваш комментарий с пониманием. Про примеси тоже почитаю. Я так понимаю примеси это как трейт на php)
  • Как отрефакторить работу с ошибками?

    pro-dev
    @pro-dev Автор вопроса
    Игорь, не плохое решение. А почему в ответы не пишите?)))
  • Как отрефакторить работу с ошибками?

    pro-dev
    @pro-dev Автор вопроса
    Игорь, я сейчас использую формы так:

    <b-form @submit.prevent="create">
    
                <b-form-group label="Название" label-for="createName">
                  <b-form-input
                      id="createName"
                      type="text"
                      v-model="form.name"
                      aria-describedby="createNameError"
                      :state="errors.name ? false : null"
                      required>
                  </b-form-input>
                  <b-form-invalid-feedback id="createNameError">{{ errors.name }}</b-form-invalid-feedback>
                </b-form-group>
    
                <b-form-group label="Дата начала" label-for="createStartDate">
                  <b-form-input
                      id="createStartDate"
                      type="date"
                      v-model="form.startDate"
                      aria-describedby="createStartDateError"
                      :state="errors.startDate ? false : null"
                      required>
                  </b-form-input>
                  <b-form-invalid-feedback id="createStartDateError">{{ errors.startDate  }}</b-form-invalid-feedback>
                </b-form-group>
    
                <b-form-group label="Дата окончаиня" label-for="createEndDate">
                  <b-form-input
                      id="createEndDate"
                      type="date"
                      v-model="form.endDate"
                      aria-describedby="createEndDateError"
                      :state="errors.endDate ? false : null"
                      required>
                  </b-form-input>
                  <b-form-invalid-feedback id="createEndDateError">{{ errors.endDate  }}</b-form-invalid-feedback>
                </b-form-group>
    
                <b-button type="submit" variant="primary">Добавить</b-button>
    
              </b-form>


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

    pro-dev
    @pro-dev Автор вопроса
    Игорь, не плохое решение) Попробую чуть позже на рабочем проекте)) А то я хотел в каждый вид это добавлять)

    Мне нужно глобально, на лету устанавливать заголовки и желательно в одном месте.
    Мне нужно контролировать, что сервер мне возвращает, не зависимо от того на какой странице я выполняю запрос.
    Вот как раз этим же занимаюсь. Авторизацией)

    А как вы рефакторите формы? Создаете свой компонент форм?