• Стили родительской темы накладываются на стили дочерней ,как исправить?

    "Должны быть" - точно. Но так же никогда не бывает, верно?

    Поэтому переверстывать, да. По каждому приколу родительской темы искать в файле и удалять, но это вызовет водопад приколов, поэтому лучше переверстать родительскую тему. Сделать так-же но иначе.

    Я обычно ставлю родительскую тему пустую где вообще стилей нет. Именно по этой причине.
  • Как правильно выстраивать архитектуру метода контроллера на laravel?

    Ну сначала так было, но их много очень, даже моделей много бывает, а этих в 6-7 раз больше. Я их вообще рядом с контроллером кладу, создавая папку под каждый контроллер.
  • Как правильно выстраивать архитектуру метода контроллера на laravel?

    Дмитрий, всё ясно, "он требует уважения". Дальше вы сами по себе. И мои претензии теперь претензии. Уважение не требуют, им награждают. В такой модальности, как вы себя считаете - вы не способны никого наградить, а значит не достойны быть награжденным.
  • Как правильно выстраивать архитектуру метода контроллера на laravel?

    Дмитрий, я тоже так думаю.

    Второе - я стараюсь не мыслить "претензиями", я стараюсь передать свой опыт там, где я обжигался. Переопределение надо делать осторожно. Можно как ты сказал, ведь можно вообще всё. Но если можно БЕЗ - то надо БЕЗ.

    На тему "из eloquent doctrine" я прошу показать как ты решаешь проблему "половина задачи выполнена и save() произошел, а вторая половина сломалась, и надо откатывать назад, откатывать и ID-COUNTER тоже". То есть решение Ларавеля - это использовать beginTransaction() как try/catch, то есть по возможности - везде. Но транзакции нужны не для этого. Их используют, чтобы не допустить изменения части данных, пока идет долгий (почему бы не неделю, пока кнопку на мобиле не нажмет?) или асинхронный запрос. Флужение транзакциями везде в коде создает риски когда одна транзакция залочит другую, и разработчик потом долго будет резолвить дедлоки. Так что транзакция открывается на настолько короткое время насколько возможно, и по середине нужно стараться не выполнять код бизнеслогики который может выполняться а пусть даже и секунду. Бывают ситуации когда это нужно. Но чем их меньше - тем лучше.

    Я решаю используя идею асинхронки. Вместо ->save() я пишу класс Database, который делает ->persistForSave() и в конце скрипта или в середине (если это скрипт здоровенный типа парсера) вызываю ->flush(), в тот момент когда уже точно уверен что вся логика прошла верно.
  • Как правильно выстраивать архитектуру метода контроллера на laravel?

    Дмитрий,

    Ивенты нужно использовать правильно. Как и переопределение тоже нужно использовать с опаской. Правильная реализация SoftDeletes - декорирование, а не переопределение, но Тим не знает, что это (и знать не хочет).

    да, и к трейту SoftDeletes я всегда пишу интерфейс, чтобы репозитории потом знали, умеют они SoftDelete или нет) В ларавеле неплохой синтаксис, но реализацию многих вещей стоило бы переделать. Так например они статическими методами сделали агрегат, а динамическими - сами кхм модели. Потом напутали, потому что в публичных свойствах у них лежит $table, то есть текстовая переменная $table которая касается всего агрегата хранится копией во всех моделях, хотя должна быть статической, а еще лучше - в статическом методе, который потом кешируется в статическую переменную. Мне сложно представить как в одном куске кода я сохраняю Category в одну базу, а вторую - в другую базу. Если здесь речь про ::write/::read то там тоже глобально задается, а не каждая модель отдельно.

    В ларавеле многое перепутано между пабликом и статиком, а кроме того метод ->get() который по документации выглядит вот так
    Category::query()->whereSome($some)->get(); // всегда возвращает \Model[], в этот момент шторм начинает подчеркивать всё волнистыми линиями и надо уже ставить barryvdh laravel-helpers кажется, потому что архитектура поломана, и костылем её закрывать.


    тогда как если бы написать его как агрегат
    Category::get(Category::query()->whereSome($some)); // возвращает static[], а значит для этого класса - \Category[]


    Или вот ещё, когда у них Коллекция по-дефолту иммутабельная. То есть каждое действие map() у них создается новая. KeyBY() опять новая и т.д. Это сделано чтобы меньше плакались на форумах что я не хотел менять а оно поменялось, но содержит под собой необходимость понимания ООП. Куда лучше менять один обьект (экономия памяти и процессора), чем постоянно создавать новый. Но возможность иммутабельности быть должна через какую-то функцию $collection->immutable() которая заставляет потом все методы делать копирование.

    Я как то говорил с Тимом. Он хайпожор и решил не слушать "какого-то чувака из Беларуси". Что и обуславливает то, что ларавель не переписан толком и не поделен до сих пор на пакеты, как симфони, а почти весь монолитен (хорошо хоть БД отрезали и позволили без лары использовать как Capsule).

    Короче переписать надо, но чтобы он это сделал - я должен быть крутым бизнесменом, а значит не быть программистом, а значит не знать - что советовать. Замыкание в жизни. Почти как в коде, да.

    Необходимость ПРОФСОЮЗОВ вытекает к нам из ЭТОГО опыта, а не потому что "все должны быть друзья". Потому чем человек выше забрался тем тяжелее дать ему по шапке, когда он мудак.
  • Как избавиться от try-catch в контроллерах?

    Di Lee, не не, это я сам создаю папку Listeners и туда файл ResponseListener.php где обработка всех респонсов с программы.
  • Как правильно выстраивать архитектуру метода контроллера на laravel?

    vism,

    Спасибо.

    DTO писать не муторно если переобределить горячие клавиши в шторме, чтобы как в Midnight/Total Commander, f5 копировало, f2 - переносило и т.д. тогда чтобы скопировать старый дто и поменять имя - щелкни мышкой на тот что уже есть, нажми F5, впиши новое имя, поменяй поля. Довольно быстро получается.

    Еще у шторма есть привычка не запоминать настройки проекта для остальных. Для этого есть "Settings for new projects" это раз, а чтобы сохранять если винду переставил - "Settings Repository" - делаем репозиторий на гитхабе и туда шторм будет все настройки сохранять, следующий раз подключаемся к репозиторию и все наши бинды и цветовые настройки уже тут.
  • Как правильно выстраивать архитектуру метода контроллера на laravel?

    Дмитрий

    Лень - через события? Ну переопределите у модели метод delete.


    Вот так лучше не надо. Хотя можно да, вообще всё можно.

    Переопределение методов, которые делают кроме основного действия - что-то ещё постепенно приведет к привычке использовать "ивенты", что в будущем грозит необходимостью строить графы "кто что вызвал и чем это кончилось". Проще говоря - тяжело это потом проверять и офигевать "почему что-то еще делается". Ивенты должны работать по принципу "tap" - сделал левое действие ничего не трогая. Переопределение по типу "сделай это и ещё что-то" приводит к изменениям, которых тот кто возьмется за код завтра - не ожидал. "tap" предполагает например запись в лог, или какой-то отчет, который не влияет на само действие.
  • Стили родительской темы накладываются на стили дочерней ,как исправить?

    Если уже по БЭМ то они не могут менять `body`, т.к. бэм ИСКЛЮЧАЕТ написание стилей для дефолтных элементов. Его идея - писать классы по типу

    "группа"
    "группа__элемент"

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

    Если обе темы написаны по БЭМ, то бэм вводит понятие "вариант", который выглядит так

    "группа__элемент_вариант"

    То есть стиль выглядел бы так:

    "reviews__review" (для общих стилей которые НИКОГДА не поменяются - отступы, размер шрифта, всё что двигает верстку вниз или в сторону)
    "reviews__review_theme-1" (для стилей касающихся цветов, закруглений и декораций, которые в этой теме норма)

    и чтобы убрать одну тему и подключить другую надо физически убрать класс с "theme-1" в коде.

    Кроме того БЭМ не запрещает писать типа

    "reviews_theme-1 > rewiews__review"

    Чтобы сразу отключать целый блок конкретной темы.
  • Как избавиться от try-catch в контроллерах?

    Di Lee, да, я обычно пишу в Handler.php (это если Laravel), в ResponseListener.php (если Symfony) или index.php (если самопал) в блоке `catch` функцию, которая берет текущий роут, смотрит в какой он "папке" и по ней решает - Json выдавать, xml и так далее пишу типа

    $mapResponse = [
      'api/v1/json' => JsonResponse::class,
      'api/v1/xml' => XmlResponse::class,
    ];
    
    $responseClass = null;
    foreach ($mapResponseClass as $routeBeginsWith => $class) {
      if (0 === strpos($currentRoute->pattern, $routeBeginsWith)) {
        $responseClass = $class;
        break;
      }
    }
    
    $response = new $responseClass; // и он выпадет здесь в ошибку если я забыл что-то указать и просто указываю ещё что-то в мапе.
  • Как правильно выстраивать архитектуру метода контроллера на laravel?

    public function destroy(Request $request, $id) // или MyDestroyRequest если юзер что-то еще передает
        {
            $request->validate(); // оно под капотом ещё и авторизацию проверит и 422 само выбросит
    
            // ... верно тут можно проверять политику, но в принципе если реквест наследовать то в ларе помоему их можно и в реквест код перенести и первый метод еще и это сделает
          
            $dto = new MyDestroyDto($request->valid()); // там внутри пишем что куда, хотя можно и здесь
    
            $myDomainService = new MyDomainService(); // или new MyCoreService();
            $status = $myDomainService->doSomething($dto); // или $result = $myCoreService->convert($dto->money);
    
            if ($status === 'ok') return $this->jsonDone('@api.msg.ok_message', 200); // вот метод jsonDone в базовом (абстрактном*) контроллере или, например, в трейте, напиши
            return $this->jsonFail('@api.err.error_message', 500); // собаки в тексте для наглядности, трехуровневый ключ перевода из файла lang, по собаке просто можно определить текст уже проходил через переводчик или нет
        }
  • Как в php обфусцировать js код?

    Я сейчас как раз сайт паршу вордпрессный. Открываешь любую страницу, забираешь регуляркой ajax_nonce(), парсишь апи. Не защитишься особо.

    Все фронт операции стучаться на бек чтоб получать новые данные, которые обычно в json-е и идут. Кто-то выбрасывает из апи хтмл кусками, но и его можно спарсить. Если прям защиту то да - надо найти либу типа той что есть в фалконе, которая любую строку ключем кодирует в base64binary и даже если её расшифровать без ключа - будет бяка. Опять же либу придется изучать, а криптолибы они зарраза гениями написаны, там сдвиги побитовые, сильный левелап поймаешь если разберешься, но убьешь пару недель. И тебе придется взять эту либу для пыхи, скопировать её код, написать её же вручную для яваскрипта, чтобы js мог обратно декодить, и спрятать либу поглубже в яваскрипт.

    Потом с помощью такого вот nonce делается запрос на апи "дай ключ". Ключ приходит. А чтобы понять что с ним дальше делать нужно читать весь код твоего яваскрипта, потому что какая-то функция в 1337 файле, который еще и вебпаком собран и фиг знает где лежит и минифицирован, используя этот ключ, внутри дешифрует тот пипец который пришел из апи в виде base64 и сует его в переменные, которые на рантайме хоть и видны, но поймать сложно. Опять же эта функция вполне может быть приватной, то есть вебпак её замкнет в обьект так что вызвать её только изнутри обьекта можно будет.

    В итоге он даже если сможет отобразить на рантайме js переменную со значениями делать это автоматом сильно устанет. Придется подрубать безголовый браузер и может быть даже для него докер настраивать на сервере, такое единицы могут, кто не занимается таким, потому что СТОЛЬКО не заплатят.

    А ещё есть nodejs и пакет кажется cherrio. Который нормально хавает с сервака не только верстку, но и условные эффекты, то есть яваскрипт. То есть ты задолбаешься чтобы с апи шифровать, а эта свинота безголовым браузером или такой либой просто спарсит "что вижу то паршу" и всё.

    Гемор, нафиг.
  • Как использовать vue с php?

    Должен, но кажется там есть приколы, помню долбался с этим. То ли в джсоне было поле где было еще один джсон какой-то кодер написал и при попытке JSON.parse все ломалось, то ли что-то такое. Я не помню.
  • Связка laravel + bootstrap + vue пойдёт для web 2.0 стартапа?

    Константин Б., понял, значит так бывает просто я не застал. Работал в 6-8 конторах за свою карьеру и еще примерно на десятка три частных заказчиков. У всех был трындец ))
  • Как исправить ошибку csrf Symfony при выходе из аккаунта?

    Когда-то я тоже задавал такие вопросы. Оглядываясь назад я не хочу его обвинять, я хочу протянуть ему руку.
  • Как можно в PHP-скрипте получить на 100% достоверную информацию об IP веб-клиента?

    Задача разрешить доступ с айпи решается гуглением как в пыхе получить ип юзера. А задача запретить доступ конкретным васям решается отсылкой в фоне фигерпринта и хранением его на серваке, задача найти юзера по ип решается провайдером и органами порядка не стопроцентно, или хитростью по типу чтобы запустить программу нужно запустить античит который выдаст вам код а под шумок скажет тебе кому код выдан, т.к. выдавался он на клиенте.
  • Как в php обфусцировать js код?

    Возможно ты ищешь не шифрование а минификацию и тут вебпак в помощь, пакет симфони/енкоре и тд. Но тут много вещей надоивыучить и сломать голову чтобы знать как это запилить. Попробуй, шифрование еще сложнее хотя знать требуется меньше
  • Как исправить ошибку csrf Symfony при выходе из аккаунта?

    Не, в симфони используют ее собственный сессионбаг, в доке есть, его подкидывают на вход класса в конструктор, а свою сессию не используют. Ну вот такая вот она.

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