• Как организовать страницу пользователя?

    IgorPI
    @IgorPI
    Проведите аналогию например с vk.com.
    Во Вконтакте есть API.

    Что бы получить данные своего профиля, мы передаём токен.

    Например:
    У вас есть метод https://api.site.com/account.getProfileInfo?token=...
    Выполнив get запрос, вы получите нечто похожее.
    {
    "response": {
    "first_name": "Кристина",
    "last_name": "Шипилова",
    "bdate": "20.3.1991",
    "bdate_visibility": 2,
    "city": {
    "id": 21940,
    "title": "Верхний Мамон"
    },
    "country": {
    "id": 1,
    "title": "Россия"
    },
    "home_town": "Воронеж В- Мамон",
    "maiden_name": "",
    "phone": "+7 *** *** ** 79",
    "relation": 1,
    "sex": 1,
    "status": "ОБОЖАЮ СИРЕНЬ😎"
    }
    }


    Далее, рассовываете в нужные теги.

    Опять же, если речь идёт о конкретных действиях.
    Пример из моего проекта, только тяну не профиль, а категории.
    async asyncData({$axios}) {
          let category_items = []
          let promise_category = $axios.$get(`${process.env.api}/categories.get`,
              {
                params: {
                  lvl: 0,
                  count: 25,
                  offset: 0
                }
              })
              .then(({code, count, items}) => {
                if (code === 0) {
                  items.forEach((e) => {
                    category_items.push({
                      id: e.id,
                      name: e.name,
                      children: [],
                      deleted_loading: false,
                      lvl: e.lvl,
                      selected: false,
                    })
                  })
                }
              })
    
          await Promise.all([promise_category])
          return {
            category_items
          }
        },


    Нужен ли Vuex?
    Вам решать.
    Ответ написан
    1 комментарий
  • Как решить эту проблему?

    IgorPI
    @IgorPI
    Чтобы в родителе ловить эвенты, достаточно

    child
    <template>
      <div @click="$emit('click')"></div>
    </template>
    
    parent
    <template>
      <div class="warp">
        <item @click="" />
        <item @click="" />
        <item @click="" />
      </div>
    </template>
    Ответ написан
    Комментировать
  • Nested удаление дерева, как пересчитывать lft, rgt?

    IgorPI
    @IgorPI Автор вопроса
    Решение.
    В первом приближении, пересчитываю следующим образом.

    class ServiceRepository extends NestedTreeRepository
    {
    ...
    /**
         * @param Service $node
         * @return void
         * @throws ORMException
         * @throws OptimisticLockException
         */
        public function removeTree(Service $node)
        {
            $this->createQueryBuilder("s")
                ->delete()
                ->where("s.lft >= :lft")->setParameter("lft", $node->getLft())
                ->andWhere("s.rgt <= :rgt")->setParameter("rgt", $node->getRgt())
                ->andWhere("s.root = :root")->setParameter("root", $node->getRoot())
                ->getQuery()
                ->execute();
    
            $em = $this->getEntityManager();
            $em->beginTransaction();
            $repository = $em->getRepository("App:Service");
            $refreshLeftAndRight = function($root, $left) use ($repository, &$refreshLeftAndRight) {
                $right = $left + 1;
                $children = $repository->findBy(['parent' => $root,]);
    
                foreach ($children as $entity) {
                    $right = $refreshLeftAndRight($entity, $right);
                }
                $root->setlft($left);
                $root->setRgt($right);
                return $right + 1;
            };
    
            foreach ($repository->findBy(["parent" => null]) as $rootEntry) {
                $refreshLeftAndRight($rootEntry, 1);
            }
    
            $em->flush();
            $em->commit();
        }
    
    ...


    Кто в теме тот поймет что здесь, происходит.
    Конечно не идеально.
    В будущем стоит пересчитывать только те корневые ветки, в которых произошло удаление.
    В этом случае мы пересчитываем всё.
    Ответ написан
    Комментировать
  • Не получается сделать инъекцию через метод в Symfony 3.2, как правильно?

    IgorPI
    @IgorPI
    # JsonRequest
        App\Service\JsonRequest:
            calls:
                - [setRequest, ['@request_stack']]


    <?php
    
    
    namespace App\Service;
    
    
    use Exception;
    use Symfony\Component\HttpFoundation\RequestStack;
    
    /**
     * Class JsonRequest
     * @package App\Service
     */
    class JsonRequest
    {
    
        private $json_object;
    
        public function __construct()
        {
        }
    
        /**
         * @param string $key
         * @param bool $default
         * @return mixed
         */
        public function get(string $key, $default = null)
        {
            try {
                $properties = explode(".", $key);
                $buf = $this->json_object;
                foreach ($properties as $property) {
                    if (property_exists($buf, $property)) {
                        $buf = $buf->{$property};
                    } else {
                        return $default;
                    }
                }
                return $buf;
            } catch (Exception $e) {
                return $default;
            }
        }
    
        /**
         * @param string $key
         * @return bool
         */
        public function has(string $key)
        {
            return property_exists($this->json_object, $key);
        }
    
    
        /**
         * @param RequestStack $request
         */
        public function setRequest(RequestStack $request): void
        {
            $this->json_object = json_decode($request->getCurrentRequest()->getContent());
        }
    }
    Ответ написан
    Комментировать
  • Оцените сайт. Что добавить, что улучшить?

    IgorPI
    @IgorPI
    Девочки красивые!
    5+
    Ответ написан
    Комментировать
  • Во VueJs при изменении переменной не срабатывает v-if, почему?

    IgorPI
    @IgorPI
    Вот здесь что вы пытаетесь сделать?
    watch: {
        search: function(filteredPolis, tipStrah) {
          this.filteredPolis.forEach(polis => {
          if (polis.tip.indexOf('dmc')) {tipStrah = true}
          else if (polis.tip.indexOf('omc'))  {tipStrah = false}
          return tipStrah
          })
          console.log(tipStrah)
          return tipStrah
        }


    Вы же установили наблюдателя за search и любые изменения переменной search будут вызывать

    search(val) {
         val // это значение переменой search в data
          })
    Ответ написан
  • Как оптимально спроектировать таблицы в бд?

    IgorPI
    @IgorPI
    Ответ написан
    Комментировать
  • Как решить проблему с mysql 5.7 "TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option"?

    IgorPI
    @IgorPI
    my.cnf
    [mysqld]
    explicit_defaults_for_timestamp = 1


    Пожалуйста, синхронизируете "книжный том", я вас умоляю.
    ./docker/my.cnf:/etc/mysql/my.cnf
    Ответ написан
  • Как найти место в коде где был определён данный стиль?

    IgorPI
    @IgorPI
    css important
    Ответ написан
    Комментировать
  • Как проверить наличие фразы в начале текста php?

    IgorPI
    @IgorPI
    Решение

    $re = '/id(\d+)/';
    $str = 'id123';
    
    preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
    
    // Print the entire match result
    var_dump($matches);
    Ответ написан
  • Как сделать ширину v-select равной ширине контента во vuetify?

    IgorPI
    @IgorPI
    Как мне нужно изменить код, чтобы v-select занимал не всю ширину контейнера, в котором он находиться, а столько, сколько ему необходимо для отображения своих чисел и чтобы он был выровнен по правому краю.


    Да там же в примерах есть как это делается
    Ответ написан
    Комментировать
  • Как полностью обнулять хранилище при логауте?

    IgorPI
    @IgorPI
    Хранилище vuex не имеет ни какого отношения к localStorage.
    Как коллеги озвучили выше, обновите страницу.

    В некоторых случаях люди ищут способ как сохранить эти самые данные,
    у вас прямо пропорциональная проблема ))
    Ответ написан
    Комментировать
  • Как забирать данные с API в цикле?

    IgorPI
    @IgorPI
    await

    Ключевое слово await заставит интерпретатор JavaScript ждать до тех пор, пока промис справа от await не выполнится. После чего оно вернёт его результат, и выполнение кода продолжится.
    Ответ написан
  • Nuxt.js - Как перенаправить с localhost на домен сайта?

    IgorPI
    @IgorPI
    Как минимум выкинуть Apache.

    Использовать Nginx в режиме прокси.

    Пример базовой конфигурации nginx
    server {
        listen      			<ip>:<port>;
        server_name 			<ваш домен>;
    
        location / {
    	proxy_pass  		http://127.0.0.1:3000;	
    	#proxy_read_timeout	2s
            proxy_set_header	Host $host;
            proxy_set_header	X-Real-IP $remote_addr;
            proxy_set_header	X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header	X-Forwarded-Host $server_name;
        }
    }
    Ответ написан
    Комментировать
  • Как правильно провести модернизацию ноутбука HP?

    IgorPI
    @IgorPI
    Все что вы перечислили, всё можно.
    Судя по тому, какие термины вы используете.
    Возникает вопрос, зачем вы задали этот вопрос?

    Я думаю, что прокачивать ноут в этой ценовой категории не стоит.

    Единственным и существенным приростом, это заменить HDD на SSD.
    Вы сами об этом пишите.

    Ну вкините вы в 2 слота по 8 GB

    Это моё субъективное мнение.
    Ответ написан
  • Почему if не срабатывает?

    IgorPI
    @IgorPI
    == это оператор сравнения, который сравнивает значение переменных
    === это оператор сравнения, который сравнивает значение переменных и тип данных
    Ответ написан
    Комментировать
  • Что такое модель в ООП в веб?

    IgorPI
    @IgorPI
    Как то всё запутанно у вас, перемешались кони и люди.

    Вот что мне известно.

    Вы в вопросе пишете

    Дальше, получив данные из БД модель выполняет внутренний метод $this->createObject(), который создает из полученных данных из БД объект UserEntity и вставляет в него те поля, которые у нее есть (все остальные указаны по умолчанию в объекте UserEntity). Ну вот собственно и вся ее работа. НО во многих комментариях я вижу сообщения по типу: "модель не должна лезть в БД". Но тогда кто в нее должен лезть?


    Вы ни разу не упомянули про репозиторий, его так не хватает в вашем монологе.

    Терминология.

    Модель - это некоторый объект, имеющий поля, геттеры и сеттеры - то, это место куда мы помещаем данные и только их.

    Сущность - Entity и имеет особые отношения с вашей базой данных - обычно каждый экземпляр сущности соответствует отдельной строке. В doctrine orm модель может быть описана в аннотации.

    Репозиторий - класс, соответствующий классу Entity и содержащий методы типа getById, getMyHome, ...

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

    То репозиторий над моделью и сущностью, да простит меня всевышний.

    Именно в репозитории вы описываете, то как вы будите тянуть ваши данные из базы и в итоге вы получите данные которые будут в расположены в модели.

    Вот некоторые примеры:

    Метод в репозитории
    /**
         * @param int $id
         * @return mixed
         * @throws NonUniqueResultException
         * @throws NoResultException
         */
        public function getById(int $id) {
            return  $this->createQueryBuilder("org")
                ->leftJoin("org.category", "cat")
                ->leftJoin("org.region", "region")->addSelect("region")
                ->leftJoin("org.country", "country")->addSelect("country")
                ->leftJoin("org.city", "city")->addSelect("city")
                ->leftJoin("org.street", "street")->addSelect("street")
                ->leftJoin("org.gps", "gps")->addSelect("gps")
                ->leftJoin("org.services", "services")->addSelect("services")
                ->leftJoin("services.group", "grp")->addSelect("grp")
                ->leftJoin("org.images", "images", "", "")->addSelect("images")
                ->leftJoin("org.reviews", "reviews", Join::WITH, "reviews.status = 1")->addSelect("reviews")
                ->where("org = :id")->setParameter("id", $id)
                ->getQuery()
                ->getSingleResult();
        }


    Из примера выше, мы может определить, какие модели буду заполнены.

    А вот пример, то как я тяну данные в контроллере, используя репозиторий

    /**
         * @Rest\Route(
         *     path="/organization.getById",
         *     name="organization_get_by_id",
         *     requirements={ "id"="\d+" }
         * )
         *
         * @param Request $request
         * @return object|JsonResponse
         * @throws ExceptionInterface
         * @throws NonUniqueResultException
         * @throws NoResultException
         */
        public function getById(Request $request)
        {
            $organization_repository = $this->getDoctrine()->getManager()->getRepository("App:Organization");
    
            $rs = new ResponseSchemaData();
            $rs->setData($organization_repository->getById($request->get("id")));
    
            $serializer = $this->get('serializer');
            $response_object = $serializer->normalize($rs, "json", ["attributes" => [
                "code",
                "data" => [
                    "id",
                    "name",
                    "images",
                    "description",
                    "postCode",
                    "phone",
                    "email",
                    "home",
                    "site",
                    "schedule",
                    "images",
                    "rating",
                    "gps" => [
                        "latitude",
                        "longitude",
                    ],
                    "category" => [
                        "id",
                        "name",
                    ],
                    "reviews" => [
                        "id",
                        "author",
                        "text",
                        "likes",
                        "dislike",
                        "rating",
                        "createAt",
                    ],
                    "services" => [
                        "id",
                        "name",
                        "types" => [
                            "id",
                            "name"
                        ]
                    ],
                    "country" => [
                        "id",
                        "name"
                    ],
                    "region" => [
                        "id",
                        "name"
                    ],
                    "city" => [
                        "id",
                        "name"
                    ],
                    "street" => [
                        "id",
                        "name",
                        "streetType"
                    ],
                ]
            ]]);
    
            return new JsonResponse($response_object);
        }


    В итоге, если я сериальную объект в json, то у меня получится нечто
    {
        "data": {
            "name": "Здравстолет",
            "home": "51",
            "phone": "8 (800) 350-29-32",
            "site": "https://zdravstolet.ru/",
            "schedule": "пн–пт 08:00–17:00",
            "id": "641659",
            "category": [],
            "city": {
                "id": 3170,
                "name": "Бийск"
            },
            "street": {
                "name": "Петра Мерлина",
                "id": 19583,
                "street_type": "улица"
            },
            "country": {
                "name": "Россия",
                "id": 3159
            },
            "reviews": [
                {
                    "author": "пиаипиапи",
                    "text": "иапипиаиапипаипаиапи",
                    "likes": 0,
                    "dislike": 0,
                    "id": "41",
                    "rating": 0,
                    "create_at": "2019-09-22T20:03:42+00:00"
                }
            ],
            "description": null,
            "email": null,
            "rating": "3.7",
            "services": [],
            "images": [],
            "post_code": 659303,
            "region": null,
            "gps": {
                "latitude": 52.529974,
                "longitude": 85.173845
            }
        },
        "code": 0
    }


    Каждый объект в JSON это 1 таблица в базе данных.
    Или скажем так:

    1 объект = 1 таблица = 1 модель
    Сущность = таблица

    Да простит меня господь за грехи мои.
    ORM
    Ответ написан
    2 комментария
  • Где хранить access token для API?

    IgorPI
    @IgorPI
    localStorage
    Cookie
    Ответ написан
    Комментировать