• Как ограничить добавление в базу Mysql уже имеющегося элемента?

    IgorPI
    @IgorPI
    Коллега, для того что бы быть уверенным на 100%, что бы данные в таблице были разные.
    Можно следующее:
    Использовать unique key (Уникальный ключ) для одного или групп полей
    Ответ написан
  • Как избежать дублирования кода для горизонтально масштабируемого веб-приложения?

    IgorPI
    @IgorPI
    Свои пять копеек.
    Конкретно из текущей ситуации в реальном проекте, на данный момент, его значимость не особо высока, но уже за это получаю деньги.

    Так сказать инвестиция в развитие.

    На протяжении года занимаюсь проектированием собственного фреймворка, есть некие достижения.
    Сразу оговорюсь, я тоже использую сторонний код.
    В частности я использую Doctrine ORM и ряд других компонентов от Symfony и других.
    Например роутинг свой, загрузка сервисов своя...

    Очень много сил потратил, а заказчик средств.
    Фреймворк уже готов.

    При разработке столкнулся с рядом проблем, как раз с дублированием кода.
    Да, эта проблема частично решена.

    Например:

    Сущности, и репозитории сущностей - это общий код для всех окружений.
    Окружений может быть сколько угодно.

    На данный момент использую два окружения
    Admin
    Api

    admin.mysite.com
    api.mysite.com
    mysite.com - например фронт вообще на NUXT

    У окружений есть общий конфиг
    Общие языковые пакеты с ленивой загрузкой

    Вот так выглядят контроллеры в своих окружениях
    5d6ae80b31c6d516616002.png

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

    Точек входа всегда ровно количеству окружений, но загрузчик приложения один
    5d6aeab1c0789688262811.png
    Код файла запуска приложения
    <?php
    
    define('ENV', basename(__DIR__));
    require '../../engine/bootstrap.php';


    В контроллере у каждого окружения могут быть дублирующие методы

    Для себя выделил неформальное определение

    Функции, модули которые решают одну и туже задачу для всех окружений, выношу в отдельную папку
    Визуально это выглядит так

    5d6aed5540883788430736.png
    Ответ написан
    1 комментарий
  • Как сделать чтобы число помеченное специальным тегом перемножалось на другое число введенное на странице/в базе данных?

    IgorPI
    @IgorPI
    Вариант №1
    =========product============
    _________________________________
    id__|___name____price____tag____|
    1___|___Рис____|__54___|__tag-1__|
    2___|___Греча__|__62___|__tag-2__|

    select * from product where tag = tag-1

    Важный момент, если поле "tag" unique то вы всегда получите только одну запись или нечего.
    Далее...
    Получили данные.
    Перемножили
    и
    update product set price = 80 where tag = 'tag-1'

    Вариант №2

    update product set price = price * 2 where tag = 'tag-1'
    Ответ написан
    Комментировать
  • Как запустить приложение 64 битное на 32-разрядной системе?

    IgorPI
    @IgorPI
    Не совсем понятен посыл.
    Как запустить или что делать с кодом.

    Берем Delphi xe
    Одинаково пишем и для 32 и для 64

    Для windows это очень мощьное решение.

    Особых различий нет.
    Ну кроме типов
    Integer
    Int64
    Ответ написан
    Комментировать
  • Как создать ассоциативный массив без нумерации?

    IgorPI
    @IgorPI
    Пример на Json'e, То что получается


    Удивительно, каким это образом получается невалидный JSON

    Это не правильный JSON
    {"0": {"STEAM_0:1:421410864": 2}, {"STEAM_0:1:27660088": 1}}


    Вот это правильный JSON
    {
      "0": [
        {
          "STEAM_0:1:421410864": 2
        },
        {
          "STEAM_0:1:27660088": 1
        }
      ]
    }


    Создавайте массив объектов, так как свойства у вас динамические.
    Что если вам нужно будет добавить ещё какое-нибудь свойство?
    Вот что вам нужно, с точки зрения правильной логики
    [
      {
        "STEAM_0:1:421410864": 1
      },
      {
        "STEAM_0:0:109168821": 0
      },
      {
        "STEAM_0:0:138268647": 2
      }
    ]


    На случай расширения
    [
      {
        "STEAM_0:1:421410864": 1,
        "balance": "500"
      },
      {
        "STEAM_0:0:109168821": 0,
        "balance": "129"
      },
      {
        "STEAM_0:0:138268647": 2,
        "balance": "100"
      }
    ]


    Да, свойства тоже можно перебрать в цикле, но вы лишаете себя использовать функции для работы с массивами.
    Ответ написан
    Комментировать
  • Как обратиться к членам класса через конструктор (new Class()->method())?

    IgorPI
    @IgorPI
    Согласно ТС.
    Class User {
    public function __construct(){
    return $this;
    }
    
    public function myMethod (){
    
    return $this;
    
    }
    }


    По существу.
    Есть Паттерн singleton.
    Только там нужно создать статический метод и приватноне статическое свойство.

    Метод должен при необходимости создавать объект в приватное свойство и возвращать его.

    Так же объявить приватный конструктор.
    Ответ написан
  • Что означает стрелочная функция обернутая в круглые скобки? var x = ( () => this )?

    IgorPI
    @IgorPI
    Ну, во-первых, разница как раз большая.

    1. Стрелочные функции всегда анонимные
    2. Они не имеют собственного контекста
    3. Стрелочные функции не могут быть использованы как конструктор
    4. Ключевое слово yield не может быть использовано в теле стрелочной функции
    5. Стрелочная функция не может содержать разрывы строк между параметрами и стрелкой.
    ...

    Используя стрелочные функции, запись становится короче, но некоторые операции вы обязаны выполнять в классическом слитье, все из-за того же контекста
    Ответ написан
    Комментировать
  • Организовать структуру хранения контроллеров?

    IgorPI
    @IgorPI
    Храните контроллеры как вам удобно.
    Умеренная декомпозиция, контроллерам не навредит.

    Конечно, если в контроллере чёрт ногу сломит, то лучше разбить на части.
    Ещё один момент.
    Зачем инициализировать дополнительные строки кода которые не будут использоваться в данный момент. Это очен важно!

    Сами понимаете, если кода меньше то и интерпретатору будет легче работать.

    Это как если бы вы взяли 5 мешков цемента по 20 кг, когда вам нужен один, но в будущем понадобятся и другие.
    Потом можно сходить за цементом. Пока берём один мешок.

    Merci
    Ответ написан
    Комментировать
  • Существует ли простое решение такой задачи?

    IgorPI
    @IgorPI
    В общем всё понятно.
    Все манипуляции делайте в реляционной базе данных.
    Если вам нужно что-то посчитать, сравнить, хранить.

    В конце концов, вам же нужно хранить эти данные.
    И по-хорошему из можно вообще не доставать из базы.
    Ответ написан
  • Как расшифровать эту строку в коде?

    IgorPI
    @IgorPI
    document - текущий документ
    getElementById() - метод получения элемента используя id
    onchange  - свойство элемента для обработчика события
    function (event){} - анонимная функция (обработчик события)
    
    event - локальная переменная в контексте анонимной функции
    target - таргет он и в африке таргет (целевой элемент, где происходит туса)
    parentNode - родительская нода
    childNodes[1] - у родителя есть дети
    data - у детей есть данные
    slice(1) - отхренашить кусочек
     
    currentKey - отхренашеный кусочек
    Ответ написан
    Комментировать
  • Импорт и последующий вызов анонимной функции?

    IgorPI
    @IgorPI Автор вопроса
    Решение!

    Выполняю динамический импорт анонимных функций из @/middleware/
    middleware.forEach(async (e, i, a) => {
        import(`@/middleware/${e}.js`)
            .then((obj) => {
              obj.default(context)
            })
      })
    Ответ написан
    Комментировать
  • Как понять структуру классов (объектов) в CMS?

    IgorPI
    @IgorPI
    Открываем проект в phpstorm.
    В некоторых случаях получится построить диаграмму связей классов.
    Устанавливаем расширение xdebug для php.
    Настраиваем отладку в phpstorm.
    Например кликаем на кнопку "Добавить в корзину"
    И понеслась...
    Ответ написан
    Комментировать
  • Как не возвращать данные из конструктора если их нет?

    IgorPI
    @IgorPI
    class Article {
      constructor(data) {
        for (let key in data) {
          this[key] = data[key]
        }
      }
    }
    
    const authorOne = new Article({
      author: 'Vasya'
      
    });
    
    console.log(authorOne)
    Ответ написан
    Комментировать
  • Как решить неудачную поставку null в innerHTML?

    IgorPI
    @IgorPI
    Нужно так:
    window.onload = function() {
       // браузер загрузил HTML и внешние ресурсы (картинки, стили и т.д.).
    };
    Ответ написан
    1 комментарий
  • Ленивая загрузка в Nuxt?

    IgorPI
    @IgorPI Автор вопроса
    Внимание!

    Правильное решение!

    import Vue from 'vue'
    import Router from 'vue-router'
    import paths from './routes/paths'
    
    Vue.use(Router)
    
    function route (path, view, name, meta) {
      return {
        name: name || view,
        path,
        meta,
        component: () => import(`~/pages/${view}.vue`).then(m => m.default || m) // здесь гребаный компонент
      }
    }
    
    export function createRouter() {
      return new Router({
        mode: 'history',
        routes: paths.map(path => route(path.path, path.view, path.name, path.meta)).concat([{ path: "*", redirect: "/" }])
      })
    }
    Ответ написан
    Комментировать
  • Как отправить форму через ajax и правильно ёё принять?

    IgorPI
    @IgorPI
    var settings = {
      "async": true,
      "crossDomain": true,
      "url": "http://api.srm.local/product.add",
      "method": "POST",
      "headers": {
        "Content-Type": "application/x-www-form-urlencoded",
        "cache-control": "no-cache"
      },
      "data": {
        "product_type": "1",
        "name": "Название моего замечательного продукта",
        "unique_code": "DR132",
        "product_pricing": "{\"type\":\"fixed\",\"price\":\"100.00\"}",
        "advertised_price": "100",
        "count_min": "1",
        "count_max": "1",
        "short_description": "Краткое описание",
        "long_description": "Длинное описание",
        "extras": "19,20,21",
        "quantity_label": "{\"singular\":\"Пассажир\",\"plural\":\"Пассажиры\"}",
        "images": [
          "1,3",
          "1,2,3"
        ],
        "terms_use": [
          "Какие-то условия...",
          "Мои особые условия"
        ],
        "options": "{}"
      }
    }
    
    $.ajax(settings).done(function (response) {
      console.log(response);
    });
    Ответ написан
    Комментировать
  • Куда система затрачивает половину ресурсов?

    IgorPI
    @IgorPI
    Windows не когда не спешит освобождать память, когда потребуется она попытаемся её освободить.

    По сути, часть памяти свободно, не хочет тратить ресурсы на освобождение, да и возможно эти данные в будущем понадобятся.

    SysMain как раз занимается анализом.
    Как часто вы используете ту или иную программу и по возможности заранее загружает нужные данные.

    Я пробовал выключать SysMain, нагрузка на диск возрасла при запуске программ.
    Ответ написан
    Комментировать
  • Как безопасно сделать авторизацию?

    IgorPI
    @IgorPI
    JWT
    Ответ написан
    Комментировать
  • Как вывести данные из базы в формате JSON (с помощью php)?

    IgorPI
    @IgorPI
    Хотите сложную структуру в виде иерархии, используйте ORM.

    Мне кажется, так даже быстрее и качественней.
    Ответ написан
  • Библиотека-генератор php классов (файлов)?

    IgorPI
    @IgorPI Автор вопроса
    Всё проще, чем я ожидал.

    На примере "Laravel"

    Файл app/Console/Commands/stubs/controller.stub

    <?php
    
    namespace DummyNamespace;
    
    use App\Http\Controllers\Controller;
    use Illuminate\Http\Request;
    
    class DummyClass extends Controller
    {
    	public $user;
    
    	/**
    	 * DummyClass constructor.
    	 */
    	public function __construct()
    	{
    		$this->middleware(['auth:api', 'role:admin|organizer|prof_organizer'])->only(['store', 'update', 'destroy']);
    
    		$this->user = \Auth::guard('api')->user();
    	}
    
    	/**
    	 * Display a listing of the resource.
    	 *
    	 * @return \Illuminate\Http\Response
    	 */
    	public function index()
    	{
    		//
    	}
    	
    	/**
    	 * Store a newly created resource in storage.
    	 *
    	 * @param  \Illuminate\Http\Request  $request
    	 * @return \Illuminate\Http\Response
    	 */
    	public function store(Request $request)
    	{
    		//
    	}
    
    	/**
    	 * Display the specified resource.
    	 *
    	 * @param  int  $id
    	 * @return \Illuminate\Http\Response
    	 */
    	public function show($id)
    	{
    		//
    	}
    	
    	/**
    	 * Update the specified resource in storage.
    	 *
    	 * @param  \Illuminate\Http\Request  $request
    	 * @param  int  $id
    	 * @return \Illuminate\Http\Response
    	 */
    	public function update(Request $request, $id)
    	{
    		//
    	}
    
    	/**
    	 * Remove the specified resource from storage.
    	 *
    	 * @param  int  $id
    	 * @return \Illuminate\Http\Response
    	 */
    	public function destroy($id)
    	{
    		//
    	}
    }


    Класс генератор
    <?php
    
    namespace App\Console\Commands;
    
    use Illuminate\Console\GeneratorCommand;
    use Symfony\Component\Console\Input\InputOption;
    
    class MakeController extends GeneratorCommand
    {
    	/**
    	 * The console command name.
    	 *
    	 * @var string
    	 */
    	protected $name = 'make:controller';
    
    	/**
    	 * The console command description.
    	 *
    	 * @var string
    	 */
    	protected $description = 'Create a new Controller resource class';
    
    	/**
    	 * The type of class being generated.
    	 *
    	 * @var string
    	 */
    	protected $type = 'Controller';
    	
    	/**
    	 * Get the stub file for the generator.
    	 *
    	 * @return string
    	 */
    	protected function getStub()
    	{
    		return __DIR__.'/stubs/controller.stub';
    	}
    
    	/**
    	 * Get the default namespace for the class.
    	 *
    	 * @param  string  $rootNamespace
    	 * @return string
    	 */
    	protected function getDefaultNamespace($rootNamespace)
    	{
    		return $rootNamespace."\\Http\\Controllers\\Api";
    	}
    }
    Ответ написан
    3 комментария