Здесь мы изучаем язык PHP (а также JS/CSS/HTML/SQL) и учимся делать сайты. Зачем? Кто-то хочет открыть стартап, кто-то заработать на лапшу быстрого приготовления, кому-то просто нечего делать.
ОП довольно занят, но постарается ответить на все вопросы. Также, ответы и решения задач можно поискать в архиве тредов phpclub.
Это тред и для начинающих. Слово "классы" у тебя ассоциируется только со школой, а в аттестате тройка по математике? Ты наш человек.
Предыдущий тред был тут: >>1849078 (OP) . Все старые треды есть в архиве: https://phpclub.tech/ (там есть поиск, можно искать решения и обсуждения задач).
С чего начать
Наши уроки по PHP собраны по адресу http://codedokode.github.io/phpbook (вас отредиректит на другой домен, не запоминайте его, он временный). Это учебник для изучающих с нуля. Там есть задачи, их нужно решать. Но если этот учебник тебе не нравится, можно читать любой другой. Или официальный мануал. Или все сразу.
Если не знаешь как решать, запости код и попроси подсказку или поищи задачу в архиве тредов.
Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL, PDO, работа с таблицами в БД, работа с формами, MVC, git, composer, JS, фреймворки, автоматизированное тестирование. У нас есть задачи для изучения этого:
Параллельно стоит подучивать английский, на первых порах можно без него, но по мере развития придется все чаще сталкиваться с англоязычными статьями, так что лучше не откладывать. Читать можно news.ycombinator.com - это что-то вроде их хабра.
Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.
Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492
У ОПа нет аккаунтов и групп вконтакте, в фейсбуке, в твиттере, все "пхп-треды" там поддельные.
Платиновые вопросы
- Почему PHP? Потому что вакансий море, и учить легко. - Сайт опять упал!!!!! — Не паникуй, а зайди на https://github.com/codedokode/phpbook, нажми зеленую кнопку Clone or Download -> Download ZIP, распакуй на рабочий стол и получи личную копию сайта, не требующую интернетов. - Что надо знать чтобы найти работу - разработчику: PHP, SQL, HTML/CSS, JS, ООП, Git, композер, MVC, фреймворк. Верстальщику - HTML/CSS, JS, jQuery. У нас в треде были люди, которые практически с нуля учились и смогли найти работу (ищи в архиве по слову "устроился"). - Что будут спрашивать на собеседовании если 0 опыта - гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись - Можно подробнее про поиск работы, собеседования - нет, ОП писать не будет, но может кто из анонов захочет рассказать. Поищите тред перезвонивших, а также раздел /wrk/ - Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев - Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Код стоит писать аккуратно и оформлять, как принято. Потому, что другой человек, который будет смотреть твой код, вряд ли обрадуется, когда ему придется разбирать слипшиеся строчки, разбросанные в беспорядке скобки и написанные русскими словами названия переменных. Особенно плохо будет если это, например, код тестового задания, которое ты сделал, чтобы устроиться на работу. Если он будет неряшливым, это будет большой минус.
Вообще, в PHP долгое время не было единого стандарта оформления кода, все писали как попало и было много бардака, но сейчас дело лучше — есть рекомендации PSR-1 и PSR-12. Вот как надо оформлять код:
- переменные и функции пишутся с маленькой буквы, подчеркивание не используется, используется camelCase, пример: $x, $numberOfPeople, printResults() - Название функции начинается с глагола, в стиле «сделайЧтоТо» - не знаешь английский? Не беда, в 21 веке есть решение этой проблемы. Не пиши транслитом, открой лучше Гугл Транслейт и найди название для переменной там - в именах классов используется CamelCase, первая буква большая, «_» может использоваться - мы предпочитаем подстановку переменных вместо конкатенации строк: "I am $age years old" — хорошо, 'I am ' . $age . ' years old' — плохо из-за обилия точек и кавычек - мы используем для отступов 4 пробела (можно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела) - ставим тайп-хинты на аргументы функций, результат функций и поля классов
Вот ссылка на рекомендации PSR, где все это описано подробнее и даны примеры оформления:
анонсы. поясните по хардкору как билдить morphMany связи в ларавской eloquent orm. вот допустим есть две сущности: режиссер и фильмы которые он снял. и у каждой из них есть оценки например от 1 до 10. как мне блять сделать orderby по средней оценке каждого режиссера допустим? пробовал через простой whereHas и нихуя. в доке тоже нет ниче особого. копать их ларавель апи юзаю версию 8.2 если что ?
>>1917200 → >а там оформлено красиво учетка,где можно загрузить фоточку или заебенить пост Сделай у пользователяодна таблица отношение один-к-одному на его профильвторая таблица, где ты будешь хранить его фоточку и прочие данные. По маршруту получаешь айдишник юзеря, у него берёшь профиль и выводишь на страницу что надо. Я б так зделол.
Задам вопрос прямо, ответь на него честно, отталкиваясь от своего опыта: возможен ли фриланс для джуниора? Можно ли зарабатывать хоть какую-то копейку удалённо, имея знания новоиспечённого джуна? Не на забугорном фрилансе, это важно. Хотя я и так понимаю, что там платят больше.
Другой вопрос(если вопрос выше имеет положительный ответ): сколько можно зарабатывать в месяц на фрилансе? 20к выйдет хотя бы? Или доход будет колебаться от существующих подходящих заказов и моего старания?
Официально трудоустроиться в компанию я не могу по личным причинам. Железные сто процентов, это даже обсуждать не надо.
Нужна или удалёнка(а джуниоры на удалёнке не нужны(!)), или фриланс(что тоже вызывает кучу вопросов: возможно ли, какая плата месячная и т. д.)
Ответь как есть, анон. Хочу услышать правду, даже если она хуёвая.
Далее будет простыня о конкретно возникшей ситуации, если кто-то тут проявит дальнейший интерес.
Многие из вас наверняка работают, и понимают сложности трудоустройства на том этапе, когда ты ещё джуниор, к тому же новоиспечённый. С этим такие люди все сталкивались. У меня ситуация ещё хуже: официально я не могу пойти работать в компанию. Официально я не могу трудоустроиться даже на удалёнку. Есть несколько путей для заработка средств себе на хлеб: Фриланс/Удалённая работа, при условии что джуниор им будет нужен, и меня трудоустроят неофициально.
Второй пункт оставим, речь идёт о первом.
Есть два вопроса(помимо тех, что выше спойлера): какой фреймворк выбрать в процессе изучения навыка для работы: laravel, или symfony?
С одной стороны я понимаю, что работы на ларавеле больше, проектов больше, следовательно и на фрилансе нужен будет ларавел. Но выучить хочу конкретно симфони, или лучше оставить это желание в моём положении?
----------------- Второй вопрос: если же фриланс мне как-то и доступен будет, то какие биржи(наши) сможете посоветовать? Где проще найти заказ и заработать себе на кусок хлеба?
>>1917424 Дрочево с голой пыхой в первую очередь это азы программирования и полезно, как миниму для общей эрудиции в ИТ. Если у тебя уже есть опыт разработки, то ок - можно и на Лару сразу залезать, а если ты с нуля полез - соболезную мартыхану.
>>1917443 >фриланс(что тоже вызывает кучу вопросов: возможно ли, какая плата месячная и т. д.) >какая плата месячная Шта? Какая тебе плата? Сколько заработал - столько получил. К этому прибавь время поиска заказчиков, обсуждение работы и проч. Постоянно надо быть на стрёме чтоб не кинул. Нервная работа в общем, и особенно поначалу. Ещё хрен заказ вырубишь на первых порах и приходится работать со всяким говном, которое двух слов связать не может, но гораздо в отзывы насрать.
Где искать работу не скажу - сам ищи. Где найдёшь - там и работай.
>>1917452 >хх.ру >7 вакансий пхп джуна удаленно Лол. Многие вакансии там годами висят по причинам: 1. хрюшки зарплату отрабатывают и рынок мониторят 2. кидалы с тестовыми - будешь бесплатно на кого-то работать под видом тестового 3. там ждут человека на позицию джуниора с навыками мидла
>>1917453 > Где искать работу не скажу - сам ищи. Где найдёшь - там и работай. Но ведь даже так - ты признаёшь, что джуну что-то, да может перепасть на фрилансе, кроме пиздюлей:D
Хорошо сэр, вас понял, сэр. Именно этот ответ мне и нужен был превыше всего. А нервной работы не боюсь, всякой хуйни уже в жизни насмотрелся. Добра тебе, анон.
>>1917461 Предлагаю не отвечать этому персонажу пока он не начнёт по теме уроков спрашивать, а то заебёт тупыми вопросами по каждому пуку. Пусть сам гуглит.
>>1917461 Братик, мой тебе дружеский совет: найди в интернете методичку от Дмитрия Трепачёва и учись по ней. У него есть всё что требуется, вся необходимая база, а чего нет в методичке - есть на его ютуб-канале. Вопрос, который ты задал - лёгок и глуп. Будь молодцом, иди учись.
Скорее всего, это твой браузер для твоего же удобства сохраняет данные. Попробуй нажать на ключик или похожий символ в адресной строке, также можешь поискать "автозаполнение форм" в настройках браузера и отключить его для своего сайта.
Тебе хорошо бы учиться не писать код одной портянкой, а разбивать его на функции. Тут можно сделать функции вроде "проверить, авторизован ли пользователь" и "разлогинить пользователя". Ну естественно, и функцию "залогинить пользователя" тоже стоит сделать.
Я понимаю, что тред не только для опытных, но и нубов, но давайте его в детский сад не превращать по ёбнутому доброчановскому принципу "потому, что". Если спрашиваешь, то хоть сам сперва поищи решение с полчаса - имей совесть. Всё таки он не только для нубов, но и для всех остальных.
>>1917260 (OP) "Итак, сделав последнюю выплату по кредиту, наш школьник собрался было идти домой и направился к ст.м. Площадь Восстания, как вдруг его взгляд привекла реклама нового планшета Apple New Ipad 32Gb (всего за 39999 р). Понятно, что вскоре наш незадачливый любитель яблок уже держал в руках и поглаживал новый девайс аки кота-манула и чуть слышно шептал «моя прелесть». Поскольку денег у нашего героя уже не было, он решил воспользоваться услугой «покупка в кредит без первого вноса». Кредит предлагают 3 банка, и все на разных условиях:
кредит за 4% и (мелким шрифтом) 500 р комиссии в месяц от HomoCredit кредит за 3% и 1000 р комиссии в месяц от того же банка (Softbank), что и в первой задаче нереально вкусное предложение от StrawberryBank за 2% в месяц, без комиссии, но с платой в размере 7777 р за открытие счета (эту сумма прибавляется к сумме долга) Задание: воспользовавшись ранее купленным айфоном (и полученными на сами знаете каком сайте знаниями), определи наиболее выгодный кредит. Платить школьник, как и прежде, может не более 5000 р. в месяц. Сначала начисляются проценты и комиссия, а только потом происходит выплата."
>>1917737 Чот сложно. Вот я накидал быстро https://ideone.com/QN1ix0 Как минимум ты проебался с оплатой до начисления процентов и с добавлением 7777 в конце, а не в начале.
>>1917746 >и с добавлением 7777 в конце Так 7777 не добавляется к подверженной процентным изменениям и комиссии сумме кредита, это единичный платёж за открытие счёта.
>>1917424 Пипец. Сорри, но ларавельщик - не программист. следующий шаг - писать сайты на winx или tilda. Хотя. Подход мне нравится. Нам надо больше сироток (с). Пусть будет побольше ларавельщиков и прочих имитаторов. Толпы джуниоров с высшим образованием, которые пятистрочный обработчик формы обратной связи даже без композера и ларавела не могут поставить. И при любом намеке на написание какого либо элементарного класса начинают пространно рассуждать про масштабируемость, совместимость и пугают всех плохими велосипедами да неизбежными костылями. Тогда у меня постоянно будет работа - переделывать их перегруженных и кособоких кадавров в более менее юзабельные веб приложения в четверо урезанные сроки и с десятикратным ценником, так как за дурость следует платить, а не нравится - пусть походят по рынку поищут спецов. ЭТо почти как с мобильными приложениями последнее время - где верх мастерства - это засунуть в шаблон вебвьюхи сайт, без малейшего понимания сишарпа или свифта, но с выученным наизусть расположением кнопок интерфейса конструктора.
>>1917494 Код новичка как код. Работает и работает. Оценивать нечего. Нет структуры приложения как такового - непонятно, чего хочешь достичь. Оценивать можно, когда что-то сделаешь путное. То есть представишь задачу, продумаешь и создашь ее решение. Вот исходя из того, как ты сделаешь и можно будет что-то оценивать. А то как ты строки оформляешь, как записи типа "==false" да в хтмл пхп запихиваешь для меня просто показатель того, что ты новичок. У прожженых пхпшных тварей таких конструкций не увидишь Будет вроде $_SESSION['name']&&$_SESSION['city']?$this->hello:$this->nafig; как минимум, и соотв. строки будут как 'бла-бла ' . $name . 'бла - бла'; без извратов с переменными внутри двойных и фигурными скобками, так как чревато.
>>1917750 Правильно у 1917746 так как там более-менее грамотно сделана структура кода - функция с входящими как универсальный метод. Код 1917737 явно новичок, создает кучу ненужных переменных. В пыхе чем меньше переменных, тем лучше. Логически - есть переменная - процент. У банков она разная, и всего то. Чел же создал три по сути переменные, которые вообще-то как бы константы. и соотв черти что а не код. А если банков не три, а семьсот к примеру - семьсот переменных будешь создавать? Я своих "коллег" за такое морально унижаю даже если в первый раз. При рецидивах - и физически. То есть косяк на уровне понимания алгоритма. Переменные - процент, комиссия, взнос. = больше нет и быть не может. И на основании их строится функция метод. Как то так.
>>1917780 Тоже так считаю. Пока есть такие "програмиисты" у меня будет большая зарплата. Они для себя новый мир открывают, когда говоришь им, что в ларе можно свои классы писать и в папочку апп складывать. Видел километровые контроллеры в которых написан код всего приложения.
>>1917730 Около года. Сначала были питон/джанга. Едва осилив основы питона, полез в джангу писать тудулист. Пробовал удаленку на джанге - не зашло. Потом полез в пхп/ларавел, тоже сразу полез писать пет на фреймворке
>>1917780 К слову я уже давно вышел за рамки и фреймворка и языка. Умею создавать папочки. Я форшу фреймворки, потому что это скорейший путь выхода на работу. А там уже встанут реальные задачи и будет понятно, в каком направлении расти. Всяко лучше, чем сидеть что-то невнятное лепить на голой пыхе. Такое мб лет 20 назад актуально было. Но не сейчас, когда всё делается херак-херак, слепил из готовых компонентов и в прод. А те, кто хотят что-то своё с нуля писать, вряд ли выберут пыху.
Сап двощь, если для сайта мне нужны две глобальные роли, например Продавец и Покупатель, имеет смысл для них делать отдельные сущности со своими логинами, может даже отдельные таблицы (у продавца больше инфы должно быть о себе), чтобы как-то избежать в коде вот этого вот if $user->isSeller(), и разграничить это явно на уровне приложения
>>1917260 (OP) А я напомню вайтишникам, что вкатываясь в IT через пхп вы навсегда станете низкоквалифицированным таджиком от мира современной разработки и никогда не увидите ни 300к/наносек, ни ламповой удаленки за доллары, ни релокации в Европу.
Ну веб приложение проще всего монетизировать. На него рекламку повесил и пошло дело. Не надо с гуглплеем ебаться, не надо в steam игрушку пытаться захуячить, не надо с яблочным говном ебошиться.
Просто добавил и индексируештся.
Второй по простоте стартап это мобильная приложуха, наверно.
На пхп можно зарабатывать больше 100к? Есть два знакомых, которые на реакт с нуля вкатились и один уже 170к имеет, а другой 210к. При том первый имеет пол года опыта, а другой полтора. Вот с пхп такое возможно? Или 70к для пхп предел?
В руби своя атмосфера. Надо уметь ебаться с магией и с DSL'ями, там ООП по заветам ИльичаКэя. А php это почти тот же си. Иногда такой же дырявый. Ну проще он бля ну хуй знает. И непривычный пиздец. В этом плане пхп проще.
>>1918077 >Производительность занесите плез Ты новый твиттер собрался пилить для малого и среднего он крут Ларавел тоже для сильных нагрузок тоже не айс
>>1917984 На чистом пхп никто не работает как правило, всегда требуется знание баз данных и фронта, затем подтягивается по любому js node react и так далее. Все зависит от конкретного случая. Но вкатиться на минималках на вебе через понимание апач+пыхи+js однозначно проще, чем искать вакансии джуниора на java или си, т.к спрос на порядок выше и реально больше прикладных задач можно сделать. Потом по любому подключаются всякого рода редиски, Всегда есть куда расти, подключать массу сервисов - амазон, азюре, всевозможные дап, и т.п. Рано или поздно вывозит на необходимость освоения java и cи при необходимости серверных решений для медиа - данных и тп. То есть прямиком в фулл-стек. Другой вопрос - это застрять на пхп. Тогда да, таджик. Но тут не в пыхе уже дело, а в отстутствии сферы применения навыков и знаний или тупо в лени. Но так же можно застрять где угодно. И из моего опыта фул-стекеров, которые начинали с пыхи даже больше, чем оверпродвинутых фанатов си++ и java, и особенно питонщиков,застрявших в поисках максимально теплого места и перебивающихся фрилансом, которых пруд пруди, и которым планку сбили - работы нормальной по их запросам у них постоянно нет, поскольку их навыки слишком узкие для решения востребованных задач.
>>1918087 >На сеньерских позициях вполне себе можно до 200к поднимать. Я недавно смотрел сеньерские вакансии по пыху в своей мухосрани, отфильтровал чтобы показывало только с указанием зп. Малость охуел, самая нижняя граница которую я увидел - 4k$. Вроде бы пиздеть не должны, до этого был уверен что для пыхера 3к$ не достижимы.
>>1918093 В этот раз несильно дрочили. Спросили пару фич пхп, за ООП и СОЛИД. Дали написать сортировку - написал пузерык и назвал алго сложность 1 вариант улучшения.
Самое ценное, что хотят услышать - то, что делал на прошлых местах работы. Рассказик минут на 10 о том, как ты помог проекту, какие фичи привнес гораздо ценнее 30 минутного дрочева теорией.
Еще стоит проявлять интерес к будущему месту работы, проекту и команде.
Мне например было интересно услышать, как они справляются с легаси, поэтому задал на эту тему несколько вопросов.
Та дело в том что в принципе в теории зарплаты сеньоров не ограничены. Когда речь идёт о сеньорах, тут очень сложно говорить о сравнении одного с другим. От Синьора вообще зависит будут ли джуны писать говнокод или нет. Хороший сеньор просто не допустит говнокода и даст жунам конкретные задачи, укажет best practices и тд.
Там вообще доходы очень разные. И в hh не так легко их найти, так как чаще всего на эти доходы не берут людей с улицы а повышают. Всё таки синьор из другой фирмы это не то. Ему нужно время вникнуть в проектоту.
>>1918144 Джун - говно без задач, ему можно давать только самые простые таски и пристально следить, чтобы в код не насрал. Мидл - рабочая лошадка. Берет задачи из беклога и делает, все подробности выясняет сам. Синьор - следит за качеством проекта (раздает пиздюлей джунам и мидлам), работает с бизнесом (выясняет требования, оформляет в таски), изредка что-то сам пишет
>>1918144 >Чем отличается джун от мидла и мидл от сеньора? Где проходят грани?
Сеньор просто может написать убер с нуля сам, так как уже набил руку в различном проектировании, просто в разработке, в девопс хуйне. Миддл обычно тупо гребет таски и пока не писал убер с нуля сам, поэтому напишет его через жопу или примитивно не в плане кода, а в плане архитектуры и юзания инфраструктуры, джун это такой миддл только который еще мало получает и может не знать о существовании каких-то подходов и практик, не знает каких-то вещей о языке или инфраструктуре, то есть типа он не в курсе что типа что-то надо делать через очереди или ивенты или многопоточно, кругозора нет
Проще всего - уровнем вовлеченности и менеджментом. То есть если тебе скидывают задачи в жЫре или ещё где вы там сидите, спрашивают сроки - ты жун.
Если тебе дают мета-задачи которые прям от клиента и тебе надо уже решать как разбить на подзадачи и у тебя может стоять выбор в технологиях, ты можешь принимать решение на чём кодить что-то и тд. Тебе приходится кодревьювить и иногда собеседовать - ты мидло.
Если тебе дают самые критические задачи, ты принимаешь все архитектурные решения, ты вовлечён в проекты на высшем уровне - ты синьор.
Ну ты понел. А зарплата Синьора может зависить напрямую от успеха проекта. Премии и тд не редки.
>>1918149 >Синьор - следит за качеством проекта (раздает пиздюлей джунам и мидлам), работает с бизнесом (выясняет требования, оформляет в таски), Этим разве не отдельный человек должен заниматься? Продакт менеджер или как его там
>>1918157 Бывает такой косяк, когда "отдельный человек" пытается справиться, нихера не разбираясь в программировании. Как правило такие проекты заканчиваются тем, что проект намертво встает колом или ползет медленнее улитки, так как хитрожопые яйцеголовые прогеры всегда убедят его, что "так невозможно сделать, а для этого надо еще дофига и больше времени и не факт что получится" и т.п., злоупотребляя доверием тупого магла и разводя его и начальство как школьников ради веселого оплачиваемого шлангования и активного ибд со скоростью три строчки кода на четверых в неделю. Как правило, от жадности глупого начальства такое делается. Иногда существует неограниченный период времени. Сам знаю фирмы и компании со штатом из 50+ прогеров, верстальщиков и дизайнеров, которые дружно "поддерживают" пятистраничный корпоративный сайт на вордпрессе, и смена адреса электронной почты на странице контактов занимает полторы недели совещаний и планерок, а затем еще неделю выяснения, кто будет исполнителем и собственно само исполнение. Мне лично очень нравятся такие коллективы.
Опытные же люди давно в курсе, и ставят на эту роль сеньора-помидора, который бы и сам тупо мог собрать бы весь проект, если бы фактор времени был бы не важен. Тогда все более менее рационально получается. Но это как правило только тогда, когда контора действительно делает серьезный проект. А для обычных кобанчиков даже опытные сеньоры быстро смекают, что в глобальных масштабах вариант 1 более правилен. Потому что маглы это маглы, им не дано понять, как и почему правильно делать их проекты, поэтому их дело - платить и повиноваться прогеру, и за каждый косяк на корачках ползать, чтобы починили. Так всегда было и будет. :)
>>1917877 Ты меня с кем-то спутал, анон, я тут впервые пишу. Сомневаюсь, что у кого-то аналогичная мне проблема. Слишком маловероятно. Хотя шансы есть всегда и везде. > ООО "Рога и Копыта" — "Анон Битардов, а доказать это сможете?" — "Анон Битардов, это означает, что вы можете заниматься полноценными проектами сразу же?"
>>1918090 React, Redux, Router, Saga. Какой-нибудь ui-kit типа react-bootstrap, ant, и другие Опционально сервер-сайд рендеринг. Ну и офк адаптивная верстка.
>>1918179 — "Анон Битардов, а доказать это сможете?" — "Анон Битардов, это означает, что вы можете заниматься полноценными проектами сразу же?"
— "Буду краток. Вы знаете, буквально на днях я был на /pr/, провёл беседу со многими программистами, в том числе молодыми, кстати, очень грамотные ребята. Так вот мы обсудили, в частности и данную проблему, поговорили о текущей экономической обстановке в стране; они так же рассказали о своих планах на будущее. Конечно, в первую очередь их волновала проблема востребованности; не менее остро встал и вопрос по ипотечным кредитам, но могу заверить, все эти проблемы решаемы и мы направим все усилия, чтобы решены они были в самом ближайшем будущем. В том числе это касается и темы, затронутой в вашем вопросе."
>>1918157 От размера конторы зависит. В моей первой конторе синьором был дирек, соответственно, он базарил с клиентами, выяснял требования и нарезал таски для меня и других разрабов. В крупных фирмах уже появляются всякие пмы, продакты, аналитики
>>1917443 >не могу работать официально от армейки плохо гаситься, айайай по поводу твоего вопроса: ищи или удаленку в любых городах естественно, благо во время пандемии это ок либо офис, фриланс для джуна гиблое дело. поверь дохуя контор кто в черную работает. накрайняк можешь договориться чтобы ты ип оформил или же работать по договору гпх как наемный рабочий. и если все таки собираешься на фриланс то со знаниями ларки или симфонии ты там нахуй никому не вопрешься, тем более будучи ждуном. зачастую такие проекты на фриланс абы кому не отдают. так что учи всякие битриксы, вордпрессы, джумлы, опенкарты и вот эти всякие сорта говна если действительно такой путь себе выберешь
>>1918286 У меня на скрине с гугла решение твоей проблемы. В php функции preg_replace не нужно указывать модификатор g, т.к. он задается через параметр $limit. По умолчанию g "включён".
>>1918398 Что ты гуглил? Заходишь на пхп.нет и вбиваешь свой метод, чтобы понять как он работает. В пыхе, к сожалению, многие методы работают неочевидно
>>1918928 >давно все докером Нахуй нужен - не хватало ещё контейнер для сайтиков тащить, который ещё и далеко не везде работает - ему только 10винду подай. Жирно будет с виндой целый день трахаться ради этого.
Посоветуйте чего для портфолио и дрочки скилла на ларке склепать более-менее интересного. Пока что из идей только сайт объявлений типо авито и поиска работы типо hh.
Какая по канону должна быть структура директории views в ларке? Я пока что для себя представляю такой вариант: - Конечные шаблоны, которые будут генерироваться для пользователя, в корне папки - Папка layouts для базовых шаблонов, которые будут наследоваться - Папка partitions для шаблонов, которые будут включаться через @include Правильно мыслю?
"Дан неграмотно написанный текст, состоящий из нескольких предложений на русском языке. Ошибки заключаются в неправильной расстановке пробелов и отсутствии заглавных букв. Исправь текст так, чтобы все предложения в нем начинались с большой буквы, а после знаков запятая, точка, точка с запятой, двоеточие, восклицательный и вопросительный знак стоял ровно один пробел (а перед ними — ни одного). Составные знаки вроде многоточия или 2 вопросительных знаков подряд должны сохраняться."
>>1919534 В прошлом году была платформа для нескольких интернет магазинов на моднявом стеке. Но я свалил уволили, т.к. был не согласен с направлением развития этого говна и принятыми архитектурными решениями. До этого был сервис постинга автообъявлений на всякие площадки типа авито.
На собесах тоже интересные проекты показывали но офер не давали вроде сервиса для рекламщиком (там всякая рекламная аналитика, смм, сео хуйня).
Так-то любая бизнес идея может выстрелить и понадобится что-то умнее лэндинга или странички в соц сетях.
>>1919813 Сейчас модно пилить говно на го. И хорошо, если это говно пилят в виде микросервисов. А то ведь попадаются макаки, которые пытаются на го писать как на пхп в монолитном стиле
>>1919853 Когда у фирмы есть старый монолитный продукт на пхп, он приносит прилично денег, а на поддержку это говна уже никаких нервов не хватает. Тогда берут это монолитное говно и потихоньку распиливают на микросервисы, которые поддерживать на порядки проще.
Тебе как вкатуну это всё нахрен не надо. Бери один язык и катись. Оставь распил легаси говна тем, кому это интересно.
> postgress > крупный проект Засмеялся-проиграл тред? В больших проектах на таких СУБД только хранят всякую мелочь. Ну-ка покажи количество строк в этой базе данных.
>>1919901 Вот для чего нужен GO - это тупо дома для себя что-то там поделать на выходных и забыть, ну ещё впарить на говнокурсах. Так нахуй никому не нужен, говорю)
У меня в базах в одной таблице по 300 миллионов данных, со связями с другими таблицами - у меня за одну-две секунды это всё переваривается на PHP. Я хуй знает для чего GO)
У тебя ошибка в условии цикла. Там пишут не условие завершения, а условие продолжения. У тебя это $creditSum <= 0, то есть выполнять цикл пока $creditSum <= 0. Цикл в итоге не выполняется ни разу.
Ты можешь в этом убедиться, поставив echo "Loop"; внутри цикла.
Далее, $commission не надо вычислять из процента. Его надо явно передавать в функцию. Тогда функция станет универсальнее и сможет рассчитывать кредиты с любыит параметрами, а не только те, что ты в нее заложил.
Еще ошибка тут: $creditSum = $creditSum -= $payout. Надо либо -= заменить на -, либо убрать $creditSum = ... слева.
Еще ошибка тут: if ($creditPay = 1.03) - ты использовал присваивание значения переменной (=) вместо сравнения (==).
По одному из кредитов общая сумма выплаты равна 61270.
Вообще, такая ситуация, когда есть однотипные, но разные сущности, называется наследование таблиц. Есть три стандартных паттерна: Class Table Inheritance, Single TI, Concrete TI.
Single TI, например, это и есть складывание всего в одну таблицу.
Наверно, вместо отдельных сущностей лучше использовать один из трех паттернов.
>>1917737 Тебе уже расписали твои ошибки, и даже показали правильное решение: >>1917746 Но на момент прохождения урока "Функции и новый айпад" мы еще не знали о возможности создания циклов через while. Так что у меня получилось так: https://ideone.com/i6Vwdb
Ответы сверил с >>1917746 , однако не понял, где в коде >>1917746 проверяется, не превышает ли константа меньшего платежа остаток по кредиту. Может быть, неведомое мне колдунство скрыто в строке return $paid + $sum; ? Что это обозначает, поясните, пожалуйста. >>1917984 То-то у тебя жизнь сладкая, насыщенная и не лишенная смысла: катаешься по пхп-треду и изливаешь говно. Ради такого стоит постичь С++, да. >>1918115 А я вот не понял. Вернее понял, где ты ошибся, но не понял, нахуя ты в регулярке пишешь [а-яёА-ЯЁ], если у тебя после нее стоит ключ i?
>>1920311 >Может быть, неведомое мне колдунство скрыто в строке return $paid + $sum; ? Цикл останавливается с суммой в нуль или переплатой-минусом, вот он и добавляется к выплатам для правильного счета.
>>1920317 Теперь понял. Просто забыл, что итогом функции является именно то, что return. Мудрый Анон, взгляни, пожалуйста, на мое решение первой бонусной задачи про клавишу Shift: https://ideone.com/4JJzk6 Не перемудрил ли я чего? Что в коде режет глаз? Что посоветуешь? Специально писал с подробными комментариями. Правильно ли я понимаю действия, выполняемые строками кода? Спасибо.
>>1920436 >панель управления сайтом Кстати, а зачем веб админка нужна, по крайней мере в мелких бложеках или интернет магазинах? Не безопаснее ли прямо в базу грузить данные или для десктопа приложение написать, если гуи так нужно. Если что, сорри за нубский вопрос.
>>1920702 Чтобы девачьки могли хуярить, а не кампунктерщики. Ну и зачастую просто берут готовый движок, более продвинутый чем требуется, в котором это уже есть, так хули не пользоваться.
Почему не работает суперкод который я насоображал гигамозгом? Решал задачу на считалочку. В функции идёт переборка элементов, при каждом переборе к переменной $i прибавляется 1, при значении $i в 5 элемент перебирающийся в данный момент должен стираться и переменная $i обнуляется. Что не так?
>>1920759 В типах разбираешься? Сразу используй строгую типизацию, привыкай. после <?php declare(strict_types=1) function(string $str, array $arr) например
нормально называй функции и на английском. Визуально разбивай код на блоки - хотя бы отступом отделяй.
>>1920794 Ну да. Отдельная страница логина в админку. Отдельные страницы (контроллеры) самой админки. Технически это может быть вообще другой сайт (веб-приложение), просто с доступом к базе собственно сайта который админят. Если хочется совсем необычного, скажем если у тебя десятки лендингов в них можно придумать какое-то простенькое api и админить все эти лендинги с одной универсальной админки (для лендингом много функционала не нужно, максимум там какие-то счетчики метрик рекламы обновлять).
>>1920794 В базе должна быть роль у юзера, админ или юзер. Ты можешь выбрать кто может в админку вообще заходить. Если есть разные админки для юзера и админа, то либо можно их вынести в разные роуты, либо разделить куски, дальше в шаблоне или контроллере if($user->getRole() === 'admin') { то вывести панель админа} else {вывести панель юзера}
>>1920801 но тогда в коде уже должен заранее быть логин и пароль админа? там где проверяют логины и пароли юзеров должен быть отдельный if($user==$admin)? ну это если на чистом
>>1918976 >>1919053 Перепись маняхипстеров от пхп ИТТ. Вы там по 20 проектов каждый ведёте на разных платформах, макаки? А ничего, что он далеко не везде и не для всех задач нужен вообще? Даже удивлён, что всего 2 дебила нашлось на весь тред.
>>1918963 Если не нужен в твоей работе - не юзай. Это не такая необходимая вещь, как тот же гит.
Откуда этот миф про микросервисы, которые якобы проще поддерживать? Микросервисы - это зло, к которому приходится прибегать, когда очень большой объем кода и много людей в команде, чтобы каждый пилил свою часть.
Это дрянь, от которой лучше держаться подальше.
Суммарный объем кода в микросервисах не меньше, а больше, чем в исходном монолите. Разобраться в них сложнее и дольше, чем в монолите. Да даже запустить локально их сложнее: нужно запускать поганые докеры, которые едят место на диске огромными образами, едят память и процессор, тормозят.
Монолит использует один язык, одну архитектуру и один фреймворк. Микросервисы могут каждый использовать свой язык, свой фреймворк и свою архитектуру. Разобраться в них гораздо сложнее.
В монолите ты кликаешь на вызов функции и переходишь к определению. В микросервисе ты наталкиваешься на HTTP-запрос и идешь долго выяснять, кем и как он обрабатывается, потом находишь нужный микросервис, долго изучаешь как он устроен, ищешь что там происходит и где обработчик нужного тебе запроса, изучаешь его код. Одни мучения и затраты времени.
Другой пример. Микросервисам A, B и C надо работать с одной и той же сущностью (например: Пользователь). Что делать? Копипастить код и поддерживать 3 варианта одного и того же кода? Когда у юзера появятся новые поля, добавлять их в три микросервиса? Выносить в библиотеку и мучаться с тем, что одному сервису нужна одна версия библиотеки, а другому - другая? Сплошная боль и мучение. А в монолите такой проблемы просто нет.
Дальше, у каждого сервиса своя база данных. А что, если нескольким сервисам нужна одна и та же таблица? Опять боль, пишем синхронизацию этой таблицы между сервисами. В то время как в монолите такой проблемы просто нету.
По моему, это миф, что микросервисы чем-то лучше. Они хуже. Просто когда людей в компании очень много, им удобнее работать над своей частью кода, зачастую по своим правилам на своем фреймворке и своем языке вместо того, чтобы договориться и сообща развивать единый проект в едином репозитории.
Микросервисы требуют большего расхода рабочего времени на разработку и поддержку. Потому они и подходят большим компаниям, где много рабочей силы.
Котята, если в проекте, написанном на ларавеле, вся бизнес логика находится в основном в контроллерах, то это автоматически считается признаком дурного тона? Даже если этот код в контроллерах написан грамотно?
>>1921719 Думай не о призраках дурного тона, а о том чтобы не наступить себе на яица Копипастишь одни и теже проверки в разные места - однажды наступишь Зависимости между сущностями делаешь не через интерфейсы - однажды наступишь. Делаешь слишком умные объекты знающие все обо всем - однажды наступишь. Делаешь слишком открытые объекты позволяющие ебать себя во все щели - однажды наступишь. И так далее...
>>1921744 И не всегда нужно писать хороший код. Иногда нужно говнокодить. Особенно когда ты не в состоянии убедить начальство выделить тебе время на нормальный код. Тебе и так выдели много времени, почему ты хочешь целую неделю? Вот Петя не жалуется постоянно на нехватку времени, всегда все успевает.
>>1921755 Тут код не поможет. Тут надо с начальством вопрос решать. Если начальство выделывается - увольняй его нафиг. Время определяешь только ты. Не устраивает их - пусть другие им говнокодят. Пока расклад такой - пользуйтесь. Начальство баловать нельзя категорически.
>>1921719 >считается признаком дурного тона? Нет никаких признаков дурного тона. Мы ж не на балу во дворце, а приложухи пилим каждый во что горазд.
Рекомендую делать через сервисы\менеджеры - так банально удобнее. На самом деле контроллер не имеет ничего общего с логикой приложения, а является точкой входа из веб, и не более. В контроллерах вызываются сервисы, которые и содежат логику приложения - пользователя там можно, например, зарегистровать или забанить. При работе через сервисы ты можешь забанить этого пользователя и через консольку - только напиши обработчик команды, где вызови этот сервис с нужными параметрами, полученными из командной строки. А как ты контроллер вызовешь из консольки? Хотя тот же Опенкарт использует грязные контроллеры и вездесущий копипаст и всем норм. Но это плохой пример.
>>1921765 >Начальство баловать нельзя категорически. Двачую. Хотят говна - делай говно. Чтоб падало периодически, глючило и не работало как надо. Ну а что? Хотели быстро - НАТЕ быстро. Если делать быстро и хорошо - будешь в мыле весь. Через год выгоришь к хуям.
>>1921798 А вообще мне как-то повстречалось выражение что-то вроде "Любишь быстро-быстро всё делать? Это мама из тебя шныря такого воспитала?". Может немного по-АУЕшному, но суть отражает - быть шнырём это унизительно и неправильно. Работать надо плавно с расстановкой.
unset($place) удаляет не элемент массива, а переменную $place. Чтобы удалить элемент массива, надо писать unset($array[$key]).
Обрати внимание, что при удалении элемента ключи и значения других элементов не пересчитываются. То есть если ключи шли как 0, 1, 2, 3 и ты удалил номер 2, то останется массив с ключами 0, 1, 3.
>>1921845 Кстати прикольная тема, я думаю неплохо покидать сюда пхпшных всяких задач, максимально шизанутых, чисто для развлекухи, и предложить желающим выкладывать свои варианты решений, а потом можно будет устраивать развеселые срачи с метанием кала друг в друга, на тему у кого решение толще и длиннее!
Прорабатываю курс по ларавелу. Там начало на 5.7, потом переход на 5.8, и вот теперь на 6.0. А у меня ошибка. Вот поставил свежий Ларавел 6.20, добавляю аутентификацию - а она не ставится. Ничего путного не нагуглил. Что сделать, чтобы заработало?
>>1921947 И какие ты можешь навскидку назвать популярные большие сайты в виде SPA? Мне приходит в голову только какая-то инфографика и такие идиотские сайтики с скроллингом вниз, по уёбищности примерно как почивший флэш.
>>1921952 Сейчас он тебе за ноду расскажет. На деле же, писать бэк на ноде - ярчайший признак профнепригодности к бекенду. Одно дело когда пхпшник на ноде пишет и совсем другое когда жс-вронтенд-макака.
>>1921943 Так в том-то и дело, что я не понимаю, что вообще тут происходит. Требуется пакет ххх, он найден, но конфликтует с другим пакетом. И что вообще в таких ситуациях делать? Я не сеньёр-помидор и не мидл, я просто хочу пересесть с вордпресса и голого пхп на ларавел. Смотрю уроки, выполняю то, что в них описано.
То есть, мне нужно было зайти на https://github.com/illuminate/console, увидеть, что там пусто, зайти на https://github.com/laravel/ui, увидеть табличку "Supported Versions", сообразить, у меня ставится 3.2, а с Ларавелом 6 совместима только 1.х, понять, как указывать композеру номер версии и написать composer require laravel/ui "1.*" и после этого получить установленный с пакет? Шаманство какое-то. Везде кричат, что композер это круто и рулез форева. А на деле даже не может выбрать совместимые пакеты. Как так-то?
Имеется блок heder и в нем блоки для лого(слева),имени юзера(ближе к право),сообщение и блок выйти Чтобы это было красиво и в одну линию,я поставил display: inline-block и все вроде встало(все с отступами) но если уменьшить окно браузера,все блоуи справа начинаю съезжать вниз в левую сторону. Как исправить на сжимание в одной строке до талого?
>>1922402 да соль то в том что как раз и пытаюсь свалить с этого говна. полтора года отгреб на всяких cms парашах, хотя в конторе были норм проекты на адекватном стеке. сказал в том месяце что не хочу работь на этом кале а хочу норм проекты на норм стеке. в итоге подкинули эту хуйню как новый сирьезный проект благо не легали хуета. вот пытаюсь в ней как то освоиться и изучить ))) параллельно конечно же ищу нормальную галеру с адекватным стэком чтобы съебаться в закат
>>1922476 >отгреб на всяких cms парашах Говновебстудия на фриланс-заказах что ли?
>ищу нормальную галеру Так может и нахуй эти шаражки - в говне-то и самому копаться можно. И не кормить хозяина конторы. Опыт ковыряния в помоях у тебя уже есть вроде.
>>1922491 >Говновебстудия на фриланс-заказах что ли? да тут двоякая ситуация. с одной стороны да, а с другой есть большие сложные системы даже из других стран есть заказчики лол а с другой вот такое вот дерьмо . >в говне-то и самому копаться можно. да впизду этот фриланс. не хочу копаться в этом говне + фрилансить и ебаться с заказчиками. хочу на норм галеру или контору со своим продуктом где будет фреймворк. а на фрилансе заказов на фреймворке с гулькин хуй. так что не выход. ну а чтобы пилить свой стартап на ларе пока средств нет чтобы тууда вкладываться и развивать хотя проектик то есть, что то же я показываю хрюшам чтобы без мыла пролезть на фреймворк по факту не имея на нем коммерческого опыта
>>1922567 Так может стоит приврать насчет коммерческого опыта на фреймворке? Хрюши то не проверяют, правда ли работал на нем. Им лишь бы услышать нужную цифру N+ лет на фреймворке-нейм.
>>1923098 Раз он говорит, что писал на ларе, то не факт что приложат. А даже если на паре вопросов приложат - запишет вопросы, подучит и на следующем собесе не приложат.
>>1923103 А ну, если так, то да. В принципе немного приврать про опыт, когда это необходимо, не страшно, главное чтобы был готов к тех собесу нормально, чтобы дизмораль не словить.
>>1923114 >приврать про опыт Только если петы делал. Туториалы с хелловорлдом не в счёт. Т.е. если можешь взять рандомное тестовое на этой платформе и сделать его в приемлимые сроки - тогда есть смысол приврать про опыт. Иначе обосрёшься обидно.
>>1923157 Джиру во-первых все по разному готовят. Во-вторых осваивается за 1 день, т.к. тебе всё пояснят при онбоардинге. А умение оценивать таски из разряда фантастики
<div id="logo"> <a href="index.php"> <img srs="/imgages/logo.PNG" alt="logo"></a> </div> почему картинка не отображается? в папке htdocs есть папка app. а в ней images
>>1923059 >>1922567 Вот поэтому и говорят умные дядьки - учите нативный пхп сначала, без всякого дерьма типа фреймворков-ларавелов и кмс-ов. Потому что все это дерьмо - и фреймворки типа магнет, джулм вордпрессов и всяко-разных движков на нативном пхп-js-sql и построено. Дохуя развелось "ларавелщиков" которые на деле не в сасывают, как все работает, а тупо зубрят шаблоны. Потому что "нахуя нативный пхп нужен то?". Потому и нужен, что если нативный знаешь, то тебе похеру потом, какой движок, фреймворк или кмс. Ты изнутри их видишь, и понимаешь, как и что делать в любом случае. И в теории сам можешь собрать под себя и свой собственный ларавел, и свои кмс, и свои любые движки. И не будет херни типа "а, это магента 2 - я не работал никогда вообще с таким, хз, не потяну, я только по битриксу и вордпрессу, и немного джулму" - когда вопрос тупо добавить кнопку или таблицу данных в базу. Как то так. Я как раз работаю (точнее подрабатываю как хобби) в конторе где половина ларавельщиков, и половина реактеров. И я отдельно, потому что я пхп-шник, node-js ник. Вне системы типа, потому что постоянно приходится корректировать их "работу", когда у них "глаза не видят, руки делают" - то есть шаблоны не работают так, как хочет заказчик, а понимания внутренней структуры - нет и в помине. Так как "некогда объяснять - хуячь шаблоны"... а все что за рамками - типа никак.
>>1922290 Просто бывает такая штука, что делаешь себе шаблончики на пыхе ридонли и горя не знаешь, потом появляется какая-то йоба форма динамическая, думаешь ну тут нужен жаваскрипт, подрубаешь вью/реакт потому что так банально продуктивнее, потом с ростом таких динамических страниц замечаешь что дублируешь верстку у компонентов, задумываешься над тем чтобы перенести общие компоненты на вью, или оставить как есть. В итоге получается что у тебя 70% фронта всё равно работает на жсе, 30% на пхп, при этом собирается всё непонятно как, хотя можно было взять какой-то nuxtjs и горя не знать, хотя усложняется деплой, это да. Сразу адептам жиквери или чистого жса, которые считают что для простых задач вью/реакт не нужен, во первых он весит даже больше чем вью, это если мы говорим о размере ассетов, пхпшниками жиквери код пишется обычно на один раз, потом чтобы что-то добавить, нужно сидеть и 15 минут просто вникать в этот императивный поток сознания какие классы у кого включаются/выключаются, при этом непонятно на чем мы сэкономили (наверное что не нужно вебпак запускать, ну это сильно)
>>1923103 адекват в треде. если в течении месяца не найду работу то планирую так и поступать. но на самом деле как показывает практика то тут про фреймворк редко что то спрашивают. в основном по теории, паттернам, языку, бд. вот на этом легко сфелится на самом деле. да и то иногда и этого бывает мало. на той неделе был собес где вместо тестового вот решал задачки + вопросы по теории. в итоге правильно ответил на всю хуйню что спрашивали, и как итог на след день сказали сори вы нам не подходите))) хуй знает че им надо лол. тут все мега относительно >>1923468 так соль то в том что с нативного и голого пхп я как раз и начинал. не будь этих знаний - не смог бы тут все это дерьмо в короткие сроки осваивать и выполнять. даже сейчас кстати по работе встречаются задачи когда надо юзать голый пхп тк средств цмски той же не хватает. а по поводу магенты2 - потому что тупо нихуя не понятно. это пиздец какой-то. я в первые структуру увидел и выпал. уровень битрикса блять. дока какая то хуевая. какие то phtml расширения которые как я понял как раз отвечают за вьюху ? везде эти ебучие xml'ки. пиздец кароче магенто2-кун
>>1923501 да, магента мрачный жесткач, очень дохрена всего наворотили, чтобы "максимально мощный функционал был". Получился блять реально трактор, собранный из велосипедов. Там за один день хрен разберешься реально. И да, xml бесит реально, так как то, что по идее должно быть в базе, вынесли в файлы типа для "облегчения работы" юзерам и админам. Причем, даже не json, потому что извращенцы блин. Я когда разобрался, посносил их нахрен и заменил таблцами постгресса, урезав часть ненужного функционала. Но нервов и времени убил массу. В процессе я потом все таки собрал заказчику свой движок, и импортировал базу в него. Слишком уж дохера там всего ненужного и лишнего всобачено, и интерфейс пизданутый на выходе по своей тяжести.
>>1923511 во во. сейчас пытаюсь только завести его. окружение настроить надо + поебстись с бд. я в ахуе просто целый день на это убил. и то только для того чтобы внятно сюда эластик поставить. скучаю по докеру.
>>1923341 Долгое время писал проекты на ларавел. Думаю, имеет ли смысл перекатываться на симфони. Хотел поинтересоваться как обстоят дела с работой на симфе (удаленка) и зарплатами? Судя по хх примерно 1к1 в сравнении с ларой Судя по хабразарплатам на симфе денег больше, правда хз из-за чего Есть ли фриланс на симфони или это скорее исключение?
И что обычно спрашивают на собесах и ждут от условного мидла симфониста?
>>1923501 Из задачек на собесах были всякие физ-базы и простенькие алгоритмы (сортировка, списки, матрицы). По теории часто спрашивают ООП и СОЛИД. Это надо прям чтоб от зубов. К ним еще пол десятка паттернов проектирования назвать и пару примеров привести.
Больше всего не люблю, когда дрючат кишками бд, когда я с ними только на уровне орм в основном общаюсь.
>>1923574 >солид на зубок это нахуя? вообще никогда не понимал >К ним еще пол десятка паттернов проектирования и это тоже надо если хочешь получать 50к ? )))
>>1923599 Это для мидлов и джуниоров легенды. А для сеньоров здравый смысл и банальная повседневность. Тоже жестко топлю за солид-стандарты всегда, ибо без них жопа потом полная наступает. хотя, это важно если вы сами проект от а до я делаете. С собственными фреймворками, в нативе. А для ларавельщиков и принеси-подайщиков это нафиг не надо, т.к. у них и так коридор возможностей еще уже, чем солид-стандарты.
Читаю PHP 7 в подлиннике. Около 1000 страниц. Остановился пока на генераторах, и уже прямо дохуя инфы в голову поступает. Часто приходится возвращаться к некоторым темам (особенно функции). Иногда даются нетривиальные примеры, по типу функции dumper. Норм книжка или нет?
>>1923641 Нет. Просто ларка продвинутее и новее симфы, и когда новички все тотально юзают ларку, потому что она новее и перспективнее, то на старых проектах симфы с кадрами напряг, и все.
"Кривонаписанность" и глючность не делает из фреймворка резко джаву, а более менее понятный интерфейс не делает из него же примитивщину. То есть - один хер и то и другое. Но на симфе меньше народа пишет, потому что он - говно если честно, и сосет у ларавела. А проектов на симфе осталась гора - поэтому асинезаторы, вынужденные в этом говне ковыряться, зарабатывают больше, чем те кто в ларке хуи пинает без особого напряга.
>>1923752 Норм, но сейчас учатся не так. Пролистай общие принципы, самые общие, посылай нахер все непонятности и забивай, заверши ознакомление как можно скорей. Затем возьми минимальный хорошо структурированный рабочий проект любой, изучи его, поставь на хостинг как демо-полигон, умеющий блять все, и принимайся за заказы. Если возникнут вопросы по ходу - тебе полюбому примеры и задачки из учебника не помогут. Ток гугл и стаковерфлоу. применяешь на своем шаблоне и реализуешь. Сразу как сеньор, посылая всех нахер, поскольку у тебя есть готовый собственный сложный проект-модель, типа того. А лучше штук пять таких, да штук десять лотов на кодекайон поставить в продажу. Только так. Это лучше, чем тратить вагоны времени на бесполезное штудирование учебников, чтобы потом заниматься вообще хер знает чем как сраный мидл или джуниор. Чтобы общаться напрямую с кабанчиками и по своему бюджету работать, а не через три пизды и третьего-пятого менеджера айти по разработке шестого отдела логов и кеширования хз пойми чего с доступом только по хп и зряплатой долбоеба. Ну это так, мое мнение, сорри если кого задел.
>>1923795 Почему тогда недавно здеся местный анон назвал Ларавел колхозом и призывал учить Симфони? Честно говоря, он звучал убедительно. Не помню, какие он аргументы приводил в пользу Симфони.
>>1923841 >>1923845 Потому что симфони сложнее и требует так или иначе знать натив, без которого тупо не вкатишься. А ларавел тупо конструктор, даже дурак справится, ну и никто особо не растет на нем, поскольку как оно работает и что там внутри нихера не нужно знать - работает и хер с ним. Хотя по сути, лара даже продвинутее симфы, именно простота ее освоения и позволяет макакам считать себя прогерами.
Таким образом да, симфони прокачает, так как чтобы ее освоить надо посообразительнее макаки быть, а зенд тогда еще круче прокачает. Но опять таки, если по чесноку, для того кто шарит в нативном пхп это две абсолютно однохуйственные по сути вещи.
>>1923920 Чел, я хз что тебе больше нравится. Ну как пример попроще https://codecanyon.net/item/premium-media-script/9324018 - если найдешь варез то поставь, а нет, так и купи для интереса - я купил, не нищий, хуле - посмотри что и как работает, поковыряй, добавь свои свистелки и перделки, попробуй поподключать другие бд, поставить доп плюшки на сервер, и т.д. и т.п. Таких штук пять скриптов, написанных на хорошем пхп с соблюдением solid-стандарта расковыряешь - научишься в миллион раз большему, чем по всяким книжкам и т.п.
>>1923932 >>1923920 И да, продукты от KBRmedia как правило написаны на хорошем пхп, но не без глюков и всегда есть что улучшать внутри. По мне, так самое то учиться нативному пхп именно на таких скриптах. И только когда разберешься и сам сможешь на коленке воспроизвести тот же уровень или лучше, имхо, следует лезть в освление фреймворков типа зенда, симфы, лары. И кстати, в качестве вспоможения неплохо найти попутно кабанчика, который хочет типа "собственный типа ютуб, или в этом духе что нибудь" и готов за это забашлять. Когда все оплачено наперед, учиться оно приятнее и веселее. :)
>>1923933 Сорри, поищите плиз, если кто спер этот скрипт до меня. На варезах должен быть. Мне как бы никомильфо красть у благодетелей, прошу меня понять. Тем более я уверен, что до меня уже украли.
>>1923932 >>1923944 Лол, помню, попалась на фрилансе задачка поскрапить какой-то список хуиток с привзякой к карте. Ну а там лимит на количество результатов и максимальный радиус в пару километров, короче, надо ебаться с брутфорсом параметров для поиска. Ну я погуглил этот скрипт, а он там продается и гуляет уже спижженый. Внутри совершенно через жопу всё, на вид середина нулевых, а всё торгуют и причем покупают. Ну я за пару минут нашел инъекцию и получил всё сразу, лол.
>>1923943 >>Когда все оплачено наперед, учиться оно приятнее и веселее. :) Это немного не так. Когджа заплачено - пиздато делать быстро и правильно. А учиться, особенно когда заказчик который уже "оплачено" постоянно докидывает "а давайте сюда чет добавим" - так себе. Помимо изучения прогинга сразу приходится решать и кучу других вопросов. Прокачиваешься как сам себе кабанчик. Но это тяжело, рили тяжело. Я сейчас в подобной ситуаци.
Кстати вопрос - мне нужно в елоквенте составить запрос такого плана: у модели есть свойство "платно" и свойство "бесплатно". Модель должна доставаться из БД когда: "платно" или "бесплатно" больше 0, но если и "платно" и "бесплатно" равны нолю - то доставаться данные не должны
Мне 33, и я не то что бы вкатывальщик, вышка профильная, в ВУЗе прогал, но потом долго (8 лет) сисадмином работал деградировал. Заебало. Фактически начинал с ноля. И вот уже три года работая прогером в гос-шараге ( за три копейки ) я типа вкатываюсь в коммерческую разработку. Хочу сказать что наступил на все возможные грабли похоже, лол. Ну и да, процентов 80% доступного времени за эти год я пинал хуй. Из чего следует что важна личность человека. Что бы вкотиться я думаю есть два варианта. Первый - программить лет с 15, и быть психологически и поведенчески кривым и косым, но опыт задротства решает. Второй - полностью нахуй переработать свои привычки и поведение, развить волю, дисциплину, решительность. Я за 4 года нихуя не смог, все делаю долго и на отъебись. Кривое поделие на слим с кривой архитектурой и ORM елоквент в качестве БД слоя, и кривые самопальные классы JS и компонетны реакт собранные вэбпаком на фронте - мой потолок, все кривое косое и работает через пизду. Весь явнарь хуй пинал, при этом имею заказ который имеет не закрытые таски. Вот такой вот средний вкатывальщик за 30. Не будте такими как я. Думаю что большинство вкатывальщикв такие же далбоебы как я.
замечу что и в жизни у меня все так же на отъебись
>>1924135 п.с. добавлю что орд вкатывальщиков старше лет 27 врядли стоит ждать, психика и привычки формируются плотно, и их изменить пиздец как сложно. Если чел -неорганизованный еблан - то с 90% вероятностью таким и будет до конца жизни. Я врал себе что я типа на дисциплине, иногда так и было. Но пропинав хуй весь январь я понял что хуй, я все тот же деградирующий сисадмин. Печаль ебаная.
>>1924135 >Кривое поделие на слим с кривой архитектурой и ORM елоквент в качестве БД слоя, и кривые самопальные классы JS и компонетны реакт собранные вэбпаком на фронте - мой потолок, все кривое косое и работает через пизду Описал средний говнопроект на галере.
>>1924082 >постоянно докидывает "а давайте сюда чет добавим" В таких случаях принято оставлять эти добавки после основных работ. Т.е. есть обговорённый и оцененный функционал - он и делается в текущий момент, а всё, что сверху - уже потом. Иначе рили тяжело будет всё сразу делать и оценивать. Кабанчику-то похуй - у него фантазия пошла фантанировать, а ты закапываешься.
>>1924157 Это тонкий намек на то, что ты как-то слишком идеализируешь код работающих разрабов. Редко где можно встретить качественный код. В основном такие же васяны пишут подобный говнопроект с нуля. Потом нанимают еще пачку васянов допиливать этот проект. Исключительной удачей будет, если среди нанятых васянов окажется прошаренный чел, который построит остальных васянов, не даст им больше срать в код и потихоньку вытащит проект из говен.
Думаю, ты вполне можешь на удаленке получать соточку
>>1924166 >слишком идеализируешь код работающих разрабов Себя вспомнил - как тоже всё хотел чтобы было чистенько и красиво, как по нотам, короче. Потом пришлось поработать на реальных работающих проектах и у меня эту детскую дурь из головы быстро вынесло. Если писать красиво и идеально - результатов внуки только дождутся.
>>1924084 А я знал, что нечто такое обязательно всплывет :) Обязательно какой нибудь особо современный начнет интересоваться. Есть такие, которые считают что ларавел это правильный пхп, Ну а конструкт2 это js. А Unity это C++. Потому что "есть современные стандарты и библиотеки, и не нужны велосипеды, ибо будет несовместимость, немасштабируемость, уязвимости, а главное скорость разработки современного продукта" и т.п. Как китайцы, которые собирают авто на конвеере из присланных им деталей, которые спроектированы немцами. Собрать, а не создать. По инструкции, а не с пониманием. Могу только пожелать вам успехов, коллеги. С китайцами так и надо. Пока делаете пустую демку типа "хелло ворд" в самой современном фреймворке и продвинутой идешке с весом в пол гига подключенных через композер кодов, папок и библиотек,не понимая для чего они нужны (не нужны) и получаете по итогам вылетевшую кодировку, у меня всегда будет работа. А если серьезно, то я просто указал, на каких примерах вкатываться в пхп, чтобы знать минимальные основы построения приложений, необходимое как раз для того, чтобы вам было плевать, какие фреймворки или кмс использовать, так как сами они построены на тех же принципах.
>>1924082 >Кстати вопрос - мне... Вот почему я и говорил, что лара зло. По существу, логика условия должна быть вне oem, просто в методе класса. Если условие 1 оем выполняется или не выполняется если условие 2. Внутри самой оем никаких иных логик, кроме реализации запросов бд быть в принципе не должно. Поэтому сам вопрос как минимум непонятен, но увы, типичен. Если бы у вас была практика создания кастомных бд классов на нативном пхп прошлого века, то таких вопросов не возникало бы в принципе, поскольку логика в елоквенте нарушает принципы единой ответственности. Ну это так, к слову.
>>1924082 >у модели есть свойство "платно" и свойство "бесплатно" >должна доставаться из БД когда: "платно" или "бесплатно" больше 0 А если "бесплатно" больше 0, то продавец ещё и доплачивает что-ли за покупку дайте мне этого продавца сюда - я миллионером стану? У тебя тут с логикой какие-то траблы кажется. Бесплатно это когда "price" == 0. Тогда и достаётся из БД элементарно всё.
>>1924269 >фреймворки или кмс использовать, так как сами они построены на тех же принципах Фреймворк и cms это несколько разные уровни. Х.з. как ты всё в одну кучу валишь. Сдаётся мне, что на фреймах ты не работал ни разу и не догоняешь, что они для разных типов разработки используются.
>>1924290 >практика создания кастомных бд классов на нативном пхп прошлого века У Лары очень даже годная библиотека для работы с БД, как и подходы.
>логика в елоквенте нарушает принципы единой ответственности В твоих CMSках это всё ещё хуже реализовано чаще всего. Гораздо, гораздо хуже.
>>1924317 >тно" больше 0, то продавец ещё и доплачивает что-ли за покупку дайте мне этого продавца сюда - я миллионером стану? У тебя тут с логикой какие-то траблы кажется. Кстати, хоть и хохма это, но такие продавцы есть :))) Так что имхо не важно тут - может это булевый нуль, я хз как там все в ларавеле, но именно в том и засада двойственности - с одной стороны готовые фреймворки как бы содержат в себе надежные и проверенные решения высокого уровня, так что даже макака, почитав мануал может более менее легко разобраться что и как делать. даже без особого знания корневого нативного языка и соображалки по части алгоритмов. По итогам получается как будто бы быстро и добротно сделанный проект, и юное хвостатое дарование сияет от собственной невьебенности. Дескать, во какой проект слепило. Но на деле - это чужой проект, и слепили его те же, кто слепил ларавел, а ты только сделал тюнинг по инструкции из запчастей, не особо разбираясь в сути. Но это как правило только начало. Макак много, они все разные, и все хотят как можно больше всяких функционалов, свистелок и перделок, подключений к херовой туче саасок и т.п.. По итогам система развивается, и народ ее активно хвалит, но мануалы становятся все сложнее и сложнее, подключаемых висюлек и пиздюлек типа плагинов становится настолько много, что хер разберешь, плюс к каждому из них свой мануал, который пока изучишь, фреймворк снова устареет. А потом выдут новые релизы постгресса или, пхп, всплывет куча деприкатов, и - правильно, опять курить раздутые мануалы, юзать сырые бета-версии обновлений, все работает по итогу черти как и хер знает как, и умельцы дабы исправить положение втыкают костыли и патчи, написанные на скорую руку и через жопу, и так далее. По итогам пятистраничный сайт администрирует сорок прогеров, которые 90 процентов времени читают мануалы к аддонам к патчам, которые к плагинам, которые для такой-то версии, которая скоро депрекатед потому что выйдет следующая более современная. О каком нативном пхп может идти тут речь, если по мануалу можно собрать сразу мегапортал с блекджеком и шлюхами, тупо нажав с десяток кнопок типа "сделать песдато" и "подключить звезду смерти с музыкой и сканером сетчатки к иконке sucks". Как итог, господа рубисты, пхпшники, сишники и джавошники с печалью, но не без злорадства наблюдают, в какой пиздец превращается индустрия, потирая ручки в предвкушении удовольствия от военно спортивных разьебов всей этой хуйни, так как прекрасно видят аналогию с инженерной революцией прошлого века. Когда начав с азов и основ, инженеры от проектирования паровозов смогли дойти до создания космических кораблей, но зумеры тех лет решили, что это не эффективно, и гораздо быстрее использовать "наработки из коробки" - по итогам, когда то США построило во время войны за два года боле 5000 военных кораблей самого современного на тот момент уровня, а теперь они тратят миллиарды, но уже больше четырех лет не могут тупо даже починить два корабля, которые были построены еще в 70х, просто потому что "умники" рвали жопу на продвинутых технологиях конструирования из коробки. Которые как бы быстрее, мощнее и проще, и которые даже макаки освоят. Вот и дорвались - просрали фундаментальные знания основ, потеряли специалистов, которые специально были заточены на то, чтобы из говна и песка делать инженерные шедевры, которые просто перестали воспроизводиться, а теперь сидят и тыкву чешут, типа - какого хера все падает и не работает? В мануалах же написано все верно должно быть, ан нет - не работает нихера. Потому что понимания того, как и почему работает - не было и нет. Есть тупо заученные мануалы. И что самое интересное - эти мануалы в миллион раз уже сложнее и запутаннее, чем основные принципы, лежащие в их основе, которые просто следовало бы освоить. Но - нет. Это медленно, неэффективно, там нет кнопки "сделать песдато", там из коробки нихрена нет, и за это скорее всего платить не будут. Шикарно в общем. Поэтому и делают сегодня программисты в десять раз больше работы, скачивая патчи и обновления, юзая косячные оемки типа елоквента и куря мануалы, как тут >>1924273, вместо того, чтобы один раз почитать мануал по бд и создать метод в три строки, который просто выполнит произвольный query через PDO. Но - для этого надо знать как работают бд! А в елоквенте пофигу, поэтому все быстрее и проще - возразят мне. И хуй что возразишь. Но по итогам - "ускорение" программирование получается "в отрицательную сторону", так как необходимость курить все новые и новые мануалы и делать новые и новые патчи, да потом еще совещаться на консилиумах несколько дней на тему "допустимо ли использовать обработку массивов средствами пхп, или необходимо преобразовать все обработчики в методы, а массивы в объекты?". Как итог, народ вешает потом эластик на постгресс, причем блять через плагин вордпресса, и когда мы начинаем истерично ржать, с удивлением спрашивает "не, ну а чо такого?"..
>>1924332 Дело не в том, как там что реализовано, а в том, способен ли ты сам реализовать что нибудь хотя бы на этом уровне, или без фреймворка даже формы обратной связи собрать не в состоянии. Потому что миллион таких уже случаев, когда чел типа собирает мега-проект, но вот суко передвинуть кнопку в футере на два пиксела вправо - не в состоянии от слова совсем. Не говоря уже о каких либо нестандартных задачах. По мануалам - не учатся, старик.
>>1924377 могу реализовать некоторые вещи только на пыхе, без фрейма. но есть вещи которые могу реализовать и там и там. это ок? >но вот суко передвинуть кнопку в футере на два пиксела вправо а знаешь почему так ? потому что там блять в проекте насрато так что как не срали даже в индийские помойки да-да, именно сральники, а не проекты как ты мог подумать. и вот ты блять иди ищи по эти шаблонам и лазь по 30 папкам чтобы найти тот css файл который у тя подключается. помню в декабре была ситуация где нахуй были следующие файлы в папке моей темы которые подключает битрикс: style.css, styles.css, _style.css, _styles.css. и угадай где из них была разметка для навбара? ВООБЩЕ НАХУЙ В ДРУГОМ СОВЕРШЕННО ШАБЛОНЕ ОТ ДРУГОГО БЛЯТЬ САЙТА. вроде бы таска плевая, на хуй там, из за такого говна встречаешь на два часа для того чтобы просто найти
>>1924367 Порвало нафиг. Своего рода жизненный путь какого нибудь миддла, который постоянно был вынужден менять работу и так толком и не понял, чем же ему заняться, запомнил только заголовки. Печальный и трудный путь. Судя по всему написано по примеру мануалов - бестолково, непонятно, неюзабельно, но внушает ужас и уважение окружающим. Такие слова умные прям пипец. Вордпресс, хететепе-хедер. Расшифрую, примерно, чтобы поняли глубину маразма. Пишем - хирург - роудмап. Потом рисуем квадратики и от балды пишем внутри них термины. Типа - регистратура - карточка - бахилы - санитария - мыло перевязочные материалы - клизма - кровотечение - термометр - аутоимунное - наркоз - солутан - примочка - пинцет - тахикардия - ухо-горло-нос - нога-жопа-кариес - анамнез - зеленка - пальпация вульвы - гидроцефал - мошонка - минздрав - анальгин - сыпь - опорожнение судна - десна - кварцевание - залысины - эпикантус копенгагенская декларация - воспаление блуждающего нерва - пигментация ногтей - лазерная терапия - профилактика копрофагии методом черветерапии - монокль. Ну, примерно так это бы выглядело. Наглость и бесстыдство прогеров, особенно тех, которые в двадцать втором веке душой и телом, не имеет никаких пределов. А хуле делать. Такова селяви.
>>1924419 Именно. Вот поэтому и есть стандарты - где стили должны лежать, где скрипты, как должны быть написаны и оформлены. За это собственно и ебут миддлов, особенно симпатичных. Поэтому я как правило просто смотрю на такой проект, и если там насрано - сношу к ебанной матери и делаю с нуля ракетой. Иначе потом не разгребешься.
>>1924375 Чем чтение мануалов для фреймворка отличается от чтения оного для CMS? Актуальных фреймворков на тот же ПХП в разы меньше чем велосипедных CMS и реализованы они плюс-минус одинаково. К тому же не бонусом идёт понимание правильной архитектуры приложения, что в ЦМС зачастую вообще не так. Да и код на фреймах хорошо документирован через php-doc и комментарии. Не вижу проблемы.
Имел дело и с теми и с другими и моё мнение таково, что фреймворками пользуются именно программисты, а ЦМСками чаще всего вебмастеры\верстальщики.
На чистом ПХП сегодня писать можно, но лучше не стоит - более-менее большой проект ты будешь на нём делать до седых мудей. А потом править свои баги столько же. А если ещё и без знания архитектуры, то вообще пиздос зароешься с копытами.
Но начинать и правда обязательно с чистого ПХП, иначе макака и дурачок с гранатой.
>>1924419 >могу реализовать некоторые вещи только на пыхе, без фрейма. но есть вещи которые могу реализовать и там и там. это ок? Естественно. Я о тех, которым "пыха не нужна вааще", так как "в ларавеле все есть". Типа игроделов, которые работают в Юнити без малейшей попытки вката в си++ - то есть обреченные на убой.
>>1924432 >Естественно. Я о тех, которым "пыха не нужна вааще", так как "в ларавеле все есть". курсодебилы, хуле с них взять. нассали в уши что вот выучите все побыстренькому за 3 месяца и будете крутыми спецами с зп в 100к >Типа игроделов, которые работают в Юнити без малейшей попытки вката в си++ так там же с# нужен. чому кресты то ?
>>1924447 >там же с# нужен. чому кресты то ? угу. скрипты там на c#, а сам юнити на крестах, прикинь :) но да, тут я признаю что перетолстил сильно, т.к. такой уровень закапывания уже для ярых олдов.
И кстати да - тоже по той же схеме роудмапа пхп - не понял сперва, что каждый их квадратик это типа отдельный обучающий курс или его компоненты. Походу да, комерсы инфоцыгане портят все.
>>1924487 Что такого спрашивают на собесах за 50к? Там же главное, чтобы собеседуемый в штаны не насрал и как зовут не забыл. Не понимаю, напиши плиз, что спрашивают. Мне аж иетересно стало.
>>1924505 ну вот я ищу галеру на ларке/симфонии которые работают. про фреймворки вообще ниче не спрашивают. в основном по теории, ооп, про язык, про бд иногда. все. в принципе ниче сложного и все посильно. адекватно и правильно отвечаешь и в итоге мы вам перезвоним. хуй знает че им не нравится лол. бывают оч редко специфичные вопросы чтобы загасить это вот прямо сразу видно т.к. никто никогда такое не спрашивает а тут решили спросить но это скорее исключение чем правило. если только из за этого. одни напрямую сказали что вот у вас с теорией и практикой все ок, но мы вам откажем потому что у вас опыт широкий, а не глубокий. как то так. другие просто молча слились. вот ждем сегодня завтра ответа от еще одних
>>1924505 а, ну и мб это у вас в ваших дсах ниче не спрашивают. в замкадьях тя за каждую копейку выдрачивают видимо. проверю завтра эту теорию, собес будет с какой то галерой с дс2. >>1924546 - кун
>>1924546 >у вас опыт широкий, а не глубокий Если ответили таким образом - значит считают, что знаешь только по верхам. У тебя есть проекты на фремворках с композером? Не хелловорлды с туториалов, а свои какие? Юнит-тесты умеешь, гит как? Они твой код смотрели?
А вообще сливаться после удачного собеса - обычное дело у херочек, привыкай. Хоть сайт пиши с отзывами по таким конторам - чтоб люди время не теряли.
>>1924580 так я и ищу удаленку. в нашем задрищенске 700к 2 конторы работают с таким стеком. все остальные на всяких битриксах, вп, и тп скаме >У тебя есть проекты на фремворках с композером? конечно есть. один просто бложик по классике который открытый и я показать могу. но там прямо вообще самая база. и есть другой проект, там уже полноценный проект, но он закрытый, показать не могу. вот там то уже все по взрослому а что в гите именно знать то надо? а то везде пишут знания гита. и что это имеется в виду? простые пуш/пул команды? или знания правил ведения разработки при работе с гитом? я лично считаю что последнее. >А вообще сливаться после удачного собеса - обычное дело у херочек, привыкай а нахуя так собсно делать? че за бред? при том вот меня послали полгода назад они же хотя все было ок, и сейчас допустим заново работу ищу. и они меня не зовут хотя косяк то с их стороны >Хоть сайт пиши с отзывами по таким конторам - чтоб люди время не теряли. Годная идея. мб намучу такое когда буду Vue изучать
>>1924589 >а нахуя так собсно делать? че за бред? Мониторят рыночек - если много прокачанных джунов, то можно зряплаты понизить например. А если хороший мидл-дурак пойдёт на зарплату джуна, то его даже можно взять. Им, один хуй, делать нечего больше - так хоть какая-то деятельность. Да и начальники работу требуют, а не сидения вконтактике весь день. Такая вот симуляция деятельности за чужой счёт. На наше с тобой время им глубоко насрать.
>>1924491 Со смазкой и лаской, аккуратно сзади) Я бы начал потихоньку в сторону Лары переписывать, чтобы в один прекрасный день от Легаси ничего не осталось, этакая каша из топора
>>1924708 Если у тебя на работе это единственный ответ в таком случае, то и правда - нечего там делать. Ну или оценивай перенос многолетних проектов за неделю, а потом в мыле весь обсирайся со сроками и нагрузкой, и точно так же вылетай с работы.
>>1924748 Мы вам за что 120 тысяч платим? А если серьёзно, то про перенос там ни единого слова не было. Анон так и будет ковырять легаси код. Не думаю, что его взяли на работу, чтобы с yii на лару переносить.
Решил сделать сайт с рецептами блюд. Набросал тут пикрил схему для базы данных. Красным выделил индексы. Так как до этого мне не приходилось делать так много таблиц с разными отношениями, вангую что мог где-то проебаться. Не прокомментируете, норм или нет? Вроде бы все должно быть понятно, но на всякий случай уточню: - Пользователи создают рецепты. - Пользователи могут добавлять рецепты в избранное - Пользователи могут присваивать чужим рецептам оценку от 1 до 5. Средняя оценка будет выводиться на странице рецепта - У рецептов, помимо указанных колонок, есть шаги приготовления ( таблица steps ). Их количество неограниченно.
>>1924866 хотя по любому, таблицы категории и рейтинг лишние, так как это свойства рецептов. они только мешать будут, разве что только в качестве справочников, если постгрес
>>1924609 >На наше с тобой время им глубоко насрать. Это точно. Были люди которые 4 раза собес блять переносили. После этого нахуй их послал. Хотя околотоп контора нашего задрищенска была.
>>1924928 На галеру надо идти, где будет собеседовать главный разраб, а не с хрюшами в офисах болтать. У хрюш работа состоит: - База программистов, чем больше, тем лучше. Потому они её собирают. - Палочная система. Чем больше позовут на собесы - тем больше зп. - Спам. Рассылают всем приглашения на собес, чем больше спама, тем выше зп.
95% офисных вакансий в айти - липовые. А на галере если срочно нужен разраб - сегодня же уже ищут и берут первого адекватного.
>>1924947 >95% офисных вакансий в айти - липовые. А на галере если срочно нужен разраб - сегодня же уже ищут и берут первого адекватного. это откуда такая инфа? справедливости ради среди них есть и адекваты. помню летом звали на сеньора в какую то литовскую или латвийскую компанию за 3к евро. я честно сказал что не подойду туда в виду своего низкого опыта и знаний но если ей надо набить базу и количество то могу уделить время и прийти. она в итоге извинилась, сказала что все ок и не надо и слилась.
Мне постоянно пишут с предложением пройти собес на симфони, хотя в резюме указана лара. Когда говорю им об этом, то начинают уговаривать. Некоторых даже в чс кидал, особо не пробиваемых.
>>1924678 Как чуть позднее выяснил. Часть функционала они перенесли в отдельные вендорные модули примерно 200к строк. Видимо хотят до конца легаси распилить. На всякий случай и лида спросил что они хотят с этим проектом сделать в конце концов.
>>1924755 >взяли на работу, чтобы с yii на лару переносить На собесе речь была про это. А как оно обернется хз. В целом конечно интересно с такой легаси ебой поработать. Если освоюсь - другие легаси проекты покажутся изичными.
>>1925073 да какой с нуля? год греб на всяких говноцмс это магенто2 кун если что со всякого разного рода говнотасками. летом заебало и понял что надо качать фреймворк. начал ларку освоивать. вот делал свои проектики, + тестовые. пытался срулить в сентябре - не вышло, зато набрался опыта. осенью еще теории поднатаскал, к дкабрю свои проекты закончил и отшлифовал. в середине ноября начал искать работу. как то так
>>1924874 Постгрес. А какая разница принципиальная? Раньше его не юзал. >>1924875 Почему категории лишние? Как мне иначе дерево из них составить? Насчет рейтинга, сначала я думал хранить в рецепте средний рейтинг и количество проголосовавших. Но ведь тогда один пользователь сможет хоть сотню раз проголосовать за тот же рецепт, да и оценки своей увидеть не сможет.
>>1924875 И еще. Даже если бы категории были бы не древовидными, они ведь повторяются. Предлагаешь енамы юзать или вообще варчары для обозначения категорий? Это же всрато, разве нет?
>>1925086 Все равно неплохо, через пол годика можешь следующую работку искать, если зп не апнут. Эх была бы конфочка с двачерами пхпшниками, в которой бы обсуждали зпшки, собесы и галлеры, то было бы проще. Знаю одну конфу с жсниками, где помогают и не токсят,но на жс переписываться желания пока нету.
>>1925118 я тоже про это думал. мне вот интересно как там в этих ваших дсах? там же в каждой конторе наверное как минимум по одному двачеру сидит. и многие из них вышли из этого треда
>>1925118 >Эх была бы конфочка с двачерами пхпшниками Тоже хочется. Когда-то давно создавал такую для вкатунов. По началу было поровну на фронт и бек. Сейчас там доминирует фронт реакт. Ливнул оттуда в итоге.
>>1925157 >Почему бы не попробовать сделать, если есть уже опыт? Морально устал конфы держать. Сейчас еще с работой траблы. Да и не знаю каналов для привлечения людей. Из треда придет максимум 1.5 тела и всё на этом.
>>1925118 >Эх была бы конфочка с двачерами пхпшниками Бля, вы за 121 тред не смогли запилить конфу в телеге? Как вы тут вкатываетесь вообще? Пиздос, я думал уже давно есть.
>>1917984 Таджичу за 100к на удаленочке на пхп, мне норм, учитывая, что работы на пару часов в день и такого соотношения работы к оплате ты хуй найдешь в моей днищесранске. Плюс если припичет, как выше писали, вполне можно расширить своей стек (до размеров ануса твоей мамки) и перекатиться на еще более сладкие условия.
А вот если я фуллстек-спец аппер-мидл левела, который спокойно может в одно рыло (опционально нанять двух-трех дурачков в помощь) с небольшой помощью гугла клепать интернет-магазины и прочие широко распространенные на рынке пыха-продукты, но при этом продолжаю работать на дядю за мягко говоря не супер-большое бабло, я сильно дебил?
Сначала сломал локально репу хаотичным обновлением веток и запуском make команд. А теперь впн лежит и не могу заного скачать чистую репу из гитлаба. Охуенно день проходит.
>>1925344 Коммерческого - 7 лет, а так сайтики на хтмл первые простейшие в 12 лет делал, а после стал с кодингом разбраться, так это получается уже 17 лет прошло.
>>1925344 >>1925372 Но я очень ленив и неамбициозен, поэтому такой слабый результат. Чуваки, которые меня в универе просили помочь с кодингом и были на голову слабее меня, сейчас например кто в Германии, кто в США уже пашут за серьезные деньги.
>>1925407 Допустим в таблице учеток у тебя два поля: логин и имейл. Сначала ищешь по логину, потом по имейлу. Если ни то, ни другое не нашел - посылаешь юзера. Самый простой вариант
>>1925272 >что работы на пару часов в день Это как? На проде вечно ломается, нужно закрывать таски, лить, быть на связи, делать ревью. Чем старше разработчик, тем больше ответственности, особенно на удалёнке.
Какой ОСью пользуетесь для кодинга? Седня чет виндовый всл2 мне знатно в штаны насрал. Вчера всё работало, проект через мейк с докером развернулся. А седня баг на баге, так и не поставил заново проект. Думаю убунту накатить второй осью.
Скрин из ларакаста по отношению Many to Many. Это так и должно быть, что для промежуточной таблицы не делается отдельная миграция? Возможно он где-то об этом говорит, но я просто сейчас без звука, а в документации тема не раскрыта.
>>1925519 >На проде вечно ломается Ну да, раз в неделю где-то приходят оттуда таски ворохом >нужно закрывать таски За пару часов закрываю на день-два вперед. >быть на связи Я на связи, капчую сижу, только параллельно в игоры играю, кино смотрю. >Чем старше разработчик, тем больше ответственности, особенно на удалёнке. Так поэтому и 100к, что я не старший и не стремлюсь в менеджмент, с другой стороны головняка минимум, что мне и нравится.
>>1925574 Какие же двачеры дегенераты, господи. >>1925576 >Ну сделай отдельной миграцией. Спасибо что разрешил, но я просто поинтересовался, как люди делают на практике.
Есть один стрим на ютубе. Как из скрипта можно сделать скриншот стрима? Я думал через какой-нибудь headless браузер, но может есть какой-то клиент ютуба на php или еще что-то.
>>1925572 Бля, как смешно выглядит Ларавель по сравнению с Симфони. В симфони в консоли(в мэйкере) прям пишешь название поля и вбиваешь название к какой таблице приджойнить. Занимает 5 секунд и миграции тебе сгерерит.
>>1925779 Да если б wsl мозги не ебал. Так то до этого 2 года на винде работал и на пхп и на голанге и всё ок было кроме одного случая когда долго ебался с установкой одного расширения в пхп, а проект был не под докером
Это норм схема БД для интернет-магазина? А то я гуглю и везде они, сцуко, разные. Казалось бы, задача-то одна. Но нет, нихрена, каждый лепит, кто во что горазд.
>>1924863 Хоть всем и похуй, но я решил что для заметок и оценок нужно добавить автоинкремент и сделать из них элоквентовские модели/сущности. Хрен знает, правильно ли это.
>>1925897 Так оно и понятно, почему везде разные схемы - требования и функционал везде разные. А почему бы с нуля не запилить и добавлять миграциями необходимые таблицы и поля?
>>1925921 Надо же с чего-то начинать. Лучше сразу представлять, как оно всё будет выглядеть. Понятно, что в процессе будет доработка, но всё же. Да и мне на самом деле накласть на доработки - это просто проект для гитхаба, чтобы было куда посылать на вопрос "а покажите ваш пример кода".
>>1926049 Это часть url. Обычно генерируемая. Например, ты создаёшь страницу товара "Сталин-3000" и она доступна по адресу xxx.ru/products/stalin-3000. "stalin-3000" - это и есть слаг.
Поебался еще немного с всл. Так и не завел проект. То одна ошибка выскакивает, то другая. Пробовал разворачивать проект на в смонтированном диске (вместо /mnt/c/ в ~/ директории) - установка прошла чуть дальше, потом меня послали из-за прав. А с судо мейк вообще не работает.
По ходу совсем не остается вариантов кроме накатывания убунты второй осью. Если и там будут неразрешимые проблемы - минус работа... А так хотелось поучаствовать в крупном проекте...
какой подход популярнее, $user = new User("Вова", "Пупкин"); echo $user -> show_name(); или $user = new User(); echo $user -> show_name("Вова", "Пупкин"); ?
>>1926364 >echo $user -> show_name("Вова", "Пупкин"); Это че вообще? Что значит какой подход популярнее? Второй вариант не несет в себе смысла. Таким образом имеем не метод показа имени, а обычный принт/эхо на два поля.
Ну и >echo $user -> show_name(); явно избыточно
Уж лучше делай $user->printName(); и внутри печатай куда надо Либо $user->getFullName(); который вернет строку
>>1926394 Да ты шо? А если у тебя будет 30 полей? $user = new User('asd', asdad, asdasd, asd asd,,asd aadas, asdas ,,sadas dasd,a dasd as,asd asd ,asd asd as,asd asd a,as das ) Будет анти-паттерн телескоп.
Делай как я. Почитай что такое сущность, в сущности нельзя в конструкторы пихать. Сущность должна быть пустой при создании объекта. Дальше если ты хочешь параметры вложить - делай это через фабрику, и вот в фабрику можешь уже положить что хочешь. Либо в конструктор, либо в параметры метода а-ля build(array $params)
Второй пример неудачный, так как у объекта обычно есть свойства, которые хранятся внутри объекта. И show_name() берет имя из свойств объекта. А у тебя во втором примере зачем-то имя передается снаружи. Зачем тебе такой объект вообще, если ты в нем ничего не хранишь?
Судя по описанию, твоя проблема в плохом знании линуксов. Так как те же проблемы с правами скорее всего как-то решаются (сменой прав, использованием sudo и тд).
Для гитхаба лучше сделать что-нибудь попроще. Так как нормальный магазин потребует много времени на разработку. Вот там анон делает сайт с рецептами - это более подходящий уровень для сайта для портфолио.
Хотя, если бы ты хотел поглубюже разобраться в фреймворках, ORM, базах данных, то конечно более сложная задача создания магазина подошла бы лучше.
Только пароли надо солить и хешировать, потому проверка будет чуть сложнее. Сначала извлекаем из БД хеш пароля по условию name = :login OR email = :login, затем проверяем пароль и хеш на соответствие.
Не очень понял, индексы работают и на неуникальных полях. Также, в таких таблицах часто делают уникальный индекс по паре колонок: он и вставить дважды одинаковые значения не позволяет, и ускоряет выборку.
> вместо того, чтобы один раз почитать мануал по бд и создать метод в три строки, который просто выполнит произвольный query через PDO. Но - для этого надо знать как работают бд! А в елоквенте пофигу, поэтому все быстрее и проще - возразят мне
Если ты начнешь все запросы руками писать, и писать код маппинга на объекты, то уже где-то на десятом запросе тебе придет в голову мысль, а нельзя ли это автоматизировать. Это и есть то, что делает ORM.
В реальности обычно используется и ORM (для рутинных операций), и прямые SQL запросы там, где ORM неэффективна.
>>1927087 Нулевым надо учить пхп и стандартную библиотеку. Еще ООП и SOLID. Книгу Patterns of Enterprise Application Architecture Фаулера почитать и refactoring.guru
На пхп надо много писать крудов без фреймворка а потом с ним, и учиться поднятию докера с nginx, Симфони и прочей ерундой с этим крудом.
Остальное просто бессмысленно читать не имея работы и не зная как проекты нормальные смотрятся и работают.
Сап pr. Пишет безработный студент. 3 года учил пыху, писал для себя в удовольствие, немного на фрилансе подрабатывал. Недавно прошёл курс от вуза по автоматизированному тестированию на питоне, зашло очень хорошо мне, опыт веб разработки пригодился.
Так вот вопрос. надо бы уже искать работу, на какой стул сесть? Php разраб или qa python? Нравится все одинаково, где больше перспективы?
>>1927266 Она по базовым архитектурным концептам и не оч далека от собственно кода, а то остальные книги по архитектуре либо не по базовым, либо вода и тупо слова, либо и то и то
>>1927297 >Нравится все одинаково, где больше перспективы? Дам тебе самый базовый совет - учись принимать решения самостоятельно. Работать будешь ты, а не двач. И самый заезженный совет - напиши все плюсы и минусы на листочке, и посмотри где чего больше. Какой бы ты стул не выбрал - везде хлебнешь свою долю говна.
>>1927363 Обе. Сначала Совершенный код, т.к. он описывает более примитивные вещи вроде грамотного названия методов. Потом Паттерны, т.к. они затрагивают крупные системы.
>>1927401 Создаешь папочку надеюсь, ты умеешь в шторме папки создавать services в папке App и кладешь туда бизнес-логику. А елоквент модели лучше держать максимально пустыми, т.к. туда и без того напихали логики актив рекорда перейди в базовый класс елоквент модели и почитай исходники
Понятно что md5 нисикьюр, это не главное. И я понмаю, что SSL сертификат сделает эту транзакцию зашифрованной в любом случае. Вы точно знаете что хуесосы не знают ваш пароль. Вы не видите бекенда, но вы ведете фронт. И вы знаете что ваш пароль не хранится в базе.
Поэтому таким образом, если база утечёт, народ не проебёт пароли. Много людей использует один пароль на всё. Это конечно хуёво, но людей не изменишь.
Всегда проигрываю. Никогда бы не взял на работу и не имел бы дело с тем, кто пишет что "владеет навыком аякс". ВОТ ЭТО ДОСТИЖЕНИЕ, НАУЧИЛСЯ ОТПРАВЛЯТЬ ЗАПРОС, НИЧЕГО СЕБЕ.
Проверка на четность Выведите id тех комнат, которые арендовали нечетное количество раз. В качестве результата выведите id комнаты и количество раз сколько ее брали в аренду (используйте псевдоним count).
Я пишу SELECT room_id, SUM(total) AS count FROM Reservations GROUP BY room_id HAVING count % 2 = 1;
Если соединение защищено SSL, а сервер не взломан, то пароль защищен от перехвата.
Если используется не SSL, то атакующий может встроить в скрипты кейлоггер (перехват нажатий кнопок клавиатуры) и украсть пароль. Если сервер взломан - то же самое, атакующий может внедрить кейлоггер.
То есть толку от этого особо нет. Разве что защитить пароль от логгирования по ошибке.
Что можно использовать как альтернативу phpstorm, кроме например vscode или sublime? Что еще популярно? Кто-то пользуется eclipse, netbeans? Они популярны вообще? Что сейчас самое используемое?
>>1928522 Да, идет. Но я суко сколько всего только не перепробовал - бесит все своей кривизной и мегатоннами глючной ненужной хрени. Поэтому в итоге юзаю ток notepad++ и очень изредка онлайн-идешки для тестов и отладки, т.к. на серваке все равно все удобней и быстрее.
>>1928573 Есть прямая связь с доходами и "экономностью". Дохера жадные и хитрожопые, которые не платят в интернетах, как правило зарабатывают мало, именно потому, что им нахер не надо много, так как они все равно нихера не платят и тырят варез. Те кто платит за контент - тем надо много. А чем больше надо, тем больше и дают. Купил ютуб премиум, успокоил нервы, улучшилось либидо, больше стал зарабатывать. Программисты блин, поддерживайте друг друга. Не козлитесь на копейки уже!
>>1928459 Китайцы даже плагин для шторма запилили, чтобы сбрасывать триал и всячески поддерживают пиратство. >>1928594 В адекватных фирмах тебе оплатят шторм. А пока пользуемся в образовательных целях, так сказать.
А для особо совестливых шторм покупается на год с первой зп. На второй и третий год идет скидка.
Бля, чел, вали оттуда. У меня в мухосрани ждун вилка 30-50к это норма. Причём ждун самый ждуновый. Без опыта работы вообще. Знать базовые конструкции языка.
>>1928678 В любом околомиллионнике полно гречневых, готовых мидлами веслать всего за х2 от средней по региону. В моем городе до сих пор есть ваки ниже 50к для сеньоров всякие вебстудии с битриксом
>>1928681 >Думаю, что через лет 5-10 ничего не изменится Не факт. Прошаренные кабанчики с жирными клиентами апают ставки, чтобы хантить разрабов получше вчерашних студентов. Моя первая галера, где закончил на зп 40к, сейчас набирает людей за 100к+. На их фоне вебстудии с микрозарплатами смотрятся блекло
>>1928696 У меня проектов на ларе толком не было. Сделал один простенький сайт, плюс видеокурс посмотрел, повторяя то, что описывали. Сейчас делаю пет-проект для гитхаба. Идёт медленно и печально.
>>1928735 Старый я. 36 лет. Все эти фасады-мидлверы-обсерверы-реквесты-модели-абстракции не то что "сложные", а просто как-то это всё угнетает.
Ну и вообще. Вот сейчас начал делать проект интернет-магазина. Он был в одном из прошлых тестовых. И мне говорили, что это типа дня на три максимум. Даже скорее на три вечера после работы. И вот начал делать. Сначала установка чистой лары со всеми прибамбасами. Тут композером, тут npm, тут пхпшторм настроить. Нет такого, что из коробки поставил и пользуешься. Потом придумывание схемы БД, создание кучи моделей, миграций, заполнение их тестовыми данными через сидеры и фабрики - это всё вроде э-ле-мен-тар-но, но почему-то у меня уходит дохера времени. Дальше контроллеры, вьюхи и прочее. И у меня при написании кода такое ощущение, что я ядерный реактор пытаюсь приспособить для подзарядки телефона. Типа, вот заготовка из ядерных элементов, вот графитовые стержни, пара тонн электроники, бетонные бункера - а дальше кидай проводку сам, делай что хочешь. И делаешь. Каждый шаг только поле изучения толстенного мануала и постоянно ощущение, что сделал всё неправильно. И если даже не ебанёт, то придёт опытный человек и будет долго и обидно ржать над КАЖДОЙ строчкой кода. Мол, контроллер толстый, проверки надо делать в мидлварах и т.д. А другой придёт и скажет, что проверки должен делать обсервер. Короче, ебанина какая-то. Слишком монструозно всё.
>>1928764 >говорили, что это типа дня на три максимум Они все так говорят. 3 дня нужно, если у тебя есть готовые либы под рукой и ты знаешь, как делается аналогичный проект. А так разработка интернет магазина на ларе дело небыстрое.
На первых порах будет сложно. Потом всё как по накатанной.
Ну и основной показатель для бизнеса - работоспособность кода, кто бы что ни говорил. Нужно запилить МВП и выйти на рынок, а потом уже код причесывать.
Первый раз пилю что-то на ларе. Соответственно впервые столкнулся с такой вещью как вебпак ( да и вообще с npm пакетами ), а точнее с такой оболочкой над ним как Laravel Mix. Весь день пытаюсь понять как и для чего его использовать, доки разные читаю - но везде лишь сырая информация об использовании отдельных функций. Вот только нигде я не смог прочитать, а какая общая картина должна выстроиться в итоге? Вот без этих всех штучек я делаю для каждой страницы ( или раздела ) отдельные css и js файлы, и один общий - для повторяемых элементов, например для навигационной панели и т.д. А что мне с этим вашим миксом делать? Конечно я могу сделать то же самое, просто компилируя все файлы из resources в public, но по-моему это как-то не так должно работать. Вроде должно быть на выходе по одному css и js полностью для всего приложения? Если так, то я сомневаюсь что люди сразу так и пишут все в один файл, неудобно же. Значит, мне нужно как-то получить по одному css и js файлу на выходе с множества на входе?
>>1928685 >>1928676 >>1928678 Как же сложно откликаться на вакансии 100к+, когда у самого зп в три раза меньше, пездос. Такое ощущение, что меня на собесе засмеют. Ещё если руководитель моё резюме увидит, то будут неловкие вопросы...
>>1928887 >Вроде должно быть на выходе по одному css и js полностью для всего приложения? Если так, то я сомневаюсь что люди сразу так и пишут все в один файл, неудобно же. Так в том и фишка, что ты пишешь всё в каталоге resources, как тебе удобно. 20 файлов - значит 20 файлов. А лара сама скомпилирует всё это в минифицированный объединённый код и кинет в public, в один файл. Причём, ты можешь писать на scss каком-нибудь, а скомпилится в css. То же самое с js. >отдельные css и js файлы, и один общий Настрой так, чтобы на выходе был не один общий, а так, как нужно. Конкретно как, не подскажу, пока что сам знаю микс только на уровне "скомпилируй мне всё в один файл". Я тоже нуб.
Аноны, подскажите по елоквент. Нужно создать модель, и в связанной с ней отношением belongsTo() таблице уменьшить счетчик на еденицу. Как это сделать? Создаю модель, сохраняю ее методом save() а после через свойство звязанной моджели меняю в ней счетчик? А это все делается в рамках одной транзакции? А то создам я модель, после буду менять счетчик, а счетчик на этот момент уже 0.
>>1928898 >>1928927 Окей, хоть один пазл сложился. А как это сделать то, не подскажете? Я догадался пока что склеивать файлы через combine() в один, после чего проводить компиляцию получившегося файла в public. И если со стайлами это работает хорошо, то что делать со скриптами? Просто склеить скрипты не вариант - тогда сценарии, предназначенные для разных страниц будут просто идти один за другим. Может нужно какой-то внутренний роутер в js писать, чтобы скрипт запускался только на нужной странице? Я то не знаю, как нормальные люди делают.
КАК же задолбал ЛАРАВЕЛ Всё у него через жопу хитровывернуто. Сегодня весь день делал список из БД. На Yii2 за пол часа сгенерировал бы код и всё, а тут... писда
> public function __construct ($name, $surname) { // Вызов конструктора наследуемый класса parent::__construct($name, $surname); не понимаю смысла,разве он не насл автоматом?
>>1928923 Какая разница, какая у тебя зп? Говоришь "Рассматриваю зп 120к белыми". >Ещё если руководитель моё резюме увидит, то будут неловкие вопросы... Ебать ты... Ну увидит и что? Мб одумается, что второго такого за 30к не найдет, апнет зп
>>1928887 Смотря что используешь. Если только jQuery то в принципе не сильно важно собираешь или нет. Микс(вебпак на самом деле преконфиженный) дает тебе возможность писать новый жс(или даже тайпскрипт) для старых браузеров, транспилируя и вставляю нужные полифиллы, например если ты используешь промисы то ие11 охуеет от такого поворота. Если у тебя на сайте 50 страниц разных, то не сильно много смысла пихать все стили и скрипты в один бандл. Тут несколько стульев, можно делать несколько entry поинтов, по каждому на разную страницу типа, ты должен сам их подключать в нужных местах. Можно через жс организовать модульность, вебпак это может делать, например я наговнякал сейчас вот так как вариант: https://pastebin.com/bpp3eEk0 , в таком варианте проще делать .extract() на какие-то тяжелые либы(твой бандл сплитится на app.js, vendor.js и manifest-runtime)
Склеивать все в один файл - это подход, который работает только для маленьких сайтов. Это тупой подход, который выдает на выходе огромные JS/CSS файлы с кучей ненужного.
Для больших сайтов удобнее иметь один общий файл и один индивидуальный для каждой страницы файл. То есть примерно то же, что ты и делал до этого.
Просто сейчас ты "склеиваешь" код руками, а можно делать это через сборщик, собирая файлы из компонентов. Ну например, у тебя есть компонент "карточка товара", который встречается на страницах A и B. Вот ты и настраиваешь сборщик, чтобы этот компонент включался в скрипты для страниц A и B.
То есть, вместо огромных скриптов ты делаешь компоненты, а сборщиком из них собираешь итоговые скрипты.
>>1929042 >>1929042 ну в теории да,если имя одинаковое,то будет переопределение. а здесь нафига обратились к род конструктору из дочернего с теми же аргументами?
>>1928594 Ты не умеешь управлять деньгами. А американец, который тебя нанимает за копейки на галере - умеет. Вот именно что прямая связь, меньше тратишь - больше денег в кошельке, простая арифметика
Ты попал в обычную ловушку нищего, раньше ты довольствовался поездкой на автобусе и супом домашним, теперь ты больше зарабатываешь и тратишь кучу денег на такси и рестораны.
Ломанный ПХПшторм - для сильных духом, живущих в своём коттедже. Лицензия ПХПшторма - ошейник у рабов.
>>1929248 >Ты попал в обычную ловушку нищего, раньше ты довольствовался поездкой на автобусе и супом домашним, теперь ты больше зарабатываешь и тратишь кучу денег на такси и рестораны.
Подскажите минималистичный DI контейнер. Пимпл, который рекомендовал ОП, вроде как больше не будут обновлять, я раньше на нем делал. Или все таки несмотря на это его можно юзать во всяких микро-проектах?
Где лучше всего реализовать создание какой-то более-менее сложной модели в ларавеле? Просто сервис сделать, или через какие-то эвенты-обсерверы-черта лысого?
Все эти разговоры про ООП, СОЛИД, ТДД, ДДД... Захожу в исходники symfony console. Главный файл Application строк так 1.5к с кучей методов маленьких и побольше (до 2х экранов). И это ваш красивый код?
Мне нужно создать фабрику в ларавеле, которая заполнит таблицу. Там три поля: productId, cartId и quantity. Казалось бы, пиши $productId = $this->faker->numberBetween(1, 20); $cartId = $this->faker->numberBetween(1, 10); $quantity = $this->faker->numberBetween(0, 3); Но есть важное условие: в таблице не должно быть одинаковых productId и cartId. То есть, отдельная корзина может упоминаться много раз с разными товарами, но вот двух записей, у которых одной и той же корзине соответствует один и тот же товар быть не может.
Как это вообще сделать? Я пытался в фабрике делать проверки, типа Cart_item::all()->where('cartId', $cartId)->where('productId', $productId)->isNotEmpty(), но они не срабатывают, потому что фабрика сначала формирует данные, и только потом записывает единовременно в базу. Поэтому проверять базу бессмысленно.
>>1929603 Но ведь мы вызвываем фабрику каждый раз, как в первый. Разве нет? Cart_item::factory(20)->create(); То есть, мы загружаем фабрику 20 раз. Я понимаю, что данные, сгенерированные между вызовами где-то сохраняются, но не в самой же фабрике?
Ну пусть твоя фабрика за один вызов генерит весь набор данных. Указали ей сгенерить N записей - она лезет в бд, достает существующие пары, на основе них генерит новые N пар и отдает тебе пачкой. Cart_item::factory(1)->create(); // за один вызов фабрики генерим набор записей
>>1929631 Как? Есть параметр unique(), но он относится к генерируемому значению. То есть можно сгенерировать 20 несовпадающих чисел. Но в том-то и дело, что им по условию не запрещено совпадать. Совпадать запрещено их комбинации с другими числами.
Например, 4 8 5 9 4 9 - это нормально. А 4 8 5 9 5 9 уже нет.
>>1929650 unique можно поставить на несколько полей - т.е. создать уникальный составной индекс Например, ставим на два первых поля (еще какое-то третье поле) (4 8) 1 (5 9) 5 (5 9) 4 - уникальность нарушена Он будет чекать пару целиком
>>1929672 >unique можно поставить на несколько полей Как?
У меня вообще лажа какая-то. Запускаю Cart_item::factory(13)->create(); //создать 13 товаров в корзинах В самой фабрике написано $cartId = $this->faker->unique()->numberBetween(1, 15); //ссылка на корзины
И валится ошибка: Maximum retries of 10000 reached without finding a unique value
То есть фейкер за 10к попыток не смог подобрать 13 уникальных значений из промежутка от 1 до 15? Бред какой-то.
>>1929684 Тааак. У меня несколько фабрик. И такое ощущение, что faker->unique() как-то сохраняет инфу о "занятых" значениях между вызовами. Доходит до того, что запускаю фабрику 1 (один) раз, но она не может найти уникального значения. гуглил эту тему, пытаясь разобраться, как вообще работает фейкер, но не смог. Везде чисто обзорные статьи. Даже в документации. Ну или я плохо искал. Ебанина какая-то. Будь оно всё проклято.
>>1929738 Не умею. Нашёл, что unique() упоминается в генераторе * @method Generator unique($reset = false, $maxRetries = 10000) Но больше там ничего про него нет и как вообще понять, как оно устроено, я не знаю.
>>1929740 >Какая задача стоит? Сгенерить для базы 20 позиций? В общем, да. Сгенерировать для одной таблицы штук 20 корзин, а для другой 20 товаров в корзинах (т.е. в таблице только ид товара, ид корзины и количество товара).
Дальше надо ещё заполнить таблицу Order и Order_item, но это уже точно ен смогу, потому что заполнять нужно не просто левыми данными, а так, чтобы цифры совпали. И данные... Короче, ну его нахуй. объяснить что-то и тяжело и нахрен никому не нужно, всё равно делать нужно мне, а не интернету. Забейте.
>>1929799 >Дальше надо ещё заполнить таблицу Order и Order_item, но это уже точно ен смогу, потому что заполнять нужно не просто левыми данными, а так, чтобы цифры совпали Так в фабриках можно создавать связанные модели. В доке про это есть
Почаны, привет. Решаю потихоньку задачку с преобразованием чисел в прописной вид. Нужно разделить число на части по 3 цифры. Правильно ли я поступаю, используя этот код?:
$n=51651654165123;
$spelN=[];
for ($i=$n; $i>=1; $i=$i+0) { $i=$i/1000; $t=floor(1000fmod($i,1)); $spelN[]=$t; }
$spelN=array_reverse($spelN);
Алсо, поясните, почему fmod выдает, например, первым числом 0,12300109863281 , а не 0,123? Ведь дробный остаток от деления $i/1000 по модулю 1 должен равняться именно 0,123. Именно потому, что пыха возвращает длинное число, использую 1000fmod с функцией floor. Какие еще могут быть варианты с разделением числа на группы?
>>1929838 Это тайпхинты, при запуске проверяется тип переменной $bar, который должен соответствовать типу Bar, то есть в $bar должен быть передан класс Bar или класс который наследует класс Bar, либо класс который имплементирует интерфейс Bar. Если переданный тип будет не Bar или значение будет null то у тебя все упадет.
Посоны, насколько важна однопоточная производительность для пыхи, влияет ли конкретный фреймворк, типа Битрикса? Если нет, то к чему хостинги толкают свои YOBA 5GHz VDS именно для него?
>>1930023 > Битрикса? Если нет, то к чему хостинги толкают свои YOBA 5GHz VDS именно для него? Битрих бренд. А по факту низкопроизводительное говно. ему нужно дохуя мощности + пердолинга с конфигами пхп. И поэтому хостинг провайдеры подготавливают для него все настрречки и накидываю деньжат. Бизнес в РФ он такой.
>>1930023 При запуске скрипта php-fpm создаёт отдельный процесс и на одном ядре могут крутится несколько процессов, этакая однопоточная многопоточность, вот именно для этого нужны еба процессоры, если будет меньше ядер и герц то эти запросы будут висеть в очереди nginx. А Битрикс это говно которое под капотом содержит в себе жрущего ресурсы монстра, у меня простая страница вывода статей через news.list делала 260 запросов к базе, что там за магия такая хуй его знает, а про чтение тысяч при каждом запусуе файлов я уже молчу.
>>1930117 >Бизнес в РФ он такой. Да он везде такой, если тебе нужно запустить говно которому нужны дополнительные ресурсы и ебля с конфигами, то нужно дополнительно оплачивать своим админам и докупать железки, именно поэтому и накидывают ценник
>Вас ждет интенсивное обучение основам PHP и CMS Bitrix framework.
>Описание стажировки PHP и CMS Bitrix (1 месяц). 1 этап :
> Прохождение сертификации 1С-Битрикс в несколько этапов (в том числе мы оплачиваем за вас $ВСЕ платные$ экзамены уровня Базовый и Профессионал; Тут вся подъебка за месяц ты хуй эти 2 экзамена сдашь, либо тебе нужно сидеть задрачивать этот битрикс сутками, поскольку там все через жопу, а сам экзамен заключается в том на сколько ты умеешь кликать мышкой в админке и делать ctrl+c и ctrl+v. А еще экзамен представляет собой подключение к удаленному серверу, где все будет адово тормозить, установлена древняя версия CentOS с древним гномом, короче от инфраструктуры для сдачи стресса больше чем от самого экзамена. После пары месяцев интенсивной работы над новыми проектами вполне вероятно сдашь, а так сходу без знакомства с этим поделием я не уверен, либо тебе нужно дрочить билеты.
> Стажировка не оплачивается и является удаленной. Если у вас нет компьютера, можно в офисе компании (Краснодар) проходить обучение. > При успешном прохождении следует трудоустройство в штат (2 этап) с испытательным сроком (3 месяца). Также у вас на руках остаются именные сертификаты разработчика 1C-Битрикс Framework Короче такой инкубатор, если из тебя получился битриксоид, то милости просим, если нет, то иди нахуй без денег.
> CMS Bitrix Это самый наиглавнейший подъеб, для примера разверни эту хуйню у себя локально, поюзай чуток, а потом сравни с той же ларой.
На w3schools есть уроки в РНР tutorial? Как считаете? Там годнота? Збс проходить уроки туториала РНР в w3schools? Или это говно, старье и в рот ебать это все?
А можно как-то отлавливать ошибки, которые могут возникнуть при выполнении команд через exec? Еще часто вижу мнение, что вообще использовать exec такой же зашквар как и eval. Я бота делаю, который через exec скачивает видос из ютуба и делает с ним кое-какие манипуляции через ffmpeg, если что.
Есть такое понятие, как код завершения процесса. Обычно. если все успешно, он равен 0, а если произошла какая-то ошибка, то не равен. Ты можешь проверять код завершения, который вернет exec().
Также, обычно при ошибке программа выводит какую-то информацию в стандартный поток ошибок (stderr). Через exec() ты его не перехватишь, потому лучше использовать библиотеку Symfony Process, которая умеет перехватывать выводимые запущенной программой данные.
>>1930188 Я имел ввиду, насколько он может распараллелить запросы по разным ядрам/потокам? Судя по встроенному тесту Битрикса, кол-во попугаев не зависит от кол-ва ядер.
> почему fmod выдает, например, первым числом 0,12300109863281 , а не 0,123?
Дело в том, что числа типа float (дробные числа) в PHP (и в других языках программирования) хранятся в приближенном виде, с так называемой плавающей запятой.
Это значит, что в памяти компьютера хранятся лишь первые несколько цифр числа (около 15-17 значащих цифр) и расположение запятой.
К примеру, var_dump(123456789012345678901234567890) выведет:
double(1.2345678901235E+29)
(E+29 значит "умножить на 10 в 29 степени). Как видно, сохранились лишь 14 значащих цифр, остальные были потеряны.
Более того, числа в памяти хранятся не в десятичном, а в двоичном виде, как N * 2 ^M (где N и M - целые). Если приглядеться к формуле, то с ее помощью можно точно представить лишь некоторые дробные числа (кратные 1/2, 1/4, 1/8, 1/16 и тд.), а большинство дробных чисел представить точно нельзя:
0,5 - можно точно представить как 1/2 или 1 * 2 ^ -1 0,125 = 1/8 = 1 * 2 ^ -3
А вот другие дроби, вроде 0,1 или 0,123 точно представить нельзя. Из-за этого они представляются в памяти как 0,10000000001... или 0,09999999999999... и возникает погрешность при вычислениях.
В твоем случае 0.0000010986... - это именно такая погрешность. От нее лучше избавляться не с помощью floor(), а с помощью round(), так как погрешность может быть и отрицательной и у тебя может получиться 0,1229999999 и floor() выдаст тут 122 вместо 123.
Видно, что она создает объект Generator и запихивает в него кучу провайдеров.
Затем смотрим код объекта Generator, в нем метод __call(), так как именно он вызовется в ответ на вызов ->unique().
Видно, что в Generator есть "форматтеры" - это конкретные методы для генерации значений вроде randomNumber и "провайдеры" - это классы с набором форматтеров.
Тут еще важно, что после первого вызова $faker->unique() объект UniqueGenerator сохраняется в поле $this->unique и второй вызов $faker->unique() вернет тот же объект (с теми же сохраненными значениями).
В твоем случае, возможно что ты использовал faker->unique()->numberBetween в нескольких местах кода, сделал более 15 его вызовов и он перебрал все возможные числа от 1 до 15 и потому не может найти новое.
В общем, я думаю, полезно покопаться в коде, умение разбираться в чужом коде тебе понадобится не раз.
У тебя какой-то странный подход к заполнению таблиц. Во-первых, поле id часто автогенерируемое (заполняется в БД само), нельзя ли тут это использовать? Во-вторых, нельзя ли сначала сгенерировать отдельно список товаров, потом список корзин, cсохранить их в БД, а потом уже выбирая из них, сгенерировать список CartItem?
Допустим, есть класс A с полями a, b, c и его наследник B c полями d, e, f. Конструктор A отвечает за заполнение полей a, b, c а конструктор B за поля d, e, f. Если в конструкторе B не вызвать конструктор A, то поля a, b, c останутся незаполненнными.
>>1930655 >Во-первых, поле id часто автогенерируемое (заполняется в БД само), нельзя ли тут это использовать? Да, оно заполняетса само. И как это использовать? >сначала сгенерировать отдельно список товаров, потом список корзин, cсохранить их в БД, а потом уже выбирая из них, сгенерировать список CartItem? Именно так и происходит. Но вот с правильным заполнением полей таблицы Cart_item проблма.
>>1930782 Мне кажется определение из вики вполне исчерпывающе. JSON (англ. JavaScript Object Notation, обычно произносится как /ˈdʒeɪsən/ JAY-sən[2]) — текстовый формат обмена данными, основанный на JavaScript. Как и многие другие текстовые форматы, JSON легко читается людьми. Формат JSON был разработан Дугласом Крокфордом[3].
Несмотря на происхождение от JavaScript (точнее, от подмножества языка стандарта ECMA-262 1999 года), формат считается независимым от языка и может использоваться практически с любым языком программирования. Для многих языков существует готовый код для создания и обработки данных в формате JSON.
Кто-нибудь может направить на статью/видео о том как сделать поиск на сайте? Делаю для Интернет-магазина, но пока готова только сама строка и кнопка поиска.
Аноны, как в елоквент создать новую модель, и сразу же инкрементировать\декрементировать связанную отношением belongsTo модель? Меня беспокоит атомарность этого действия. Я создаю модель, и сохраняю ее методом save(). После этого я должен декрементировать связанную отношением модель, это можно сделать через свойства. Ну будет ли это все в рамках одной транзакци? ?
А как понять, что ты ООП достаточно изучил? Я вот начал читать про ООП, текста дохуя, нихуя не запоминается. Если каждый пример кода запускать, то я еще 100500 лет буду разбираться.
>>1931510 >А как понять, что ты ООП достаточно изучил? Никогда не будет достаточно. В ООП нужен баланс и чуйка, где хороший код, где говнокод, а где вынужденный говнокод >Если каждый пример кода запускать, то я еще 100500 лет буду разбираться. Как ты собрался программированием заниматься без написания кода?
>>1931546 >Как ты собрался программированием заниматься без написания кода? Ну, я Мэтта Зандстру начал читать. Там задач нет. На глаз код читаю, описанные примеры, вроде, все понятно, однако там 738 страниц, то что прочитал 70 страниц назад из головы выветривается.
>>1931549 Такие книги стоит читать, если есть опыт написания хотя бы одного проекта. Без наработанного опыта ничего не поймешь. Читал когда-то давно Зандстру. Не сказать, что сильно помогло.
Дорогие аноны, нужен совет. Делаю задачу про сайт тестирования. Как можно реализовать таймер на стороне сервера, чтобы юзер не мог обрубить его через фронт?
>>1931861 Создаёшь в базе запись такой-то юзер начал проходить тест в такое то время, когда он отсылает отвёты сверяешь время получения ответов и время старта прохождения + лимит по времени теста
У хтмлакадемии есть базовый интенсив по РНР, там учат кодить на голой пыхе без фреймвороков. И там отсутствует от слова совсем тема ООП. ООП проходят только на продвинутом интенсиве по РНР, где изучают Yii.
Вопрос: а почему хтмлакадемия не дает изучать ООП на голой пыхе? В этом есть какой-то сакральный смысл? Или они тупо пожалели зажопили полезную важную тему для новичков?
>>1931947 Имхо потому что ООП бессмысленно изучать в отрыве от создания приложений, а приложения должны иметь какую-то основу и структуру по минимуму. А писать основу и структуру самим с нуля - это как изобретать велосипед. По идее они должны давать введение в солид принципы и начинать с примера какой-либо основы. А основа и есть фреймворк. Там оно уже все реализовано как бы. Поэтому и такой скачок, одни выберут к yii, другие к зенд, третьи симфу, четвертые лару, а на деле все это - просто варианты структурной организации приложения, построенного на опп принципах. Хотя по умному, они должны не только дать несколько примеров структур, но и предложить создать свою для начала, но это затягивает время по сути, т.к. хер ты создашь что-то лучше, чем уже создано. В этом конечно есть серьезный косяк - фреймворки НЕ УНИВЕРСАЛЬНЫ, и когда берут основу типа симфони для приложухи, которая три строки кода в беке заняло бы, если бы сами писали, получаются говнопроекты. Но так как после курсов выпускают джунов, в задачу которых не входит самостоятельная разработка, до для макаки более чем.
>>1931993 По моему опыту учебники следует пролистывать максимально по диагонали, прогнав немного тесты и задачки, но втыкать в них - ток зря время читать - нихера не запомнится и не поможет, т.к. голая теория нихера не усваивается - ток зря время теряешь. По любому надо ковырять чужие коды рабочих приложений и stackoverflow, создавая и тестируя свои. когда натыкаешься на понятки - гуглишь что читать по теме уже. То есть хотя бы с элементарного начать, собственного сайтика со свистоперделками со встроенным порнхабом, тестами, парсерами всего, что можно стырить и т.п. Пока не включится интерес к ваянию всяко-разной херни, башка останется пустой а руки кривыми. Это как лепить из пластелина - надо суко лепить, а не читать книжки по лепке.
>>1931947 Потому что говнокурсы. ООП обязательно надо изучать на голой пыхе, чтобы вообще понимать как примерно работают фреймворки изнутри. Самостоятельно составить MVC-структуру, изучить автолоадер, роутер как работает, нэймспейсы, цепляются конфиги, наследование и прочее. Поймёшь как это работает - легче будешь понимать фреймворки.
Как в php помечать возможные промежутки между числами? Например у меня есть переменна $a со значением 1000. Нужно сделать так чтоб если $a == (промежуток между 1000-700 т.е. от 700 до 1000) то давало true, если 300 или меньше то false.
>>1932694 Хз. По логике так логично быть должно - слева переменная, справа логическое выражение из двух неравенств. Но по опыту хер там пыха пустит, тем более седьмая, она за скобки параноит как шизло, там тупо обычные сокращения вложенных условий без них не прокатят, и присваивание булевых там другим синтаксисом делается. Хотя пробуй. Может оно и прокатит, если не запятую, а ; d конце влепить. Хотя я почему-то все таки сомневаюсь, поймет ли компилятор. По идее ты тысячу раз мог бы протестить уже, чем тут от нехуй делать кидать подобные вопросики по части алфавита блин. Типа почему жопа, а не жёпа. я хз, не я пыху писал. Да и хуй уже помню, какие там правила.
>>1932667 Путаешь. Для любых полей с датой. И перестаньте пользоваться phpmyadmin уже, дикое говнище оно. Есть же дохера попроще и потолковее инструментов. типа того же adminer. А то больно бл. смотреть, аж яйца крутит, на такие извраты.
Пиздец! Я дебил! Я шараге привык все с доски переписывать в тетрадь. У нас джва компьютерных класса со старыми компами. А учащихся дохуища. На учащихся постоянно не хватает компьютерных классов. Преподы говорят, что компьютерные классы - это архаизм и что в 2к21 году учащиеся обязаны носить с собой ноутбуки. КАКОЙ ТАМ НАХУЙ! Я не мажор нету у меня ноутбуку. Хоть дома некропека есть и то хорошо.
Так вот, я привык все читать глазом и переписывать основные моменты в тетрадь.
Я начал читать Мэтта Зандстру ООП РНР. Дело нихуя не пошло, потому что я глазами читал и в тетрадь код переписывал.
Однако, тут меня в треде высмеяли и сказали, что код надо запускать на пеке.
Теперь я запускаю код на пеке, не записывая в тетрадь. И процесс пошел гораздо быстрее. В разы быстрее. ПИЗДЕЦ Я ДЕБИЛ, СТЫДНО БЫТЬ МНОЮ!!! КАКОЙ ЖЕ Я ТУПОЙ!
1933329 Вы серьёзно помогли этому долбаёбу? Он ведь даже не прочитал ОСНОВЫ ОСНОВ, но всё равно спрашивает гениев из этого треда о помощи в такой простой задаче. Я разочарован в вас.
Да, есть. В PHP числа могут храниться в 2 форматах: int - целое и double (иногда называют float) - число с плавающей запятой.
В формате int на 64-битных машинах можно представить только целые числа примерно от -9 * 10^18 (10 в 18-й степени) до +9 * 10 ^ 18. Точные максимальное и минимальное значения int хранятся в константах PHP_INT_MAX и PHP_INT_MIN, можешь вывести их с помощью echo. Числа в формате int хранятся точно, без погрешности.
Если число дробное или выходит за пределы int, то оно представляется в формате double. Это неточный, приближенный формат, который сохраняет лишь первые 15-17 значащих цифр и порядок числа (положение запятой и сколько за числом идет нулей). То есть, длинное число 12345678901234567890 сохранится как 1,2345678901235 * 10 ^ 19 - часть идущих в конце цифр теряется.
В формате double можно представить числа примерно от 10 ^ -308 до 10 ^ 308. Это, получается и есть "максимально возможное число".
Если тебе нужно работать с еще большими числами, или нужно точное представление без потери цифр, то стоит посмотреть на расширения BCMath и GMP. Они позволяют выполнять операции со сколь угодно большими целыми числами.
1.0E+29 обозначает "умножить 1.0 на 10 в 29 степени", или передвинуть запятую вправо на 29 разрядов, добавляя нули по мере необходимости. Как видишь, из-за преобразования в формат double число сохранилось с погрешностью.
Ребят, траблы с пыхой. Проблема ясна, а вот что делать вообще хз. Вся проблема на скринах. Если словами, то phpStorm всрато работает с namespace'ами. Когда создаю класс в другом namespace он напрочь отказывается создавать его экземпляр в исходном namespace. Пытался гуглить, но всё что находил это обычную теорию по пространствам имён. Не могу двигаться дальше в обучении из-за этой проблемы. Вроде всё правильно делаю, но может где то просто тупая ошибка закралась?(p.s если при создании класса подключать namespace через use, а не напрямую как на скрине эффект тот-же).
А как ты, собственно, пытаешься создать инстанс, когда не подключил класс User в свой index.php ? Мне кажется, тебе нужно для начала получше ознакомиться с немспейсами
>>1933690 Use всего лишь даёт алиас для пространства имен, а не подключает. В данный момент в твоём файле нет класса User, откуда по-твоему php должен его взять ?
Подключить файл можешь через require ‘User.php’ в самом начале.
>>1933694 И вправду, заработало. Спасибо большое. Действительно, стоить больше почитать про namespace. Я думал что "use" как раз и выполяет эту функцию. Спасибо анон.
Когда ты запускаешь index.php то в нем не определен класс User, потому PHP не может создать объект этого класса.
use не "подключает" класс, а лишь создает синоним (то есть use \Ass\User лишь говорит, что имя User это синоним для полного имени \Ass\User).
Тебе нужно либо руками через require подключить файл с классом, либо разобраться в автозагрузке. Начать лучше с первого, а потом переделать на второе. Вот урок про автозагрузку (так кстати и require упомянут): https://github.com/codedokode/pasta/blob/master/php/autoload.md
Делаю меню с выбором пунктов и вылезающим окном, но есть 2 проблемы: 1) Между меню и окном есть небольшой пробел и, если курсор попадёт на него, то окно исчезнет, я могу это починить приблизив окно к меню впритык, но тогда будет некрасиво; 2) Когда появляется окно, снизу от пункта появляется огромное белое пространство, что печалит меня. Код css (menuleft это меню слева, а showmenu это окно справа): .menuleft{ position: absolute; margin-left: 50px; margin-top: -300px; border-radius: 8px; width: 255px; box-shadow: 0 1px 2px 0 rgba(0,0,0,0.16); background-color: rgb(255, 255, 255); } .menuleft li{ border-bottom: 1px solid #f5c800; } .menuleft li:hover{ color: #ffc222; transition: all ease 0.5s; cursor: pointer; } .showmenu{ color: #000000; display: none; margin-left: 230px; width: 300px; margin-top: -31px; background:#f3f3f3; height:200px; box-shadow:0 5px 5px rgba(0,0,0,0.3); } .menuleft li:hover .showmenu{ display: block; }
Чтобы подменю не исчезало, нужно, чтобы промежутка между меню и ним не было. Можно, например, обернуть подменю в обертку и добавить прозрачный невидимый паддинг слева.
Чтобы подменю не растягивало исходный пункт, нужно использовать такой способ позиционирования, который не влияет на размеры родителя. Например, абсолютное позиционирование.
И получается фигня какая-то. Если не менять галочку, то всё ок. Если снимаем, то в контроллер попадает 0 и всё тоже ок. Но вот поставить обратно её не получается, в контроллер всё равно уходит 0. Я уже и так и сяк с этими полями шаманил, никак не могу понять логику. По идее же у нас тупо два поля. если чекбокс не стоит, то это поле просто не учитывается и контроллеру улетает 0 из скрытого поля. А если галку ставим, то значение чекбокса перебивает скрытое поле и контроллеру идёт 1. Но такое ощущение, что если её снять, то это работает, а если поставить, то нет.
Стоит сначала разобраться, как передаются чекбоксы. Если галочка поставлена, то браузер передает имя (name) и значение (value) чекбокса в POST-данных (например: isPublished=x). Если галочка не поставлена, то значение чекбокса вообще не передается на сервер.
Тебе надо всегда передавать в value одно и то же, например, значение 1.
А скрытое поле, я думаю, не нужно. Оно только сбивает сервер с толку, так как при поставленной галочке туда передается параметр isPublished дважды.
>>1934911 >Стоит сначала разобраться, как передаются чекбоксы. Так в том-то и дело, что я знаю, как они передаются. и даже полностью объяснил это в своём посте (и ты повторил то, что я написал).
>Тебе надо всегда передавать в value одно и то же, например, значение 1. Нет. Мне нужно передавать 1 только если чекбокс установлен.
>передается параметр isPublished дважды. И снова нет. Можно создать сколько угодно полей с одинаковым name, и значение последнего значащего перепишет прдыдущие, на сервер отправится строго одно поле.
> гугл выдает такую статью: https://5balloons.info/working-with-checkbox-input-in-laravel-form/ Я её уже читал. Там не совсем то. Там написано, что можно сваять в контроллере костыль в виде проверки на существование параметра if($request->has('isPublished')), но к нему ещё придётся прописывать изменение данных в реквесте перед записью в бд. Как-то это криво, не думаю, что должно так быть.
>>1934939 >на сервер отправится строго одно поле. Сразу уточнение: если оно установлено. Если ни одно поле не установлено, то на сервер оно не передастся вообще.
>>1934939 И моя проблема, по итогу, в том, что если галочка изначально не стоит, но мы её ставим, то уходит "isPublished" => "0", а должно быть "isPublished" => "1". Я не понимаю, где я накосячил.
Предыстория. Учил swift для вкатывания на ios, на нем друзья уже программируют и работают уже не один год. Но что-то не задалось с ним, прошел 1 собес, выполнил все тестовые задания, но были проблемы с теорией. Обговорили зп и договорились, что подучу и выхожу на работу. А тут началась учеба, родичи заболели короной было не до этого и я забил на время как я думал. После всей хуйни нарисовался вариант пойти в небольшую фирму PHP программистом БИТРИКС 24. Долго думал идти или нет, но пошел. Уже были куплены курсы на GeekBrains, дали их и сказали учи. Уже месяц прошел, курсы эти не особо нравятся. А нормальных учебников так и не нашел. На swift было все просто открыл xcode, нашел видеоуроки, есть хорошие учебники. Одно и тоже, но в видеоформате и в текстовом, про сто и доступно. А с PHP ебать сложно. Одни говорят сразу учить пхп в одном редакторе, другие говорят нужно с началу HTML с CSS учить в других редакторах. Я уже запутался. Есть предложения каких-нибудь адекватных курсов, уроков, книг с чего стоит начать.
Если что в будущем нужно будет не сайты клепать, а приложения под CRM Битрикса 24.
>>1935504 >>1935531 Да бля, если в свифт то незнаю когда смогу устроится, а я студент и тут нормально относятся к тому, что хожу не каждый день. В планах пока тут хуярить, пока учебу не закончу еще 1.5 года. Если по окончанию учебы будут хорошо платить то останусь, если нет то устрою перекат на свифт + какой-то опыт будет в разработке.
>>1935542 Я не сидел за сфитом уже месяца 3 и уже подзабыл что там к чему. Так еще в городе всего 2 вакансии на свифт джуна, хуй знает можно ли будет у них студентику работать.
А тут уже платят, сиди учи получай бабосы. Так дальше вроде как больше должно быть.
Допустим есть товар, у товара есть категории. Что делать с товаром при удалении категории через админку? Я себе такие варианты представляю, что наверное лучше вообще не вводить возможность удаления категории, в которой существуют товары. Хотя это тоже так себе вариант.
>>1936011 А ларавелисты наполовину джамшуты или полностью? А энтерпрайз проект например на друпале это тоже для джамшутов? А вот паттерны в пхп стали тоже джамшутовыми от того, что они на пхп? Паттерны на сишарпе от них как-то отличаются? А фронтедер - это джамшут или нет? А битрикс ладно, это возможно частный случай проект для банка - джамшутинг? Откуда вообще такое разделение на джамшутов?
>>1936044 >А ларавелисты наполовину джамшуты или полностью? Из тех, с которыми работал 50/50. Были, кто откровенно говно в прод льет, были среднячки, хороших ларавелистов, увы, не встречал. >А вот паттерны в пхп стали тоже джамшутовыми Если бы их часто видел. Так нет, средний пхп проект - процедурщина, обернутая в классы моделей или контроллеров >А битрикс ладно, это возможно частный случай проект для банка - джамшутинг Учитывая начинку битрикса - да
Это вопрос к тебе (ну или к заказчику), а не к нам: что должно происходить?
- запрещать удалять категории с товарами (безопасный вариант) - удалять категорию у товара, но оставлять сам товар - удалять категорию вместе с товарами (а что, если на эти товары есть оплаченные заказы?)
Вариант 3 самый неудачный, так как сотрудник может удалить категорию, думая, что она пустая, а по факту удалит пол-магазина с заказами.
$b, $test, $str1 - плохое название переменной. Учись выбирать более говорящие названия.
Также, используя функции array_map и max можно найти макс. длину строки без написания цикла foreach.
Писать if ($value[$i]) неправильно, так как в массиве может не быть элемента $i и будет выдано предупреждение. Надо проверять, что такой элемент есть с помощью isset, array_key_exists или count.
Более сложная задача - парсер математических выражений (сделанный на ООП), которому дается на вход математическое выражение вроде x(2a + b) + 5 + 3bx и он его упрощает до 2ax + 4bx + 5. Ну это конечно сложная задача, новичок над ней может месяц голову ломать. Но полезная. Там много классов получается. Я могу дать подсказку, если что.
>>1936106 Да, в принципе я поразмыслил, вопрос изначально дурацкий. Если оставить товар без категории каким то образом, то что, писать в графе "категория" [ДАННЫЕ УДАЛЕНЫ], чишо? Да и множество других неудобств сразу же вскрывается. Наверное лучше вместо этого просто предоставлять максимально широкие возможности редактирования категории.
1) Самый простой способ - использовать полнотекстовый поиск в БД (это через WHERE ... MATCH AGAINST ).Делаешь в таблице колонку, помещаешь туда текст для поиска, делаешь полнотекстовый индекс и используешь MATCH AGAINST
Ты настраиваешь запуск индексатора, например, раз в час, а также при желании можешь сделать realtime-индекс и при изменениях в БД слать в него данные в реальнмо времени. После чего ищешь через sphinx.
3) Elasticsearch, это по принципу работы как sphinx, только с 1000 разных ручек и переключателей, можно искать что угодно как угодно, группировать, сортировать данные, итд. Возможностей море.
>>1936159 Мне как раз сегодня задача пришла поиск на сайта потвикать как-то чтобы ЛУЧШЕ было. Сейчас сфинкс спокойно себе работает, но у меня сильное желание навернуть эластиксерч, просто потому что по нему больше инфы можно найти в инете (сфинкс как я понял это от снг разраба), обмазаться всякими морфологическими словарями и вообще апи удобное, DX так сказать. Боюсь только что он на джаве работает и могут возникнуть подводные камни, о которых я еще не догадываюсь. Говорят что память жрет как падла, но на сайте нужно примерно 3-5к итемов индексировать, я надеюсь что он будет до 1-1.5гб использовать
Для пыхи на расстоянии вытянутой руки существуют какие-то космические вещи. Вот понадобилось сделать фильтр по полу юзеров, который они нигде не вводят, и просто сразу по первой ссылке. Представляю как бы я ебался
Попал в тупик. Мне нужно получить переменные $nameitem[0], $nameitem[1] и $nameitem[2], но почему-то когда заканчивается цикл while, единственная переменная, что остаётся это $nameitem[2] (остальные становятся пустыми). Я даже понимаю, что дело в особенности цикла while, но не знаю как это исправить и получить все переменные.
>>1936044 >А битрикс Джамшуты отдыхают здесь. Это ебучее говно из портала в ад, который в дырке сельского туалета куда срали каждый день без оставновки со времён Екатерины II. Как такое можно было сотворить я не представляю, простые вещи которые в той же ларе сделаешь за минут 20 на этом говне можешь делать несколько дней. Даже сука проект развернуть не так просто, можно целый день проебаться, структуры базы нет, все в инфоблоках, id которых встречаются по всему коду, качаешь базу себе, то кодировка 1251, то mbstring.func_overload надо, то не надо, то блядь база проекта с новым ядром не совместима, выкачивать папку /bitrix по фтп с прода весом пару гигов чтобы сука оно просто развернулось локально.
Как в ларавеле работать с файлами по фен-шую? Допустим, есть товары, у которых есть название, цена, описание и картинка. Я гуглил и нашёл что-то такое: if ($request->hasFile('image')) { $input['image'] = time() . '.' . $request->image->getClientOriginalExtension(); $request->image->move(public_path('images'), $input['image']); } Картинка при этом сохраняется в папку /public/images/, а путь к ней ($input['image']) записываем в базу отдельно, через create($input).
Однако, в документации описан другой способ: $newFileName = time() . '-' . $request->file('image_url')->getClientOriginalName(); $path = $request->file('image_url')->storeAs('public', $newFileName); Он записывает файл в каталог /storage/public/ и если сделать сразу $item->update($data), то в базу запишется путь к временному каталогу файла (на кой хрен - непонятно), поэтому я подшаманиваю название: $data['image_url'] = $newFileName; $result = $item->update($data); И затем, чтобы сторедж был доступен из паблика, прописываю php artisan storage:link И обращаюсь из вью так: <img src="{{asset("storage/$item->image_url")}}">
Вопрос: Какой способ более правильный? Или я вообще дичь тут какую-то нагнал?
>>1937231 Проверяется. $this->validate($request, [ 'title' => 'required', 'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', ]); Меня просто интересует сама концепция, куда лучше загружать файл? В сторедж или паблик? И конструкция file('image_url')->storeAs('public', $newFileName) - она, получается свежая, раньше не было? Раз нигде не упоминается, кроме документации.
>>1937224 В первом варианте ты руками копируешь файл в public/ папку сайта Во втором ты сохраняешь файл в свой публичный диск(концепция ларавела, который по дефолту находится в storage/public/. Нюанс в том что ты можешь в конфиге поменять "драйвер" публичного диска на какое-то облако, и тебе особо ничего не нужно будет менять в коде, а в первом случае придется переписывать. Всё это дело можно посмотреть в config/filesystems.php
>>1937896 >storage/public/ То есть, по фен-шую нужно закачивать картинки в /storage/public/ и линковать это хранилище в /public, так? Окей, понял, принял.
>>1918124 Сеньор по определению мультиязычник, а не пыхарь. То есть может делать побольше существенно, и похеру на каком языке. Так что тут как бы сам вопрос не совсем корректно стоит.
Допустим, есть магазин товаров. У них цена в долларах. Нужно сделать возможность посетителю менять отображаемую цену на рубли и обратно. Как это лучше сделать?
а) Ввести дополнительное поле в таблицу и в зависимости от реквеста, вытаскивать цену из нужного поля. б) Оставить одно поле цены, но проверять реквест, и если в нём указана другая валюта, налету преобразовывать цену перед отправкой посетителю.
Какой подход более правильный? У меня ощущение, что меня за любой будут ругать.
>>1938955 Б лучше. Взять какую-то валюту за базовую и на основе неё считать цены в других валютах. При варианте А придется следить за 2мя полями (при 2х валютах) в таблице, в которых считай одна цена лежит. И при росте кол-ва валют соответственно будет расти кол-во таких полей.
>>1938963 Зато обновление цен будет проходить один раз при смене цены товара (или курса) в админке. А при первом варианте сервер будет пересчитывать все цены на каждом запросе. При хайлоаде будет гораздо выгоднее добавить бесплатное поле в таблице (пусть даже сотню полей), чем нагружать проц.
>>1938963 >>1938969 Скажешь гуру, что они оторванные от жизни долбодятлы. В реальности у продавцов могут быть разные цены для разных валют, не согласованные с курсом, к примеру потому, что по каким то причинам им предпочтительнее одна валюта чем другая, и цена с учетом курса может различаться. Логики особой тут нет, но обычно это именно так. Поэтому должно быть множество цен - для каждой из валют. Рассчет по курсу применим только при предварительной договоренности с конкретным продавцом, так как их "а вот у меня курс лучше!" будет в каждом втором случае. Ну, это скорее из реального "коммерческого опыта" соображение. я делал вообще всегда отдельной таблицей - ид товара - ид валюты - цена.
То, что касается производительности, надо измерять, а не гадать. Я сомневаюсь, что пересчет валюты (одно умножение) хоть как-то повлияет на время выполнения запроса.
Она рабочая, просто надо домотать до задачи. Скопирую тогда сюда:
Есть Гостиница, в ней есть Номера. Для каждого Номера известен его номер, количество Гостей, которое в него влезет, а также цена за сутки. В Гостиницу приезжают Гости. Нужно сделать ООП-модель Гостиницы с такими возможностями:
- получить список свободных номеров на определенную дату - получить список свободных номеров, которые будут свободны в определенный диапазон дат (от A до B) - дан список Гостей и диапазон дат, в которые они хотели бы заселиться. Необходимо подобрать им самый дешевый и маленький Номер, который их вместит и который свободен в это время. - то же самое, но при отстутствии одного подходящего номера для Гостей разрешается заселить их в несколько номеров, опять же, начиная с самых дешевых. Например, приехало 3 Гостя, но все 3-местные номера заняты и мы выделяем 2 2-местных, или 3 1-местных или 1-местный + 2-местный. - зарегистрировать проживание данных Гостей в данных Номерах на данный период - получить историю заселения Номера (кто в нем когда жил) - получить историю заселения Гостя (в каких номерах он жил) - получить статистику доходов Гостиницы за данный диапазон дат (в день A отдель заработал X тугриков, в день B - Y тугриков и так далее)
То есть надо создать классы, и сделать в них методы, которые вычисляют то, что описано выше.
Обычно подключается сторонний сервис для приема платежей (например: робокасса, яндекс-касса). Ты заключаешь с ними договор. Сервис либо дает тебе код, который ты должен подключить на страницу, чтобы на ней появилась форма оплаты, либо ссылку по которой надо отредиректить пользователя на форму оплаты. При этом ты передаешь сервису номер заказа. Пользователь оплачивает, дальше сервис дергает какой-то URL на твоем сервере и сообщает об успешной или неуспешной оплате.
Периодически тебе приходит на почту отчет со списком оплат: за такой-то заказ получено столько-то денег. И периодически тебе на счет переводят деньги.
Также, такую систему могут не поддерживать системы документирования вроде swagger, как ты будешь делать документацию на API?
А так, использовать можно, не думаю, что тут требуется middleware. Оно вообще не для этого, а для того, чтобы поменять что-то в запросе или что-то в ответе (заголовок какой-нибудь добавить).
>>1939020 В конечном счете пляшем от бизнес требований. На какой-нибудь бирже нужны динамичные цены, зависящие от какой-то базовой валюты. В маркете тот же стим нужны фиксированные цены
Сап, а как лучше сделать удаление тестов в задаче на тестхаб? Удалять полностью из базы или делать отдельное поле isDeleted? Если удалять, то оставлять ли в базе вопросы и ответы, теги? Не знаю, насколько такой запрос будет нагружать бд, не легче ли все оставить? Алсо, еще вопрос про порядок вопросов - в базе есть поле sequence_number, и если допустим при редактирование юзер меняет местами вопросы или удаляет их, то просто обновлять всем вопросам это поле или может есть какой-нибудь хитрый алгоритм?
Хочу сделать так чтоб исходя из одной переменной объекта (profession) выдавались значения всем остальным переменной путём if profession (константа) тогда...
>>1939764 >и ты должен вызывать эту функцию за пределами класса Так это ведь постоянно функцию вызывать придётся после объявления объёкта. И функций тоже наверное дохера надо, оно же только 1 return сможет сделать. То-есть нужны будут функции define salary, define coffee, define papers... Жесть?!
>>1939803 После $zalupa->huita(); у всех показателей залупы выставятся нужные значения? А можно сделать так чтоб они выставлялись сразу при создании новой залупы обозначением професси в конструкте (скобочках), без строчки с вызовом функции?
Удалять может быть плохо, так как теряются результаты прохождения. Человек старался, проходил тест, а результаты удалили. Проще использовать isDeleted (этот подход называется soft delete). Или можно заморочиться и смотреть: есть результаты прохождения? Если нет - то удалять целиком, если есть - то скрывать.
Удалять надо, конечно, вместе с вопросами и тегами. При десятке-другом вопросов нагружать БД сильно не должно, но ты можешь сделать измерения и проверить.
> Алсо, еще вопрос про порядок вопросов - в базе есть поле sequence_number, и если допустим при редактирование юзер меняет местами вопросы или удаляет их, то просто обновлять всем вопросам это поле или может есть какой-нибудь хитрый алгоритм?
public $name; protected $workPlace; // В какой департамент назначен работник protected $profession; // Профессия работника protected $rank; // Ранг работника protected $isLeader; // Руководитель ли работник protected $salary; // Зарплата работника protected $coffeConsumption; // Объём потребляемого сотрудником кофе в литрах protected $papers; // Количество производимых работников отчётов
Имеется объект с свойством-массивом в нём. Имеется объект, который при определённом значении одного из своих свойств должен залазить в свойство-массив первого объекта.
>>1940304 >$this->name = $name; >$this->workPlace = $workPlace; >$this->profession = $profession; >$this->rank = $rank; >$this->isLeader = $isLeader; Конструктор это из воздуха должен брать? Добавь аргументы в метод. И да, за такой elseif по рукам бьют. Мало того что выглядит плохо, так еще всё на магических числах.
Вопрос по вебпаку/миксу. Допустим, я в своем app.css делаю импорт bootstrap.scss. Из-за этого мне при изменении любой строчки приходится ждать по 6-7 секунд пока все скомпилится чтобы глянуть на изменения. Можно ли как-то закешировать этот bootstrap.scss или что-то около того? Наткнулся на функцию mix.extract, вроде бы для чего-то похожего предназначена, но хз, профита из нее извлечь не получается.
>>1940341 >Конструктор это из воздуха должен брать? Да, эти штучки будут задаваться в скобках при объявлении объекта. >И да, за такой elseif по рукам бьют. Мало того что выглядит плохо, так еще всё на магических числах. Не понял ничего.
class Employee { public $name; protected $workPlace; // В какой департамент назначен работник protected $profession; // Профессия работника protected $rank = 1; // Ранг работника protected $isLeader = "Не руководитель"; // Руководитель ли работник protected $salary; // Зарплата работника protected $coffeConsumption; // Объём потребляемого сотрудником кофе в литрах protected $papers; // Количество производимых работников отчётов
public function __construct() { $this->workPlace = $workPlace; } if ($this->workPlace == "Закупки") { $procurementDepartment->workers = $this; } } }
>>1940346 Я не шарю, но scss всегда почему-то весь пересобирается, тут как вариант импортировать не весь бутстрап а отдельные модули его, например grid, table и т.д.
Устанавливать линукс или оставить винду? Что предпочтительнее? Надо ли будет знать на работе линух? Если да, то хотел бы тогда поставить ubuntu, она подойдет? Спс
>>1940700 Переменные класса объявлять надо вне функций, до конструктора. И поменяй местами выражения, тумкало - ты присваиваешь неизвестно чему неизвестно что.
>>1940700 >>1940816 Поясняю - в мануале аргументы в конструкторе видишь? А у тебя - у тебя аргументов нет. Есть неведома херня, которая возникла из ниоткуда. плюс ни там, ни там нет переменных класса. так что я хз что ты хотел добиться.
>>1940783 >Устанавливать линукс или оставить винду? Что нравится, единственно что в линуксах пориятнее терминал и большинство кто занимается бекендом сидят либо на линуксе, либо на маке. У нас на работе с виндой в основном фронтендеры сидят.
>Что предпочтительнее? Linux
>Надо ли будет знать на работе линух? Да
>Если да, то хотел бы тогда поставить ubuntu, она подойдет? Лучше начинать с убунты или минта
>>1940966 Почти одинаково, скриптовые языки. Правда на РНР еще надо безопасность маленько знать, чтобы тебя не хакнули, не бэкдорнули, не эксплоитнули, не инъекцировали.
>>1940971 Короче, был наполеоновский план запилить несколько своих сайтов, перед этим выучив верстку и js. Бэк мечтал написать на ноде. С фронтендом разобрался, запилил несколько страниц шаблонов, и после признался самому себе, что у меня к куям отсутсвтует дизайнерский талант и выглядят мои страницы не очень. Решил мозга не ебать, и запилить на вордпрессе, взяв готовую тему (уже нашел красивую). Для вордпресса говорят пхп нужно знать. JS я типа как синтаксис и обращение с DOMом "выучил", в той степени, что могу всякие выпадающие меню и слайдеры делать сам с нуля. Потому и спросил что сложнее. Буду сейчас пыху учить.
Какие вообще знания php нужны для вордпресса? Какой учебник актуален для последней версии? Можно и на английском. Спасибо.
>>1940996 Если ты пиздец как торопишься, то смотрит обучающие всякие видео по вордпрессу.
А если не торопишься и хочешь хорошо подготовиться, то тогда надо идти по шапке треда, учить голую пыху по задачам, мануалам, ООП пыхи учить. Про безопасность читать, а то вдруг тебя хакнут https://www.youtube.com/watch?v=dOaGvMaFkbY
Призываю доброанона, который постоянно рейтит мои первые потуги в пхп! Решал задачу из гайда для нюфанек на написание суммы прописью. Тужился около двух недель, в перерывах между основной работой и семейными делами, но упрямо не бросал ее. В итоге родил вот что: https://ideone.com/Pw4DPm Постарался кратко, с максимально необходимыми комментариями. Подскажите, где я хуй? p.s. Где поучиться клинкодингу? Чувствую, если сейчас буду упускать какие-то моменты, потом переучиться будет ОСНЕ сложно. p.p.s. Платиновый вопрос: почему phpformatter, пидорас такой, не пропускает запись массива вида $x=[] ?
>>1940648 Условия задачи жопой читал? Если дабл у обоих- ничья, и смысла играть дальше нет. Выпадение дабла у одного из игроков ничего не меняет, сравниваются суммы. Что выдаст твоя программа, если суммы очков Анона и компьютера будут равны?
2) установить IDE или редактор кода на твой выбор. Платно: PhpStorm, бесплатно: VS Code (+ плагины для PHP), Sublime Text, Eclipse for PHP.
Если ты не на винде, то в редакторе надо настроить запуск PHP программ. Обычно для этого в настройках надо прописать путь к PHP, как именно - зависит от редактора кода.
Если все сделать правильно, то ты сможешь запускать программу одной кнопкой из редактора.
>>1941113 Дружище, дрочить 2 недели такую задачу, пусть и по вечерам, это пиздец. Ты же понимаешь, что у тебя проблема с реализацией алгоритма? Программирование для знающих математику. Кто бы что не говорил. Все эти разговоры, что на деле хватает начальной алгебры — бред. Я даже не знаю как тебе помочь. Ну, реализовал ты кривоработающий код, спиздил куски, а толку? Ты же себя не наебешь, дружаня. Математика качает мозг. Решение подобных задач не должно вызывать решения в течении 2х недель.
Вообще, чтобы запускать у себя на компьютере код, проще всего использовать встроенный в PHP сервер без всяких Апачей. А если хочется заморочиться то да, можно поставить nginx + php-fpm, это будет конфигурация как на продакшене.
>>1939917 Качаешь с сайта рнр архив под винду, если ты под виндой, запускаешь консоль из папки с разархивированным пхп дистрибутивом, пишешь php -a и выполняешь код прямо в консоле в интерактивном режиме.
Это неправильный подход. Начнем с того, что у тебя в конструкторе недоступна переменная $procurementDepartment (так как внутри функций доступны только переменные, которые явно переданы через аргументы) и ты добавить ничего не сможешь.
Также, это не гибко. Завтра добавится новый департамент и мы должны будет переписывать код Работника, который по идее к этому отношения никакого не имеет? Это нехорошо. Вообще, это не задача Работника знать, какие именно департаменты существуют. Он не должен об этом знать и не должен в себе содержать их список.
Есть такой принцип, разделение ответственности. У каждого класса должна быть своя зона ответственности и он не должен заниматься чем-то посторонним.
Тогда уж логичнее передавать не название департамента, а сам объект департамента в конструктор. Это один вариант решения проблемы. Другой вариант - можно вообще не хранить в Работнике, к какому департаменту он относится. Код тогда будет выглядеть так:
// Создаем свободного работника $e= new Employee(....); // принимаем его на работу в Департамент $someDepartment->addEmployee($e);
Плюс такого подхода в том, что работника проще переместить в другой Департамент или уволить. Достаточно обновить информацию в Департаменте. При твоем подходе при перемещении или увольнении надо не забыть обновить информацию и в Департаменте, и в Работнике - больше возни. Еще один плюс в том, что Работник ничего не знает о Департаменте (и при изменениях кода Департамента нам не придется ничего менять в Работнике). Минус этого подхода в том, что работник "не знает", где он работает.
Также, нехорошо, что ты залезаешь внутрь объекта Департамента и напрямую что-то добавляешь в массив. Правильнее вызывать метод addEmployee, как описано в коде выше, а массив закрыть от прямого доступа снаружи. Почему? Ну например, может быть Департаменту надо обновлять какую-то информацию при добавлении Работника, и если добавлять его напрямую в массив, Департамент об этом не узнает. Прочти-ка про инкапсуляцию: https://github.com/codedokode/pasta/blob/master/php/encapsulation.md
>>1941137 Ни одного куска кода нигде спизжено не было, к каждой строчке пришел сам. Вместо хейта можно было бы указать на слабые стороны, не? Если кроме "все хуёво" нечего сказать, то и говорить необязательно.
Не определяй функции с именами внутри других функций (анонимные функции - можно). Так как функцию с именем можно определить лишь один раз, второй раз будет ошибка. Если у тебя вызывать функцию summ_to_text() дважды, то на втором вызове программа упадет. PHP это не JS, тут так делать нельзя.
> $splitArray=[]; Лучше назвать это $groups
> $i=$i+0 Если ничего не требуется делать, то тут можно оставить пустое место.
Брать 3 последние цифры числа проще через $i % 1000 (остаток от деления на 1000). А все, кроме последних цифр получается как floor($i / 1000).
> $regexpLastNumber1='/^[1]$/'; Это очень корявенько, работать с числами через регулярки. Правильнее использовать математические выражения, например
$lastDigit = $n % 10; // последняя цифра if ($lastDigit == 1) ...
> discharge_sum ($dischargeValue,$x) Если вместо $x передавать 3 формы слова, то получилась бы универсальная функция, которая умеет выбирать формы для любых слов, а не только тысяч, миллионов, рублей.
> $spelN Лучше $number
> $spelN=array_reverse($spelN); Это коряво. Лучше передавать массив в функцию в правильной форме, чтобы она не занималась его переворачиванием. Более того, переворачивание логичнее всего сделать в splittingIntoGroups(), чтобы она сразу возвращала массив в правильном порядке.
Получается странная функция: в нее надо передать массив чисел в обратном порядке, и она вернет массив слов - тоже в обратном порядке.
Понятно, что ты так сделал из-за того что у тебя splittingIntoGroups так работает, но это неправильно, что из-за особенностей одной функции мы делаем нелогичной другую функцию.
Есть такой принцип разделения ответственности - каждая функция должна заниматься своим делом и ее не должно беспокоить, что делает какая-то другая функция.
Еще, если подумать, то нелогично, что в smallNumberToText мы передаем массив 3-значных чисел, а она возвращает нам массив слов. Опять же нелогично. Логично передавать одно трехзначное число и возвращать его написание. А потом, если требуется, можно дописать функцию, которая преобразует массив трехзначных чисел в слова.
> $textArray[] Лучше назвать $words
> Эта функция меняет фразы "один тысяча" и "две тысяча" на "одна тысяча" и "две тысячи" соответственно Это очень коряво. Правильнее было бы передавать род в функцию, которая преобразует число в текст, чтобы она брала "одна" вместо "один". То есть у функции 2 аргумента - число и род.
Плюс, функция correct_thousand опять написана нелогично. Она принимает на вход какой-то массив, и почему-то заменяет в нем элемент номер 1. Где тут логика (если не смотреть на остальной код)? Логичнее было бы передавать в нее не весь массив, а только нужную строку. Опять нарушение разделения ответственности - функция "знает" то, что знать ей не требуется и занимается не своим делом.
Старайся делать функции более независимыми друг от друга, делать логичными набор входных аргументов и возвращаемый результат. А не делать их странными из-за того, что где-то в другом месте кода так требуется.
Например: функция принимает 3-разрядное число и возвращает массив слов (или строку, тоже можно).
Удалять лишние пробелы - тоже коряво. Правильнее не создавать их. Например, сделать, чтобы функция возвращала массив слов, а не строку пробелами. И склеивать такой массив через implode(). Или как-то сделать, чтобы лишние пробелы не появлялись.
Например, так:
слова = []; для каждого 3-разрядного числа: если это число > 0, то: добавляем в слова[] написание этого числа доабвляем в слова[] нужную форму слов рубль, тысяча, миллион
> $dischargeArraySpelN[roubles] Пропущены кавычки у roubles.
> if ($splitArray[0]==0){ > $wordAfterRoubles='рублей'; Это (выбор формы слова) ответственность функции discharge_sum и это должно быть написано в ней, а не тут.
В общем, код стоит доработать. Он станет и короче, и читабельнее.
Но в этой задаче нет математики сложнее, чем деление с остатком. Не думаю, что изучение матанализа тут как-то поможет. Тут надо уметь грамотно разбивать код на функции, определять их входные аргументы и результаты, а математика тут особо не нужна.
Вопрос к рабочим анонимусам. Как на галерах обстоит вопрос с рабочими ПК? У каждого свой личный? Мне никто не запретит, к примеру, накатить на рабочий комп любимый арчик с тайловым wm и поставить аниме на заставку?
>>1941176 Анон, никакого хейта. Ты над примитивной задачей ломал голову 2 недели. Тебе определённо стоит задуматься над тем нужно ли тебе программирование. Если уж так сильно хочется, то определись, что ты хочешь программировать. Может стоит взглянуть в сторону бухгалтерии с их 1С? Есть неплохая книга https://www.labirint.ru/books/723474/ попробуй из неё для начала решить хоть сколько-то задач, чтобы затем браться за то, что в шапке. У тебя проблема с пониманием и решением задачи и её переноса на код.
>>1941181 Математика тут не нужна? Математическое мышление и комплексный подход к решению задачи нужен. Увы, но математику не зря считают основной всех наук. Без этих вещей никуда.
Важна не выученая формула, а принцип работы. Понимаешь, что я хочу донести? У человека проблемы с алгоритмом и пониманием. Это не связанное с программированием напрямую действие.
>>1941226 BYOD давним давно в моде. У нас программисты себе заказали топовые 27 iMac. Охуели в край. Я себк ноут для рвботы просил — купили НР, но по характеристикам не плохой. Матрица говно. Вдмины всё орали, чтобы не удалял винду по корпоративным правилам, но я из послал назуй и накатил то, что мне нужно.
>>1941248 Это к тому, что ты можешь со своим девайсом приходить на работу. Я же написал про ноут как пример, что смог накатить самостоятельно, что мне нужно для работы. Но учти, что далеко не везде такая свобода.
>>1941180 Анон, не знаю, зачем ты этим занимаешься, но очень надеюсь, что закон кармы сработает и добро вернется к тебе. Спасибо. >>1941232 Две недели над задачей- это две недели с учетом наличия основной работы и семейных дел. В итоге далеко не каждый день удавалось вырвать по часу-два на обдумывание кода и его написание. Порой даже не успевал сконцентрироваться и вспомнить, какая переменная для чего мне нужна. Программирование пока рассматриваю просто как баловство, как кроссворд, над которым интересно поломать голову. После того, как Анон указал мне, что пользоваться регулярками для чисел- дурной тон, у меня случился фейспалм от того, что я сам до этого не додумался. Я просто учусь, мне незнакомы нормы и приемы, кажущиеся тебе очевидными и базовыми.
>>1941269 Ты словно не понимаешь про что я пишу. 2 недели даже в неспешном темпе это долго. Я не говорю, что ты должен алгоритм за секунду построить в уме и воплотить его в коде.
Для себя программирование это дело полезное, пригодится в любом случае, но лучше поеби мозги с решением задач из книги, которую я тебе скинул. Почитай книгу: грокаем алгоритмы. Программирование это не про написание кода, это про размышление как реализовать это в коде.
>>1941947 я читал, что грокаем алгоритмы это очень слабая книга, типа для детей прям, она точно меня продвинет хоть насколько-нибудь к пониманию, как использовать программирование для решения задач? если что я не он
>>1941269 кстати, вначале, когда только начал изучать программирование, задачи очень тяжело шли, у меня в школе/вузе не было никогда его, наверное поэтому постепенно я начал решать их быстрее, потом начал удивляться, как вообще я мог так долго решать такую чепуху?
Анчоусы, а что принято делать в ларавеле если логика создания модели сложнее, чем "просто впихнуть валидные данные из реквеста в базу данных"? Оборачивать создание модели в метод сервиса? Переопределять метод create()? Или может поместить всю эту логику в еще в какое-то место, о котором я даже не подозреваю?
>>1942080 >что принято делать в ларавеле если логика создания модели сложнее То же, что и не в ларавеле.
>Оборачивать создание модели в метод сервиса? Переопределять метод create()? Или может поместить всю эту логику в еще в какое-то место, о котором я даже не подозреваю? Выносить куда-нибудь, например в сервисный слой. А в особо сложных случаях - в доменный слой
>>1942047 Если туго с алгоритмическим мышлением, можно порешать задачки, например с кодварса. При решении задач сначала описываешь решение (хоть на бумаге), затем переводишь в код.
>>1941947 Спасибо. Учту и ознакомлюсь с книгой, обязательно. Вообще, еще до того, как начал эту задачу, решил, что нужно расширить кругозор, а не просто задрачивать гайд Анона. Скоро еще должен подъехать php 7 в подлиннике, на бумаге.
>>1942204 У меня рнр в подлиннике есть еще 5 версии. В 2009-2010 годах собирался вкатываться в программирование по ней))) 7 тоже покупал, но так и не вкатился.
Начал изучать Laravel, малость охренел с такой вещи как фасады. Их часто вообще используют ИРЛ? Подозреваю что на аутсорсе да, ибо это попросту намного быстрее. А в продукте? Вроде понимаю что это дичайший антипаттерн, но и кажется что глупо их не использовать, если уж предоставляют такую возможность. В итоге у меня все сервисы получаются статическими, это вообще нормально? Не стыдно будет такое на гитхабе для портфолио держать?
>>1942659 >кажется что глупо их не использовать, если уж предоставляют такую возможность Спорный момент. Фасады нужны для быстрой разработки, но они так же ухудшают поддерживаемость кода. Так что нужно знать, когда их применять.
>В итоге у меня все сервисы получаются статическими, это вообще нормально? Можешь вместо использования фасадов явно инжектить свои сервисы куда надо
Подскажите, пожалуйста, в чем может быть причина. Есть видеохостинг на ларавел, видео сжимаются с помощью ffmpeg. Видео, которые весят больше 50мб тормозят. Сервер на ssd, порт 1Gbit/s. Качество видео 1920x1080 30fps.
Хочу научиться делать сайты на пыхе, в шапке про апач написано, можно ли через опенсервер пробовать скрипты выполнять? И в чем писать код, в блокноте? Простенькие примеры я выполнял через онлайн интерпретатор.
>>1943331 Речь про более высокий уровень. Не про "доступ к базе данных", а про "доступ к доступу к базе данных".
ООП программа - это гигантская матрешка. Каждый объект всегда вложен в другой. И если делать все по уму, то есть единый "чертеж" этой матрешки - конфиг. На самом старте приложение анализирует запрос пользователя и в соответствии с чертежом собирает нужную матрешку.
Если тебе нужен "доступ к базе" в твоем "охуенном сервисе", то ты указываешь это на "чертеже", в конфиге. И при сборке нужный объект будет доставлен в нужный сервис. Это дает дополнительные степени свободы, ты можешь меняя конфиг менять "доступ к базе" на "доступ к другой базе" или "доступ к файлу", не меняя ни строчки кода. Но разумееится чем сложнее здание, тем сложнее чертеж. Нужно понимать картину в целом и вообще получается дохуя когнитивной нагрузки.
Поэтому в ларавеле и придумали "фасады". Вообще фасад это неправильное название, по факту это сервис локатор, но все как-то привыкли. Фасад позволяет получить доступ к любой части матрешки напрямую, прямо здесь и сейчас, без чертежей и конфигов. Это быстро, думать нихуя не надо, знать о программе нихуя не надо. Но при этом никакой "картины в целом" больше не существует. Чертеж размазан по программе со всеми вытекающими последствиями. Если ты пишешь софт на заказ и больше его никогда не увидишь, то просто идеальный вариант. Поэтому собственно лара вообще и взлетела.
>>1943449 Спасибо за широкий ответ, он скорее относится к моему первому вопросу >>1942659 Второй вопрос >>1943331 как раз о низшем уровне. О том, что именно будет правильнее внедрять в сервис для доступа к БД. Не инстанс модели же? Вообще, я был бы очень рад не задавать здесь дебильных вопросов, но нормальных примеров просто нету. В доках лары одни фасады. Решил чекнуть опенсорсные проекты на ларе - так вообще веру в человечество потерял. В одних толстейшие контроллеры в которых по 50 use в самом верху. В других сервисы напрямую взаимодействуют с реквестом и т.д. Если у кого-то есть пример хорошего кода на Laravel, буду очень признателен если поделитесь.
А че вообще делоть на уровне после того как только только установил опенсервер. только только прошелся по основам языка есть основы еще и других языков грубо говоря на JS и Python написано по калькулятору. Есть базовое представление о HTML/CSS. Хочется взять да и захуячить какой нибудь проект, но есть чувство что первая задача из шапки будет сложновата список учеников
Где определять логику CRUD-а в ларавеле? Есть куча статей, что паттерн репозиторий лучше не ипользовать, но где тогда все прописывать? Прямо в контроллере?
Аноны, читаю сейчас пасту ОПа про алгоритм обработки данных с формы, а именно ООП подход https://github.com/codedokode/pasta/blob/master/forms.md И что-то не могу до конца понять посыл ОПа. В плане того, что он предлагает нам сделать отдельный класс UserForm, хранить в нем сущность User, отдельный класс валидации и проводить валидацию непосредственно в классе UserForm после заполнения уже изначально невалидными данными.
Вот его пример: $post = new Post; $postForm = new PostForm($post, $postValidator); Сначала заполняется изначально невалидными данными: $postForm->fill($_POST); После он проверяет: $errors = $postForm->validate($post);
Какой смысл в том, чтобы изначально создавать объект, в котором уже находятся невалидные данные ? И что делать в случае, если у нас у сущности Post на свойствах стоят тайп хинты, тогда каким образом мы будем ее заполнять, если у нас прилетит вместо строки условно массив, при попытке записать в это свойство вылетит ошибка. Аноны, объясните, это я тупой и не понимаю, что пытается донести ОП или какой правильный подход в таких ситуациях
>>1944137 Тайп хинты на свойствах появились буквально вчера, раньше такого не было. Ну и у ОПа видно что пример сильно вдохновлён симфони формами, где один контроллер и отрисовывает форму по GET, и обрабатывает по POST, вот из-за этих вариантов и получается что интерфейс немного странно выглядит. Вообще лучше представить что объект $post или $user в таких примерах это не прям сущность из бд, а объект, который представляет поля формы, просто в несложных формах можно срезать и сделать это дело одной сущностью, чтобы потом руками не писать например $user->changeName($userForm->name) и т.д. (представь что таких полей много)
>Какой смысл в том, чтобы изначально создавать объект, в котором уже находятся невалидные данные ? Если объект представляет собой данные из формы, а не настоящего юзера или пост, значит он может находиться в невалидном состоянии, просто для простоты в тех же доках симфони эти понятия совмещаются, всё херачится прямо в контроллере в нескольких ифах и как бы на этом ок. Когда у тебя очень много разных форм и сущностей то такой подход конечно намного быстрее
>>1944161 >Вообще лучше представить что объект $post или $user в таких примерах это не прям сущность из бд, а объект, который представляет поля формы Так у ОПа там вроде бы идет явное разделение, что Post это сущность, а PostForm это объект, которые представляет именно данные из формы (в который непонятно зачем передается еще и сама сущность) И как в итоге лучше делать в таких ситуациях, не убирать же тайп хинты ?
У меня есть идея, что у нас есть сущность, есть объект (данные, которые ожидаются из формы) в который мы передаем валидатор и сами данные, что-то вроде: $postData = new PostData($validator, $_POST) Там уже сразу проверяем, валидные данные или нет. Если все данные валидные, то заполняем свойства этими данными, а если нет, то заполняем к примеру свойство с ошибками. И вроде бы так же остается разделение ответственности валидации, о чем ОП и говорил, что валидации без разницы, какие данные она валидирует. Потом уже проверяем, если это свойство пустое, то отправляем этот объект в сущность $post = new Post($postData); И делаем дальше необходимые действия. Правильный ли это подход ? Если нет, то как правильно это нужно сделать
>>1943571 Запускать php tvoyFail.php Можно поставить сервер и запускать, тестировать phpunit, но тебе далеко ещё и судя по тому какие вопросы задаешь и вовсе не придется
>>1944736 Зачем тебе PHP? Это мертвый язык, посмотри в любую статистику - например от хабра или dou. Оплата труда самая низкая после 1C, вакансий становится меньше, новых проектов меньше. Медианный опыт работы php разраба - 6 лет. Да и люди в этом треде как видишь злые, бесплатно хрен помогут тебе. Питон или js намного круче сейчас, даже сам Хауди Хо об этом говорит. Го к нам в питон тред: https://2ch.hk/pr/res/1943168.html#1944728
>>1944739 Всё верно - пхп умер фактически. Остались только легаси проекты на нём - остальные на ноду перешли, или Питон. Я сам после пяти лет работы с ПХП перекатился на Го.
>>1945393 К этому моменту $procurementDepartment->workers = $ИванПетров; массив workers уже проинициализирован. Так что можешь смело пушить в массив свои работничков.
Ну и у пхп такое поведение, что при добавлении в непроинициализированный массив, он создаст новый массив хотя так лучше не делать, т.к. неявное поведение
Вопрос по принципу подстановки Барбары Лисков. Допустим есть абстрактные классы AbstractA и AbstractB. От них наследуются A и B соответственно. AbstractA в конструкторе требует AbstractB. И если я в конструкторе A пропишу что аргументом должен быть не какой-нибудь AbstractB, а конкретно B, все будет хорошо работать и даже IDE ругаться не будет ( будет ругаться если не выполнить parent::construct($b) ). Это нарушение LSP? Потому что если я проведу аналогичные действия не с конструктором, а каким-нибудь другим методом, выбрасывается Fatal Error: Declaration of A::method(B $b) must be compatible with BaseA::method(BaseB $b)
>>1945684 И еще вопрос. Возможно есть какой-нибудь паттерн, по которому я смогу осуществить желаемое ( не копипастить у множества классов одинаковые методы, которые отличаются лишь требуемым типом аргумента при неверном типе безоговорочно должно выбрасываться исключение )? Вроде видел как в джаве что-то похожее через дженерики реализуется, но это не точно.
Принцип Лисков требует, чтобы объект-наследник мог использоваться в коде вместо предка. Принцип относится к использованию уже созданного объекта, а не к его созданию.
Поэтому конструкторы предка и наследника не обязаны быть совместимыми. Они могут быть абсолютно разными.
А вот обычные методы в наследнике должны быть совместимыми с предком. Потому нельзя при наследовании заменить тайп-хинт AbstractB на B - это сломает код, который передает в этот метод объект, отличный от B. Раз предок принимает такие объекты, то и наследник должен.
> Возможно есть какой-нибудь паттерн, по которому я смогу осуществить желаемое ( не копипастить у множества классов одинаковые методы, которые отличаются лишь требуемым типом аргумента
Плохо, когда код снаружи залезает внутрь объекта и что-то меняет в массиве. Тебе лучше сделать в классе Department метод addEmployee(Employee $e) и с его помощью добавлять работников, а прямой доступ к массиву $workers закрыть.
Вместо одной функции countAll(), которая считает все характеристики сразу, лучше сделать отдельные функции для подсчета зарплаты, кофе итд. А то получается, что нам нужно например только кофе, а возвращают массив с кучей лишних данных.
> $isLeader = "" тут для обозначения, является ли человек лидером, лучше использовать значения типа bool, то есть true и false.
Далее, ты делаешь ошибку. Базовая ставка и итоговая (с учетом надбавок) зарплата - это две разные величины. Ты же не сохраняешь базовую зарплату, а хранишь только итоговую. Из-за этого тебе будет сложно пересчитывать зарплату при смене ранга или статуса босса.
Фуу, что хорошего в ноде? Нечитаемая лапша с 10 уровнями вложенности, везде уродливые промисы вместо линейного синхронного кода, по 10 анонимных функций вложены друг в друга. Нет тайп-хинтов, потому читать код невозможно. Нет private/protected, костыли (прототипы) вместо нормального ООП. Если ошибиться в написании свойства (this.errror), то никаких ошибок не выдастся. Нет Доктрины и Симфони, потому собирают из сотен библиотек самодельный фреймворк.
Не верится, что кто-то выберет это вместо PHP. Подозреваю, что на начальном этапе, где не требуется поддерживать или рефакторить код, на ноде еще как-то можно писать, но при появлении первых сложностей эти горе-работнички просто сбегут и оставят работодателя с кучей нечитаемого кода.
Судя по тексту ошибки, тебе надо установить Visual C Redistributable (распространяемый компонент Visual Studio, не саму Visual Studio) версии 14.28 или выше с сайта майкрософт.
>>1945736 >Нечитаемая лапша с 10 уровнями вложенности Как напишешь - так и будет.
>везде уродливые промисы вместо линейного синхронного кода, по 10 анонимных функций вложены друг в друга Наверное даже именно поэтому в 8 версию пхп не завезли поддержку стрелочных фукнций. Ой падажжи...
>Нет private/protected А ты каждый объект рвёшься вывернуть наизнанку или документацию к библиотеке не читаешь?
>костыли (прототипы) вместо нормального ООП Тайпскрипт, алло.
>Нет Доктрины и Симфони, потому собирают из сотен библиотек самодельный фреймворк. >Симфони Который сам по-сути набор независимых библиотек? Неожиданно.
>>1945698 >( не копипастить у множества классов одинаковые методы, которые отличаются лишь требуемым типом аргумента при неверном типе безоговорочно должно выбрасываться исключение )? Не совсем понятно что ты имеешь ввиду. У меня сильное подозрение, что у тебя что-то пошло не так с архитектурой.
>В плане того, что он предлагает нам сделать отдельный класс UserForm
Логично же для представления набора данных из формы сделать объект. Нам ведь надо как-то их хранить, передавать на проверку. Не использовать же для этого массив. Если данные правильные, то мы их перенесем в User, если нет - выведем форму с этими данными для исправления ошибок.
Мы не всегда можем для этого использовать User, так как набор полей и их значения в форме могут отличаться (например: в форме может быть меньше или больше полей, чем в сущности. Или в форме есть 2 поля ввода пароля, а в сущности - только поле с хешем от пароля).
Если список полей в User и в форме совпадают, то в принципе может хранить данные формы в объекте User, без использования UserForm.
Так (отдельные классы для сущности и для формы) сделано в Симфони, правда там сам класс формы один для любых форм, отличается только конфиграция этого класса.
> Сначала заполняется изначально невалидными данными Они могут быть и валидными. Мы это не знаем, пока не проверим их.
> Какой смысл в том, чтобы изначально создавать объект, в котором уже находятся невалидные данные ?
Мы создаем объект, в котором хранятся введенные пользователем данные, они могут быть валидные или нет.
> И что делать в случае, если у нас у сущности Post на свойствах стоят тайп хинты, тогда каким образом мы будем ее заполнять, если у нас прилетит вместо строки условно массив, при попытке записать в это свойство вылетит ошибка.
Мы принудительно преобразуем значение в строку с помощью strval(). Ведь мы знаем, какие типы полей в нашей форме и знаем, что это поле является строкой, а если пришла не-строка, то это не данные из формы, а хакер ищет уязвимости. Потому мы принудительно преобразуем данные в строку в любом случае.
В простейшем варианте код в UserForm может выглядеть так:
public function fill(array $data) { $this->name =strval($data['name'] ?? ''); ... }
В более сложном случае мы можем не писать руками эти присваивания, а использовать библиотеку JMSSerializer или Symfony Serializer, которая умеет заполнять объект свойствами из массива с преобразованием типов (типы прописываются в объекте как аннотации).
> а PostForm это объект, которые представляет именно данные из формы (в который непонятно зачем передается еще и сама сущность)
Идея была в том, что если у тебя в форме 5 полей совпадают с полями сущности, а 2 поля отличаются, то можно в PostForm хранить только эти 2 поля, а оставшиеся 5 полей хранить прямо в Post (для чего он и передается в PostForm).
Также, в этом случае мы можем написать основной валидатор, чтобы он проверял объект Post (и был независим от формы), и небольшой дополнительный валидатор для 2 оставшихся полей формы, которых нет в Post.
Момент с валидацией тут основной. Если мы напишем валидатор для PostForm, то мы получим намертво привязанный к форме валидатор, которым нельзя проверять приходящие из других источников объекты Post, например, из БД. Потому валидатор лучше делать для объекта Post. И для этой цели Post вкладывается в PostForm - чтобы можно было передать его валидатору.
Иногда бывает еще сложнее, часть правил относится к любым объектам Post, а часть правил валидации относится только к этой форме (то есть их можно нарушать, например, при создании объекта программно). Тут тоже приходится делать 2 валидатора: для Post и для PostForm.
> Там уже сразу проверяем, валидные данные или нет. Если все данные валидные, то заполняем свойства этими данными, а если нет, то заполняем к примеру свойство с ошибками
Тут минус в том, что валидатор намертво привязан к форме и не может проверять данные из других источников.
> $post = new Post($postData);
Тут косяк в том, что с таким конструктором Post намертво привязан к форме (PostData) и невозможно создать его без формы, например, программно.
Здесь непонятно волшебное число 10. Лучше сделать переменную $percent = 0.1 и использовать ее для читаемости. Вместо $years += 1 можно писать $years++; Условие $money < 1000000 можно поместить в заголовок цикла и тогда if будет не нужен.
Проблема кода в контроллерах в том, что его нельзя повторно использовать (вызывать откуда-то). Например, у тебя есть в контроллере код простановки лайка. Из-за того, что он в контроллере, обрабатывает данные из $_POST, $_COOKIE, $_SESSION ты не можешь вызвать этот код из другого места, чтобы программно поставить лайк.
А вот если бы он был в сервисе и изолирован от $_POST и тд, то его можно было бы вызывать откуда угодно. И тестировать проще. И читабельность выше.
Злоупотребление фасадами может навредить. Ну представь, ты решил написать сервис для простановки посту лайка, но в коде сервиса обращаешься глобально к функциями вроде session(), фасадам Auth, Cookie, Request. Тогда твой код нельзя будет повторно использовать (вызвать, чтобы программно поставить лайк), так как он завязан на реквест и сессию, которых может не быть при запуске в командной строке.
Лучше было бы передавать нужные параметры (вроде текущего пользователя) явно через аргументы.
> О том, что именно будет правильнее внедрять в сервис для доступа к БД. Не инстанс модели же?
Решение неправильное. Во-первых, нельзя пытаться получить букву из строки с помощью скобок: $text[$i]. Это возвращает не i-ю букву, а байт, а одна буква может состоять из нескольких байт. Вот урок про это: https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md
Далее, это неправильное сравнение: if ($count == $words) так как ты сравниваешь число совпавших букв с числом слов в тексте. Они не обязаны быть равны.
>>Слово array в строке с ошибкой лишнее. > Как я должен был это понять? Ты должен знать синтаксис PHP или использовать проверку в редакторе кода, которая подчеркнет ошибку. Слово array использовалось в старых версиях PHP для создания массива, например array(1, 2, 3) (сейчас пишут просто [1, 2, 3]), непонятно, зачем оно там вписано в коде.
>>Из-за этого тебе будет сложно пересчитывать зарплату при смене ранга или статуса босса. > Почему?
Ну попробуй сейчас в Employee сделать метод changeRank() и чтобы после его вызова все зарплаты, кофе, страницы пересчитывались корректно. У тебя вряд ли получится, так как в некоторых случаях ты сбрасываешь this->papers в ноль и теряешь исходное значение числа произведенных страниц.
>> Нет private/protected > А ты каждый объект рвёшься вывернуть наизнанку или документацию к библиотеке не читаешь? А у тебя к каждому объекту отдельная документация, где написано, что с ним можно делать и что нельзя? В PHP неправильный доступ невозможен на уровне языка.
>>1945761 >>1945761 У тебя отличная чуйка. Пока я пытался расписать тебе всю задуманную архитектуру, я сам понял что в ней не так и почему она говно. Еще раз спасибо)
>>1917780 >>1917785 >>1917788 такой вопрос написание нейросетки для написания сайта (интернет магазина,визитки,бложика) насколько реально? фронт энд уже преставил но чуствую с бекэндом ебнусь
интересная ката, помогает потихоньку осиливать встроенные функции методы? strtr/str_replace и всё такое, но можно и через циклы (как я и решил, так как очередной вкатун)
Нейросеть - это же не искуственный интеллект, который будет за тебя работать. Это просто алгоритм, который обучают при подаче на вход набора чисел выдавать на выходе другой набор. Так что генерировать твоя нейросеть сможет только то, что в нее перед этим заложили.
Всем привет! Решил попробовать себя в веб-программировании. Подскажите, пожалуйста, сколько примерно времени у меня может уйти на изучение стека PHP, JS, MySQL на базовом уровне, если я буду заниматься ежедневно по 6-8 часов? Пока только освоил HTML/CSS. В шапке написано 6-8 месяцев нужно изучать, но не указано, сколько при этом нужно часов в день заниматься.
>>1947239 понял, спасибо На самом деле у меня других вариантов нет, я живу в городе 300к населения и в городе мало контор, и чтобы вырваться в мск и другие сферы программирования, я должен хоть с чего-нибудь начать, хотя бы с веба
>>1947214 >Подскажите, пожалуйста, сколько примерно времени у меня может уйти на изучение стека PHP, JS, MySQL на базовом уровне, если я буду заниматься ежедневно по 6-8 часов? У всех очень по-разному идёт. Непонятно как у тебя вообще с ИТ и информатикой, какой бэкграунд, как быстро обучаешься, способность к самообучению и тд. Неясно так же что подразумевается под "на базовом уровне" - на этом уровне ты никакую работу уже не найдёшь, скорее всего. Просто дай себе месяц регулярных ежедневных занятий, а там посмотри - нравится или нет.
Я правильно понимаю алгоритм- что при любом занесении к-л изменений в БД, после этого идет код, где в сессии запихиваем то,что запихивали в БД,чтобы потом лазя по страничкам все было сохранено?
Я думаю, что неправильно. Зачем дублировать данные, помещая их и в базу данных, и в сессию? А обновлять и удалять ты тоже в двух местах сразу будешь? Бред какой-то.
Сессия вообще ненадежное место для хранения данных. Если человек зайдет на сайт с другого компьютера, то у него будет новая пустая сессия. Потому те данные, которые надо сохранять надежно и надолго, стоит помещать в БД.
>>1947842 так они и так в бд. вот я вхожу на сайт,аутентификатор ищет меня,а потом извлекает из бд имя,фамилию,город в сессию,что бы была страничка юзера(как в ВК)
Эта уязвимость давно уже неактуальна, она возможно только если разрешить передавать id сессии через GET-параметры (/script.php?SESSION_ID=1234). Сейчас по умолчанию это отключено и уязвимость не сработает, если только специально не поменять настройки.
При этом, session_regenerate_id никак от этого не спасет.
Что тебе мешает брать эти данные из БД? Зачем их дублировать в сессии? Дублирование только усложняет жизнь, например, если пользователь поменяет имя, надо менять его и в сессии.
Если хочется кешировать данные, то для этого есть редис, который с кешированием справляется гораздо лучше, чем сессия которая по дефолту хранит данные в файлах.
>>1948033 >Сейчас по умолчанию это отключено и уязвимость не сработает, если только специально не поменять настройки. Но ведь PHPSESSID передается в куках, а куки можно украсть.
Чтобы украсть куки, нужна либо XSS-уязвимость в приложении, либо получить доступ к компьютеру.
Если ты можешь украсть куки, ты и любые запросы можешь делать от имени пользователя. Session fixation тебе просто не нужна. Ну и regenerate_session_id тут никак не поможет.
Не понимаю, как организовать корзину в ларавеле. Допустим, у нас есть таблицы Cart (id, user_id, session_id, name, email, phone, address) и Cart_item (id, product_id, cart_id, quantity) Вот юзер зашёл на сайт, стартовала сессия, в куку записали session id. Юзер нажал "добавить в корзину" некий товар. Сработал аякс(!) скрип и в специальный аякс контроллер ушёл запрос на добавление. Контроллер проверяет, существует ли для этого session_id запись в Cart, если не существует, то создаёт. Ок, на этом этапе всё вроде более-менее логично. Но дальше надо проверить, существует ли уже такой заказ в Cart_item? Если нет, со создать, если есть, то инкрементировать в нём quantity. То есть из аякс контроллера управлять Cart_item моделью. Херня какая-то. Или это норма? То же самое с уменьшением количества, нужно либо уменьшить quantity, либо (если оно было равно 1) вообще удалить всю запись из Cart_item.
>>1948299 А что смущает конкретно? Я не понял. Вообще в контроллере логично создавать модели и управлять ими. Для красоты можешь в класс Cart добавить метод addItem() и внутри него уже делать операции с CartItem.
>>1948313 Смущает то, что фактически я пишу рест контроллер, когда они есть из коробки. Но только обычный, без аякса. Вот и подумал, что пишу велосипед.
>>1948353 Задать-то можно, но фишка рест контроллера в том, что он оперирует с пост/пут/патч/делет реквестами (то есть, роутер посылает автоматически нужный тип запроса к нужному методу контроллера). А аякс только пост посылает. Вот как раз прикручиванию этого костыля пример по сылке выше и посвящён.
>>1948299 >Однако, это же круд получается. Добавить/редактировать/удалить сущность. И, по идее, для этого нужно использовать рест контроллер. Аякс рест контроллер. Но таких нет.
Ты пытаешься понять то, что тебе сейчас не нужно. У тебя есть урл, и его програмный обработчик, это твой route. Дальше ты можешь делать что угодно. В твоём кейсе, у тебя есть какой-то CartController, и у него много разных методов, например addItem(item_id), incrementItem(item_id) и т.д. Ты у себя в рутах и пишешь что-то на уровне Route::post('cart/add', 'CartController@addItem'), понятное дело с разными проверками на авторизацию(это можно писать прямо в контроллере, можно выносить в мидлвары и группировать руты как AuthOnly, суть ты понял. В самом контроллере делаешь что тебе нужно. Если ты знаешь что твой CartController@addItem будет вызываться только через аякс, то возвращаешь json ответ, если не только через аякс, то можно сделать проверку в самом конце обработчика вроде if ($request->wantsJson()) { ... } else { redirect(...) }, wantsJson вроде проверяет как и Accept заголовок, так и Requested-With: XMLHttpRequest, можешь вообще явно на каждый рут передавать доп. параметр вроде format, который по дефолту равен html. Если тебя смущает то, что ты базу дрочишь прямо в контроллере, то не смущайся, если хочешь то сделай отдельный сервис(отдельный пхп класс в отдельной папочке, у которого может быть или небыть богатая логика и вот это всё) и дергай всё через него
На сайте есть алерт, сообщение которого зависит от некой переменной. Сейчас такой кейс, что таких алертов может быть несколько и различаются они только сообщением алерта. Вынести весь html код алерта в отдельный файл и просто подключать его или лучше сделать что-то типа AlertUtil и просто дергать у него статический метод, который будет принимать дескрипшн алерта и выплевывать html код. Что посоветуете, аноны ?
Вообще, запросы на увеличение/уменьшение кол-ва - плохая идея, так как они не идемпотентны (если произойдет ошибка и запрос отправится повторно, то кол-во товара изменится 2 раза). Лучше слать запрос вида "задать кол-во товара X равным Y". Его можно повторять сколько угодно раз и ничего не изменится. Также, надо сделать валидацию, что такой товар существует, что его достаточно в наличии.
Операцию изменения количества наверно правильнее сделать в сервисе. Потому что завтра тебе захочется, например, добавлять в корзину подарок и как ты это будешь делать? Код в контроллере не повторно используемый, а сервис можно будет вызвать для добавления подарка.
Если у тебя все программа умещается в один файл на 200 строк, то можно. Если приложение большое, то надо разделять файлы с бизнес-логикой и с отображением данных.
Я думаю, просто кто-то один придумал такой подход и все его бездумно копируют. Наверно, первоначально идея была в том, чтобы снизить нагрузку на базу за счет кеширования данных в сессии. Но по моему, так это корявый подход, а для кеширования лучше использовать более подходящие движки вроде redis.
Более того, в учебном приложении, которое ты делаешь только для себя, большой нагрузки никогда не будет.
Хороший учебник должен объяснять, зачем это делается, а не предлагать копировать код, не понимая, зачем он нужен.
>>1948979 > Yii? Yii безбожно устарел + там хватает своих неочевидностей и магии. Если хочется окунутся в легаси 10летней выдержки, то бери этот фреймворк, работы на наш век хватит
>А какой РНР-фреймворк быстрее всего изучить для нуба? Зависит от твоего подхода к разработке. Если склонен к хуяк-хуяк, то ларавел. Если к тырпрайзу - симфони
>>1949064 В простейшем случае можно ограничится одним полем в таблице юзеров is_admin, можно поставить enum или даже внешний ключ на список ролей. Можно завести систему ролей и прав RBAC (права к ролям, роли к юзерам).
>>1949069 > можно поставить enum или даже внешний ключ на список ролей. шта? >>1949070 для админа.где нибудь ссылка мелким шрифтом на основной странице внизу,которая переведет на форму ввода его логин(мыло) и пароль
>>1949072 >для админа.где нибудь ссылка мелким шрифтом на основной странице внизу,которая переведет на форму ввода его логин(мыло) и пароль Ну сделай так. Либо просто отдельным роутом вида site.com/admin без явно кнопки/ссылки если юзеру не положено знать про админку
> можно поставить enum или даже внешний ключ на список ролей. >шта? enum в таблице user поле role и варианты: user, admin либо вынести доступные роли в отдельную таблицу user_role в ней будет 2 записи - роли user и admin в таблице user поле role_id fk на таблицу user_role
Кажется, автор задачи сам неправильно решил, ведь при его решении "а" будет тоже искаться, а по условию такого не должно быть. Сам решил вот так: echo preg_replace('#a[^\\sa]+a#', '!', 'aba acacca azzza wwwwa aaa');
Что скажете? Я что-то не так понял, или все-таки я сделал правильно?
>>1949086 >enum в таблице user поле role и варианты: user, admin либо вынести доступные роли в отдельную таблицу user_role в ней будет 2 записи - роли user и admin в таблице user поле role_id fk на таблицу user_role как эта тема называется(хочу почитать)
Я где-то слышал, что если мы перебираем в foreach результат какой-то функции, ну например: >foreach ( $model->all() as $model ) То эта функция будет вызываться при каждой итерации. Это правда?
Аноны, подскажите по архитектуре. Суть такова - есть приложуха на slim, пытался васянить чистую архитектуру, active-domain-responder, eloquent ORM, но получилась хуита такого плана - экшены вызывает сервис из слоя домен, а в сервисе у меня полнейший венегрет. Я стараюсь делать провайдеры которые в сервисе вызываются, и которые в себе уже вызывают ORM классы ( которые у меня в отдельной папке в условно одну кучу, так как нужны в каждом сервисе). Но чет мне это все не нравится. Че почитать что бы правильно сделать. Про всякие "сущности" вообще нихуя не понимаю.
Иваны, есть одна проблема, смежная с ПХП. Недавно, ради интереса и опыта, связался с одним челом, который предложил вместе сделать сайт - типа он верстает, а я сделаю функционал и натяжку его вёрстки. Мне делать было нех и я согласился неглядя. Ну там речь шла о небольшом блоге-статейнике, как мы с ним уговорились. Первые звоночки прозвенели когда он начал рассказывать какие сайты как много зарабатывают, не сверстав даже главную. Потом он начал мочить по функционалу - какой-то форум захотел, разделы блядь, ещё какую-то неведомую срань. Как выяснилось этот перец вообще ни в зуб ногой по сайтам и вебдеву и тупо копирует увиденное у других. Ну а потом он дал свою вёрстку - чтобы её натянуть мне нужно будет всё перевёрстывать т.к. она запилена в каком-то визуальном редакторе под другую CMS. Я ему предлагал тупо взять левый дизайн и вёрстку и делать на ней, но он сам хочет верстать. Теперь вопрос - как мне его слить по-тихому? Я придумал пока 2 варика: 1 - ебать ему мозг правками по вёрстке пока сам не свалит, 2 - сказать ему прямо, что я ебал работать с его материалом и без чёткого плана он составить его точно не сможет. Что лучше?
>>1949925 >active-domain-responder Какой ещё ADR, если Слим на MVC работает? Сдаётся мне, что ты не совсем понимаешь что делаешь - для ADR сам фрейм пиши. Да и вообще он бесполезная хрень, если подумать - в норме контроллеры тонкие, и если ещё и разделять на экшон и респондер логику, то там по 2 строчки кода будет. И по 25 бойлерплейнта из неймспейсов и структур ООП. Из контроллера вызывай сервис, где содержится логика работы приложухи. Всё.
>>1950018 >Работаешь бесплатно? Думал попрактиковаться немного, и, если получится, то сесть на поддержку этого сайта. Теперь хуй подпишусь на такое - гемор один.
>>1950027 зачем такой "коллега" нужон? капец, что сложного просто сверстать адаптив 1 страницы за день? даже не зная ничего не уйдет больше трех дней короче, тебе проще самому взять все сверстать и натянуть это дело, как нравится
>>1950064 >зачем такой "коллега" нужон? Я подразумевал, что он ещё и контент пилить будет - сайт по тематике которую он знает.
>что сложного просто сверстать адаптив 1 страницы за день? даже не зная ничего не уйдет больше трех дней Ну вот он не знает и верстает 3 дня одну страницу, а на выходе меню из <label> без <a>, стили впердолены прямо в разметку блоками, причём перекрывая друг-друга мне это разгребать весь день придётся при натяжке, 2 футера и прочий трэш, который хочется развидеть.
>проще самому взять все сверстать и натянуть это дело, как нравится Я джва раза предлагал взять\украсть нормальную вёрстку. Он морозится. Но зато постоянно скидывает сайты и спрашивает - сложно ли их делать, будто мне делать нех кроме как оценивать чужую разработку.
>>1949991 >>Сдаётся мне, что ты не совсем понимаешь что делаешь - для ADR сам фрейм пиши.
Так и есть, если не в напряг распиши в чем суть ADR? Или статью какую. Я когда пердолился со слоистой архитектурой, особенно как пример отделения логики приложения от реализации БД - вроде как типа понял. Но потом дошел до реализации, с ORM моделями елоквента ( в которых как часто в гайдах и показывают - какая то бизнес-логика живет обычно ) - и понял что хуита у меня а не слои.
>>1950124 >в чем суть ADR? Там методы из контроллера в объекты инкапсулируются, которые и вызывают бизнес-логику, потом результат уже отдают респондеру, который подгружает шаблон и тд. Я сейчас даже не вспомню конкретику. Такое есть смысл пилить при толстых контроллерах - чтобы их хоть как-то разгрузить, а при тонких если писать нормально это не имеет смысла. В тонких только валидация реквеста, отработка логики приложения и формирование ответа, что там отдельно выносить?
>статью какую Я в гугле неплохие статьи находил.
>ORM моделями елоквента ( в которых как часто в гайдах и показывают - какая то бизнес-логика живет обычно Я туда только всякие небольшие преобразования данных пишу, вроде вывода отформатированной даты. Не любитель я всё в модель пихать - через сервисы\менеджеры делаю.
>>1950490 Не делает никто так, как на скрине. Данные берутся из каких-то источников. Например, можешь представить, что тебе пришел json с сотрудниками - парси из json-а
>>1947467 >>если я буду заниматься ежедневно по 6-8 часов?
Ох уж эти фантазии. Я все это проходил. Чел если ты до сего момента не имел подобного опыта и дисциплины на это - у меня для тебя оче плохие новости. Через пару лет "обучения" ты вдруг поймешь что проебывался 70% времени, и это еще хорошо. Потому что скорее всего забьешь хер.
>>1950174 Скинь, если не сложно, как у тебя все это организованно. Хоть кривой жепег картинкой. Где сервисы хранишь, каждый сервис уникален для отдельного контроллера? Но полюбасу есть такие которые инкапсулируют общуюю какую то логику. Их в отдельном общем каталоге? А потом от них наследуешь сервис для конкретного контроллера? А то у меня уже ORM моделей наплодилось блядь. И в разных "контроллерах" постоянно почти одинаковые вещи всплывают, типа получить выборку по модели, с определенным набором отношейний. По хорошему нужно какую то прослойку сделать, в которой будут какие то общие бизнес-логические задачи реализовываться, а орм-ки будут в этой прослойке. Что то типа "сущности", но пока что как то не понятно.
А еще вопрос, если не брать в расчет контейнеры зависимостей, которые через рефлексию подтягивают все зависимости, типа PHP-DI, и не брать в расчет пимпл, который есть сревис локатор - получается низкую связность можно организовать чем то типа фабрик с тайпхинтами?
на последний вопрос если что можешь не отвечать, понимаю что это чето совсем не конкретное, это больше мысли в слух
>>1950496 Никак компактнее не сделаешь. У тебя объекты не объединены никак, так что по ним не пройти как по коллекции. Можно сразу создавать объекты и писать в массив: $employes = [ new Employe(...), new Employe(...), ... ]
Либо так же как создал 16 строками, еще 16 строками запихнуть в массив
Аноны, подскажите правильный порядок действий в такой задаче:
Из БД я формирую статистический отчет. Это пост запрос из формы с кучей праметров. Сервис обрабатывает запрос и возвращает результирующий массив. Далее мне необходимо сделать две вещи - вывести данные клиенту на страницу, и сформировать эксель файл. С выводом данных клиенту нет особых вопросов. С формированием файла проблем тоже нет, делаю либой PHPSpreadsheet. Непонятка с тем как управляться с этими созданными эксель-файлами, и как их удалять с сервера. По логике выглядит так - отправляю запрос ajax-ом, запрос достает данные из БД, формирует эксель-файл, сохраняет его в отдельный каталог на сервере. А клиенту возвращаются данные и ссылка на этот эксель файл, на скачивание. Вопрос первый - уникальность имени сохраненного файла, так как все файлы в одном каталоге - то имена должны быть уникальны. Но уникальные рандомные симфолы - это не красиво как то. Второе как удалять? Кроном запускать скрипт который данный котолог проверяет, и удаляет файлы отчетов дата создания которых старше чем 15 минут. Это то что я сделал. Но может иные более оптимальные варианты есть?
и кстати , сколько на свободном рынке стоит такой небольшой сервис, в котором зареганные пользователи создают записи,с разными данными, а потом эти записи достаются статистическими запросами, по разным полям записи, для сотрудников небольшого бизнеса сделал. Типа в системе записывается некая работа, и расходники которые на нее потрачены. Потом по этим работам, по исполнителям, по расходникам и т.п. стат. отчеты за период по времени
>>1950555 >Но уникальные рандомные симфолы - это не красиво как то. таймстеп + пару рандомных символов как вариант
>Второе как удалять? Кроном запускать скрипт который данный котолог проверяет, и удаляет файлы отчетов дата создания которых старше чем 15 минут. Это то что я сделал. Норм, если уверен что данные формируются быстро <1с то можно на лету генерить не сохраняя никуда(ссылка скачать превращается в форму), но лучше так не делать
>>1950701 Я возьму фейкер и нагенерю скок хочешь. А тот анон не может в фейкер и будет сидеть построчно выводить $employe138542 = new Zalupa(hui, vkachus);
>>1950510 >как у тебя все это организованно Сервисы делаются элементарно - есть у тебя толстый контроллер, где ты с моделями делаешь манипуляции всякие непотребные. Так убери эти манипуляции в метод какого-то класса. Этот класс и будет сервисом. А в контроллере просто вызывай этот метод с нужными параметрами. В результате таких манипуляций с кодом в архитектуре появится слой сервисов, который содержит всю логику приложения, а контроллеры только обрабатывают запросы.
>если не брать в расчет контейнеры зависимостей >можно организовать чем то типа фабрик с тайпхинтами? Контейнеры и есть фабрики. Но так да - я тоже люблю получать зависимости так: function funcName(App\Namespace\SomeClass $object) или даже так: function funcName(App\Namespace\SomeClassInterface $object)
Как в этом вашем PHP работают области видимости? Как грамотно заполнить массив, объявленный глобально, через функцию? Что-то мне подсказывает, что использовать global <var> это какой-то быдлокод.
Анон, я не понимаю как декомпозировать задачу на разные функции, делегировать им обязанности, я понимаю что мой код пикрелейтед это говнокод, но как разбить это все дело с использованием пространства имен, что бы общая логика была в одном месте, а сама функция не росла как дворец путина.
И еще вопрос, я вот уже 5 месяцев учу ПХП(книги, ютубчик, халявные скаченные курсы) и везде прикладная тема обучения разнцая, где то учат нативному пхп на примере задачек, где то учат куки с сессиями прописывать и формы клепать, а где после 2 уроков "это переменная, а это цикл" идет полиморфизм с инкапсуляцией.
Я прихожу к удручающему выводу, что 5 месяцев проебал не понятно на что, и надо было сразу лезть на юдеми какой нибудь и наваливать англоязычные материалы.
>>1951043 >разбить это все дело с использованием пространства имен Если код до 200 строк то нефиг ничего разбивать. Обычно выносят либо повторяющийся код, либо вложенные циклы, условия, либо просто для понятности 1 функция со внятным именем вместо десятка невнятных строк делает код читабельнее.
>уже 5 месяцев учу ПХП(книги, ютубчик, халявные скаченные курсы) Самостоятельно хоть что-то сделал, или только по туториалам и задачкам учишься? Пили про студентов таблицу - из ОПпоста, если ещё не.
>>1951054 Решил сделать простейшие игры, одна спрашивает четное ли число, а другая рандомно выдает мат выражение, в обоих случаях приветствует тебя, проверяет твой ответ и прощается после 3 раундом. Если ответ не верный, игра завершается.
Собственно сложность была для меня общую логику игр в отдельный фаил уместить и через автозагрузку и пространство имен подключать, а не рекуаеры и инклюды использовать. Для запуска игр использовал отдельные файлы в бин, пути к ним прописал в Makefile линукса и запускал через команду в консоли.
Я понимаю что к вебу это имеет отношению примерно никакое, но я следую туториалам и шаблонам програмирования, типа бест практис и все такое. Опыта такого подхода никакого нет, до этого только в кодварс пытался решать задачки ну и курсы проходить, это уже какой то некст лвл для меня и мозг кипит, а я еще даже ООП не касался и с БД работал постольку по скольу. алсо вопрос в дагонку, верно ли что Линукс осваиваю для пыхи?
Вообще я мечу на фриланс в будущем(в неопределенном), но я так понимаю без ебучей бесконечной верстки(и JS) там никак? Или есть задачи?
Всем привет. Собираюсь вкатиться работать на заводик (через год там будет зп 50к при работе 2/2. Параллельно хочу вкатиться в wordpress разработку. В идеале зарабатывать хотя бы 500-1000 в день. Каковы шансы? Или таких как я миллиард и лучше даже не пытаться?
Бля, подскажите далбоебу как с помощью константы __DIR__ скакануть на два каталога наверх относительно скрипта в котором нужен доступ. Такое $dir = __DIR__ . "/../../catalog/test.txt";
>>1951088 Скажу по себе - сложно потому что не пхп сложен, а потому что будет тяжело себя заставить учиться. А потом будет тяжело себя заставить инициативно искать работу, выполнять таски и все такое. Если ты таким никогда не был - умножай вероятность слива на 10
>>1951098 Я рофла ради освоил верстку в вузе (онли html/css) за месяц где-то на уровне 4/10. Сейчас хватает, чтобы верстать сайты типа (okna-ramenskoye.ru). Сверстал его за 3 вечера, не особо торопять. Багов много, но заказчику по сути вообще на всё похуй. Нужен был сайт шоб был как говорится. Мог бы сверстать лучше, по бэму, кроссбраузерность норм поправить и всё такое. Заплатили за него 5к, т.к. сам предложил ценник. Могли бы заплатить больше, как оказалось) Так что, думаю, с пыхой проблем не будет в изучении, да и в вп уже ковырялся. Могу сделать кастомные поля для записи, например. Самое жесткое, что я делал это кастомные записи (полдня гуглил). Хочу просто брать заказы, чтобы вешать верстку на вп и прикручивать вукомерс. Это половина заказов на фрилансе. И потрачу на изучение этого где-то полгода не больше.
А что плохого в верстке? Верстка это как декларативное программирование, ты разбиваешь страницу на блоки, задаешь их позиционирование, а браузер расставляет их на странице. Там есть свои довольно сложные стандарты.
Не знаю, как научиться разбивать код на функции. Но в данном примере, очевидно, генерацию выражения можно вынести в отдельную функцию.
Можно попробовать сделать так. Опиши кратко алгоритм и по нему пиши код, вынося шаги алгоритма в функции. У тебя алгоритм будет:
- узнать имя пользователя - N раз подряд: - сгенерировать выражение - узнать ответ на выражение - проверить ответ - попрощаться с пользователем
Вот видишь, тут "сгенерировать выражение" идет как один шаг и его логично вынести в функцию. Заметь, что сам алгоритм простой - состоит всего из 6 шагов, значит и код для него будет простой, если выносить шаги в функции.
Также, не очень понятно, почему greetUser и question это разные функции. Они ведь только выводят подсказку и ждут ввода ответа?
Неймспейс лучше было назвать не General, а по имени программы. Последний if ($i ==General\COUNT_ROUNDS) не имеет смысла.
Могу посоветовать тебе больше решать задач, где требуется разбивать код на функции. Если ты дошел до ООП, то у нас есть задачки, где это требуется: >>1936147>>1939079
Если ты не дошел до ООП, то можешь решить такую задачку: напиши функцию, которая принимает число от 0 до 999 999 999 и возвращает его прописью, например "десять тысяч (10 000) рублей". Тут понадобится разбивать код на функции, чтобы не получилась лапша.
Код очень корявый, но сайд-эффектов тут нет. Переменная $item создается при выполнении цикла и так как ее никто не удаляет, то она остается доступной. Но писать так не стоит.
Строчка $item['field']; получает значение элемента и ничего с ним не делает, просто отбрасывает его. Она вообще никаких эффектов не делает, ее можно убрать и ничего не изменится.
>>1951552 >Данные при выводе в HTML надо экранировать для предотвращения XSS.
Удаление делается не GET-, а POST-запросом (отправка формы кнопкой, например). GET запрос не должен менять состояние сервера и что-то на нем удалять. экранирование я забыл,тут ты прав гет я взял,чтобы не возиться с кнопкой,а так гет не безопасен >Тебе надо перенести foreach в HTML-файл. сделал ранее на замечание анона выше
Это неправильный код. Если тебе хочется обратиться к переменной по имени, составленному из другой переменной (${"var".$i}), то тебе нужна не переменная, а массив: $var[$i].
Если эксель-файл формируется не дольше нескольких секунд, то зачем его сохранять на диск? Отдавай его в ответ на запрос, не сохраняя на диск. То есть пользователь жмет "скачать", отправляется запрос и в ответ на него генерируется и отдается файл.
> каждый сервис уникален для отдельного контроллера?
Вообще, это неправильно. Сервисы не создаются для контроллера, а для бизнес-логики. Есть задача управлять списком пользователей - создаем сервис. Есть задача генерировать отчеты - создаем сервис.
А контроллеры создаются по страницам/разделам сайта. Их количество и названия не обязаны совпадать с сервисами.
> А потом от них наследуешь сервис для конкретного контроллера? Скорее всего, это неудачная идея. Что может быть общего у сервиса регистрации пользователя и генерации отчета? Ничего.
> и не брать в расчет пимпл, который есть сревис локатор - pimple это DI container. Не надо его использовать как Service Locator.
У него там есть тонкий момент. По умолчанию квантификаторы вроде плюса жадные - они стремятся захватить максимально возможное число символов (но чтобы при этом регулярка совпадала со строкой). А там в решении используется нежадный квантификатор +?, который стремится захватить минимальное число символов. Потому выражение .+? не совпадет с буквой a. За одним исключением: так как даже нежадный плюс требует минимум одно совпадение, то в строке "aaa" совпадение все же будет.
Если ты используешь шаблонизатор вроде twig, то там есть макросы, у которых могут быть параметры. Если не используешь ... можно написать такую функцию в отдельном шаблоне:
<?php
function alert(...) { ?> тут HTML-код <?php }
Корявенько, потому лучше использовать шаблонизатор с макросами.
А в адресной строке браузера идет что-то вроде http://localhost:8000/file.php или file:///c:/file.php ? Если второе, то ты не запускаешь PHP код, а просто открыл исходник браузером. Адрес должен начинаться с http. Файл должен иметь расширение .php
>>1951421 Все по-разному делают, на самом деле. Можно сделать на Вордпрессе и Элементоре и будет тормозное говно, но быстро и дёшево. А можно взять чистый фреймворк и пилить на нём целый месяц - будет ответ за 10-100 мс от сервера, везде асинхронность и сопли девственниц, и цена как за хату в хрущёвке.
>>1951640 >как мне сделать 5 блоков в ширину и 6блоков в высоту? Я бы сделал просто - вывалил 30 блоков в хтмл, а потом через стили\жс ограничил ширину в 5 блоков, и всё бы само встало как надо. Но тебе лучше делать через 2 вложенных цикла for.
>>1951590 >pimple это DI container. Не надо его использовать как Service Locator.
На сколько помню пимпл в принципе в контроллере слим передается как свойство this. В себе он в замыкании которое мы добавляем в контейнер вызывает класс ( не помню как он разрешает зависимости этого класса ) , создает экземпляр класса и сохраняет его.
А вообще всей этой петрушки с инверсией управления и низкой связностью не до конца и не понял пока что.
>>1951606 >>1951614 >>1951712 https://ideone.com/lDV275 Почти три часа решал, а все из-за того, что при присвоении переменной массива временной переменной, ключ(индекс) последний оставался тем же значением, что и до удаления элемента. Поэтому иф во вложенном цикле никогда не работал и из-за некста индекс улетал за пределы массива. Поэтому ласт ветвление я добавил в самом конце. Хз, мб из-за того шо рубит так плохо думалось, но почему-то никак не мог найти эту деталь. Сори за говнокод посоны.
Как сделать просмотр своих ответов и ошибок в задаче на тестхаб после прохождения теста вне рамок текущей сессии? Дело в том, что в актуальном тесте могут же удалить некоторые вопросы, добавить новые или поменять их порядок. У меня есть табличка test_results, где записан просто общий балл за пройденный тест. Я использую постгерс, может мне json-колонку answers и туда вообще все добавить - и тексты вопросов, и ответы пользователя?
>>1952324 >табличка test_results, где записан просто общий балл за пройденный тест Очевидно, что такой вариант не подходит для >просмотр своих ответов и ошибок в задаче
Стоит хранить данные по ответам на тесты в более первозданном виде: юзер, на какой вопрос, как ответил, правильно/не правильно, и уже на основе этих данных получать данные об ошибках
Пилю сейчас сортировку для таблицы из задачи про список студентов. Допустим, мы кликнули на заголовок какого-то столбца -> у нас по нему отсортировались данные (т.е. кликнули мы на него, произошла сортировка asc, соответственно линк изменился на desc). И такой вопрос, линк сортировки на противоположную должен меняться только для текущего (по которому кликнули) столбца или для всех остальных в том числе ?
>>1952684 Спасибо, Анон. Так и сделал изначально, потом решил чекнуть, так или не так. Погуглил, нашел примеры, так там у типов при клике на какой-либо столбец (н-р. asc сортировка) линк на desc меняется у всех, а не только у того, по которому кликнули. Вот и решил уточнить.
>>1952699 >нашел примеры, так там у типов при клике на какой-либо столбец (н-р. asc сортировка) линк на desc меняется у всех, а не только у того, по которому кликнули Похоже на баг
>>1952333 >Стоит хранить данные по ответам на тесты в более первозданном виде: юзер, на какой вопрос, как ответил, правильно/не правильно, и уже на основе этих данных получать данные об ошибках Так и думал делать, но что если автор теста изменит вопрос или удалит его, поменяет правильный ответ?
короче с кнопкой спустя кучи времени получилось. но вот в чем прикол-если посмотреть исходник,там видны значения id,как если бы делал через get. это же не безопасно?
Не до конца сделал, как я понял. Но я не понял, как сделать так, чтобы код сумел понять, что это именно русское/английское слово. Потому что, например, регулярка подходящая под английское слово так же подойдет и под русское, а для русских слов надо писать отдельную программу, как и для английских. Получается, что регулярка найдет и в программе для изменения русских букв на английские английское слово, и в программе для изменения английских на русские. В итоге получится каша. Как сделать так, чтобы определить, что это именно русское слово, а не английское, и наоборот? Возможно, до меня что-то очень простое не доходит, а я и не вижу. Сори за говнокод.
>>1954269 >Как сделать так, чтобы определить, что это именно русское слово, а не английское, и наоборот? Можно пройтись пройтись слову, если в нем английских букв больше (или, например, есть буква, характерная только для английского, типа Q J W V F и подобные), то значит это инглиш.
>>1954322 Точняк. Второй вариант больше подходит. В первом же случае, слово, например, "соус" может целиком состоять из английских букв, но это же русское слово. Хотя и второй вариант не поможет с такими словами. Но все-таки это уже что-то, ведь и правда, в русском слове не будет таких букв. Спасибо.
Сап, слонолюбы. Сразу говорю, что я свежее мясо, а по сему возможны глупые вопросы, так что если у вас на них аллергия, то не читайте дальше.
- Почему у пыхи самое няшное коммунити ( сужу по сосачу ). В других тредах все обкидывают друг друга говном на любой почве, аж глаз дергается. - Почему некоторые рофлят над пыхой? Если язык спустя столько времени популярен и активно используется, разве это не говорит о том, что он по крайней мере хорош? - Как я понимаю пыха - это easy to learn hard to master? Для меня при подобном занятии важно созерцание того, что я наклепал, хочется видеть какие-то результаты сразу, пусть и хуевые. В пыхе это возможно? Ну как бэ хочеца через какое-то время сделать свое поделие, кривое, косое, но я сделаль, а не дрочить теорию овер9000 лет, дабы увидеть первый рабочий проектик.
Заранеее спасибо за то, что прочитал мою простыню. <3
>>1954694 >- Почему у пыхи самое няшное коммунити ( сужу по сосачу ). В других тредах все обкидывают друг друга говном на любой почве, аж глаз дергается. Это ты не был в телеграм чатах по пыхе. Вот где друг друга хуями обкладывают. Причем делают это 30+ васяны
>- Почему некоторые рофлят над пыхой? Если язык спустя столько времени популярен и активно используется, разве это не говорит о том, что он по крайней мере хорош? Ну рофлят и рофлят. Работа на пыхе есть, вкат доступен.
>- Как я понимаю пыха - это easy to learn hard to master? easy to learn относительно других бекенд языков hard to master больше про архитектуру и ифраструктуру
>хочется видеть какие-то результаты сразу, пусть и хуевые. В пыхе это возможно? Да, как и в любом интерпретируемом языке.
>Ну как бэ хочеца через какое-то время сделать свое поделие, кривое, косое, но я сделаль, а не дрочить теорию овер9000 лет, дабы увидеть первый рабочий проектик. С этим проблем нет. Пыха в целом про хуяк-хуяк-в-продакшен
Не понимаю, как работает строка $new_string .= ($key & 1) == 0? mb_ucfirst(strtolower(trim($sentence))) : $sentence.' ';
Как понять $key & 1? То есть побитовый оператор. Я посмотрел, там же получается нумерованный массив из элементов, которые являются предложениями. Но элемент с индексом 1 получает $sentence.' '; так ведь не должно работать, предложение с индексом 1 не получит заглавную букву. Но все работает, все предложения в тексте становятся с заглавной буквы. Не ПоНемАю!
>>1954694 >у пыхи самое няшное коммунити Зависит от платформы - у Битриксоидов вполне себе обычное, как и у ВП-разрабов. Но в среднем на ПХП оно просто более профессиональное и уравновешенное - сам язык уже довольно зрелый и на нём пишет много бывших говнокодеров, а ныне уважаемых синьоров с многолетним опытом. Хотя тож всякое бывает.
>Почему некоторые рофлят над пыхой? Раньше язык был не очень и с тех пор повелось. Мне, например, такой расклад даже нравится - отпугивает всяких хайпожоров-дегенератов, школоту, и получается, что тут больше вменяемых людей, и тех кто себе на уме. Порог входа такой у него.
>easy to learn hard to master? Это любой современный ЯП вроде пхп, жс, пистона и тд.
>Для меня при подобном занятии важно созерцание того, что я наклепал Бекенд про данные, а не созерцание. Хочешь сразу видеть результат - иди на фронтенд, а на беке принято передёргивать на структуры, архитектуру и абстракции.
>>1954783 Надо не пытаться всунуть максимум функционала в одну строку, а писать понятно. Он же сам охуеет через месяц это читать и скажет >>1954042 Или хотя бы расставлять комментарии для такой каши.
>>1954795 ну я понял, но не понял только, как он делает так, что каждое предложение с заглавной начинается, ведь по такому принципу не каждое предложение будет обрабатываться mb_ucfirst
>>1954795 >То есть, для каждого чётного числа, включая 0, возвращается 0, для нечётного — 1. >1 в двоичном виде это 0001. То есть ($key & 1) возвращает 1, если у $key первый бит включен, или 0, если выключен. >Примеры: >0 — 0000 | 0 & 1 = 0 >1 — 0001 | 1 & 1 = 1 >2 — 0010 | 2 & 1 = 0 >3 — 0011 | 3 & 1 = 1 >4 — 0100 | 4 & 1 = 0 >5 — 0101 | 5 & 1 = 1 А нужно-то было всего лишь пройти циклом for по всем $sentences, проверяя кратность счётчика двойке в виде if($i % 2 == 0). Куда вы в биты-байты поехали?
>>1954825 Хз, мб так быстрее получается? Вместо деления просто проверяется первый бит. Ну или тот чел пришёл из крестов, и там такие штуки часто используются.
>>1954838 ООП наоборот упрощает. С бабой сракой я образно выразился. Джун синьорский код легко прочитает, а вот джунский код зачастую без бутылки не разберёшь.
>>1954790 В чем охуевание? Три встроенные функции прекрасно читаются. Комментарий да, не помешал бы, но тут и по самим функциям можно понять что происходит, комментарии стоит писать когда там какие-то нетривиальные вещи делаются.
>>1954797 Твой пик несет нулевую полезную нагрузку, пример можно? Вот перепиши эту конкретную строку так чтобы она из джунской стала сеньорской.
>>1954724 Скажем спасибо ОПу же! Я тоже подумал, что он няшный. Хотя здесь особо не бываю.
>>1954727 Может быть, дес. Но мне показалось няшным.
>>1954730 >Это ты не был в телеграм чатах по пыхе. Вот где друг друга хуями обкладывают. Причем делают это 30+ васяны Видел только один чат по какой-то конференции пыхеров, довольно няшно общались.
>Работа на пыхе есть, Был удивлен тому, что даже в моей мухосране нужен джун на пыху.
>Да, как и в любом интерпретируемом языке. Спасибо, дес. Учту.
>easy to learn относительно других бекенд языков Помимо жабы что-то активно используется? А жаба разве сильно сложнее?
>С этим проблем нет. Пыха в целом про хуяк-хуяк-в-продакшен Слава пыхобожеству.
>>1954762 >Зависит от платформы - у Битриксоидов вполне себе обычное, как и у ВП-разрабов. Но в среднем на ПХП оно просто более профессиональное и уравновешенное - сам язык уже довольно зрелый и на нём пишет много бывших говнокодеров, а ныне уважаемых синьоров с многолетним опытом. Хотя тож всякое бывает.
А правда. что большинство пыхеров начинали с параш вроде битрикса и вордпресса?
>Мне, например, такой расклад даже нравится - отпугивает всяких хайпожоров-дегенератов, школоту, и получается, что тут больше вменяемых людей, и тех кто себе на уме. Порог входа такой у него.
Но такой стереотип же и может в негативную сторону работать, привлекая Васянов.
>Это любой современный ЯП вроде пхп, жс, пистона и тд. Учту. Спасибо, дес.
>Бекенд про данные, а не созерцание. На беке принято передёргивать на структуры, архитектуру и абстракции.
И все же я попробую, вдруг зайдет же.
>иди на фронт
Туда каждый первый вкатывальщик вкатывается, это меня отпугивает.
Почему при $anonDice1 && $anonDice2 = mt_rand(1, 6) комплятор отправляет меня кушать хуйцы, а при $anonDice1 = mt_rand(1, 6) $anonDice2 = mt_rand(1, 6)
>>1954855 >Видел только один чат по какой-то конференции пыхеров, довольно няшно общались. Конфачеры как раз норм, т.к. ирл общаются, им нужно лицо держать. Есть пара других чатов на пару тысяч тел. Вот там треш и угар.
>Помимо жабы что-то активно используется? А жаба разве сильно сложнее? Что угодно тащят на бек: пхп, питон, руби, нода жс, жава, шарп, скала, го За сложность джавы не скажу
>А правда. что большинство пыхеров начинали с параш вроде битрикса и вордпресса? Пару раз трогал вп и битрикс и сразу же дропнул их, пересев на ларавел
>Но такой стереотип же и может в негативную сторону работать, привлекая Васянов. Васяны бегут туда, куда больше курсов хайповых. В тот же фронт. В пыху бегут не так охотно. В основном из пердей, где это единственный бекенд язык.
>иди на фронт >Туда каждый первый вкатывальщик вкатывается, это меня отпугивает. Потому что там достаточно простой вкат и высокий спрос на спецов, т.к. фронт у всех один - жс (в основном реакт)
>>1954847 >перепиши эту конкретную строку так чтобы она из джунской стала сеньорской Я это уже сделал в общих чертах >>1954825 Если тебе прям подай полноценный рефракторинг, то жирно будет - сам думай.
>>1954855 >А правда. что большинство пыхеров начинали с параш вроде битрикса и вордпресса? Не - я сразу на фреймворки полез. Имел дело с вордпрессом и не понравилось - после фреймворков и нормальных архитектур отдаёт протухшими помоями. Вместо ВП использую October.
>может в негативную сторону работать, привлекая Васянов Почему? Васянам наоборот надо чтобы ЧСВ, чтобы макакой не называли, чтобы ЯП на котором они пишут был уважаемый. А тут ПХП, лол. Пацаны во дворе же засмеют.
>Туда каждый первый вкатывальщик вкатывается, это меня отпугивает Значит запрос есть, наверное.
>>1954922 я вообще выше спрашивал про последовательность чисел,но не слитных.чтобы потом была сверка. первая мысль была про массив,но почитав-пишут что это изврат и надо либо жсон или сериализация так жсон?
>>1954855 >А жаба разве сильно сложнее? Сам язык нет, почти тот же пхп, только коллекции и дженерики нужно подучить. А вот все остальное, это лютый трешпиздец, jdbc hibernate, spring и прочее, в это когда окунаешься вообще нихуя не понятно, простые вещи сложными путями делаются, если готов к трудностям первое время, то можно попробовать
>>1954762 >у Битриксоидов вполне себе обычное, Пробовал как-то спросить одну хуйню по каталогу и корзине, мне сказали что я долбоеб и не умею это говно в фантики от конфет заворачивать и продавать по цене шоколада. Короче наколхозил что-то в библиотеке BX для фронта, уже не помню что и оно вроде как заработало и запушил к ебеням. Сейчас к этому говну не притрагиваюсь, пусть другие развлекаются.
>>1955085 >одной строки >$new_string .= ($key & 1) == 0? mb_ucfirst(strtolower(trim($sentence))) : $sentence.' '; Это не строка, а говно. Пиши на нормальном ЯВУ, а не на байтоёбской хуйне. Такое код-ревью нигде не пройдёт. Свободен.
Аноны, есть таблица с сортировкой и пагинация. Как правильно составить sql запрос, чтобы происходила сортировка только для текущих выводимых записей, т.е. если у нас LIMIT 5, 5 то сортировка должна работать только к этим записям, а не ко всем Накидал что-то такое, хз правильно ли это (но вроде работает), но может можно как-то лучше сделать SELECT * FROM ( SELECT columns FROM table ORDER BY column DESC LIMIT 5, 5 ) as s ORDER BY columnt
Есть ли смысл в 2021 изучать php или лучше Питон или лучше Node.js? В моей мухосрани есть только вакансии по PHP, хотя в двух часах езды есть миллионник с вакансиями и по Питону и по JS. Если основной критерий простота трудоустройства, то лучше PHP, я правильно понимаю? Или начать изучать новомодные JS или Питон, с расчетом на большую стабильность и востребованность в будущем?
>>1955427 Алсо насколько будет глупо и сложно начать например с PHP, а потом перейти например на JS или Питон? Какова вероятность что PHP устареет и будет заменен ими?
>>1955429 >JS или Питон? Какова вероятность что PHP устареет и будет заменен ими? Это пророчили php еще лет 10 назад. Как видишь, сейчас php так же прочно стоит на ногах и продолжает развиваться.
>>1955430 Но если УЖЕ 10 ЛЕТ НАЗАД ему это пророчили, то что если вот вот еще чуть чуть и всё пиздец? Вот эксперты программирования на ютюбе говорят, что в PHP 8 как-то все новомодные фичи криво прикрутили и вообще обосрались и это была отчаянная попытка что-то стапасти, и она провалилась.
>>1955427 Яб всё изучал. Начни с похапе, как более-менее освоишься - окунись в путон и ноду. Это все актуальные технологии, их знание лишним не будет.
> начать изучать новомодные JS Опять же, это все веб, без JS ты в любом случае далеко не уедешь, так что нужно будет так же изучать. Как и HTML+CSS, хотябы базово.
>>1955438 Пророчить могут что угодно, но задачи есть и их нужно решать сейчас. И не всегда новомодные технологии подходят для их решения. Ты удивишься, но множество сайтов до сих пор создаются на технологиях десятилетней давности, а то и старше. И все вполне себе работает.
>>1955427 >>1955429 на ноде.жс берут с опытом, вакансий без опыта почти нет, на путхоне во множестве вакансий для новичков есть требование вышки, в то время как на пхп почти нигде такого требования нет, соответственно, сначала залетаешь на пхп (но html, css, js, jquery, sql все равно надо), через год перекатываешься в пайтон или ноду.жс или в ror/go и тд
>>1955499 > на путхоне во множестве вакансий для новичков есть требование вышки Кто сейчас требует вышку на программерские должности, кроме всяких госконтор?
>>1955499 Спасибо анон. Еще заметил такую странную херню, когда работодатель выставляет вакансию "Разрабочик PHP/бекэнд" и далее в требованиях к ней указывает "Знать Node.js, Python и т.д." Это работодатель долбоеб и не понимаешь что пишет или тебе действительно нужно владеть кучей разных взаимоисключающих технологий?
>>1955505 Да, зачастую наниматель или HR просто не разбираются в теме и берет описание должности из интернета тупо копипастой. В идеале нужно общаться с человеком который непосредственно занят разработкой. Ну и иногда действительно бывают случаи что нужен человек-оркестр.
>>1955526 В чем проблема проверить человека на собеседовании? ВО для программиста это ничего не определяющий маркер. У нас же нет учебных заведений которые готовят именно программистов.
>>1955597 Даешь удаленно задание, после выполнения предлагаешь созвониться и поговорить о том как ты его делал. Тот кто делал сам с удовольствием все расскажет. Тот кто нагуглил готовое сразу же сольется.
А 200 чел на вакансию это больше похоже на влажные мечты HR.
Ну, и наконец, как тебе тут поможет твой фильтр в виде ВО? Просто уменьшит количество соискателей? Так ты сам можешь отвечать например каждому пятому, это будет тоже самое.
>>1955642 >Даешь удаленно задание Тут уже 90% отвалятся. Причем среди них будут как вкатуны, так и норм соискатели
>А 200 чел на вакансию это больше похоже на влажные мечты HR Всякие петровичи после курсов по верстке лендингов и туду листа на жопаскрипте так и валят. Иначе чем объяснить повальное засильное всяких курсов?
>Ну, и наконец, как тебе тут поможет твой фильтр в виде ВО? Если вышка близка к програмистской, тот же физмат - таких кандидатов можно смотреть в первую очередь, т.к. они идут в индустрию не просто за длинным рублем
>>1955660 > Тут уже 90% отвалятся Лол, а как, по твоему, нужно собеседовать? Телепатически или по звездам?
> чем объяснить повальное засильное всяких курсов? Тем что это популярная тема и создатели курсов хотят срубить баблишка с лохов. Так же как всякие коучи и бизнес-тренеры.
> Если вышка близка к програмистской, тот же физмат - таких кандидатов можно смотреть в первую очередь Хуйня полная, связь между физматом и программированием это распространенный стереотип. Ладно, если там вакансия на что-то прикладное, но блядь в вебе то это всё зачем?
>>1955679 >Лол, а как, по твоему, нужно собеседовать? Честно, хз. Я бы наверно ничего умнее не придумал и взял бы существующие методы: для кандидатов без опыта - обязательное тестовое (с докером, тестами, ридми и чтобы одной командой поднималось с тестовой бд) для джунов (до 2 лет опыта) - ебля теорией на собесе и задачки с литкода + про работу рассказать для мидлов+ - разговор за опыт и рабочие кейсы
>Хуйня полная, связь между физматом и программированием это распространенный стереотип. Ладно, если там вакансия на что-то прикладное, но блядь в вебе то это всё зачем? Как минимум наличие желания ковыряться в какой-то сложной технической хуйне. Далеко не у всех это желание есть. Это и отличает разраба от макаки.
Каким образом будет правильно отправить AJAX реквест от имени юзера? Использую ларавел, аутентификацию реализовал с помощью Fortify, если что. Я так подозреваю, что нужно какой-то токен внедрять?
>>1955771 Хм, или может вместо токена просто впихивать в реквест айди юзера и его хешированный пароль, вытянутый из базы? Нормально так будет, или нет?
>>1955793 Окей, спасибо за ответ. Я так понимаю, этот токен необходимо просто генерировать при регистрации юзера, в джаваскрипт пробрасывать через скрытый input ( или может лучше через мета тег? ), а на бекенде просто находить юзера с таким токеном, верно?
Есть в треде битриксобоги? Имеется напрочь ебанутый шаблон со всякими гугл и яндекс метриками прямо в коде. Как в такой ситуации подключить amp? Нужно выдрочить все скрипты из шаблона в файлы и подключать их?
>>1955828 Использовать один токен с самой регистрации несекурно. Если он уплывет, то всё. Генери при каждом логине, добавь им время протухания еще. Заодно почитай про oAuth, сегодня он повсюду.
>>1955896 А что за Sanctum и Passport скажешь? Если я планирую в будущем внедрять аутентификацию через сторонние сервисы, то может лучше сразу через Passport это дело проделывать?
Привет, хочу вкатиться в php. Может кто подскажет, с помощью чего изучать этот ЯП? Самому 25 лет, раньше верстал, с помощью гугла пилил формы обратной связи на php, слайдеры на js, но как таковые языки эти я не знаю, поэтому он будет у меня первым. И отсюда вытекает следующие вопросы: не поздно ли в 25 вкатываться в пхп, чтобы в 25.5 или 26 пойти джуном и как вообще отразится на мне в будущем, если выберу этот ЯП как первым языком? Где-то читал, что пхп как первый яп - хуёвый тон. В дальшнейшем планирую работать в вебе, поэтому плюсы, джавы всякие отпадают.
>>1956231 >джавы всякие отпадают На джаве тоже бек пишут
>не поздно ли в 25 вкатываться в пхп Не поздно. Самое время
>как вообще отразится на мне в будущем, если выберу этот ЯП как первым языком? Можешь так же оставаться на пхп, повышая сложность проектов и зп. А можешь через годик перекатиться на другой бекенд язык
>с помощью чего изучать этот ЯП? С прочтения шапки треда. Там достаточно материала, чтобы до джуна дойти
>>1956231 С PHP гораздо легче вкатиться в вебдев, где помимо самого ЯП нужно разбираться в куче смежных областей (работа сервера, протоколов, БД, желательно фронтенд базово, методологии разработки, mvc, гит, различные пакетные менеджеры, тестирование). Имея эти знания в багаже (не теоретические, а уже практические) ты потом легко перепрыгнешь с PHP на любой другой ЯП.
>>1956646 Я тебе по секрету скажу - полным полно проектов которые до сих пор работают на 5 версии и на 7 просто не запустятся. Учить нужно не конкретную версию, а язык в целом. Когда прокачаешься - уже будешь заморачиваться с новомодными фишками свежих версий.
>>1956646 >8 версия обратно в болото увела пыху Какие из изменений увели в болото? Сейчас пыха взяла курс на более строгую типизацию, атрибуты завезли. Вот вот енумы завезут, заживем.
>>1956662 Спасибо за совет. >>1956669 >Какие из изменений увели в болото? Не помню точно, я ж пока не шарю. Вроде что-то про JIT сказали и что в пыхе он как-то ваще не оч (Хауди посмотрел, извините, пожалуйста).
>>1956672 В джит можно запихнуть папочку вендор, т.к. её содержимое меняется крайне редко. А в остальном да, джит перфоманса не добавил. Но там и без него в 7ке пыху неплохо оптимизировали. И узкое место тут как обычно бд и внешние сервисы, а не рантайм пыхи.
>>1956706 Че то щас просмотрел вакансии php-разработчика: джуна, миддла и т.д. везде блять требуедсят js. Причём пишут так: "Обязательно отличные знания PHP/MySQL/HTML/CSS/JS". Можете сказать, нахуя мне отличные знанич js, если я буду на пыхе писать? Или хрки на сегодняшний день вообще ебанулись массово?
>>1956727 Много вакансий на пыхе предполагают частичный фуллстек. Фронтенд на уровне - сверстать формочку и оживить на ванильном жс. Более сложная херь вроде реакта явно обозначается как фулстек вака. Сейчас вот тоже немножко жс шатаю в соотношении 80 бека и 20 фронта.
>>1956730 да я ни пыху, ни джс не знаю, просто хотел в бэк онли окунуться, т.к. фронт пиздец там. верстаю-то я нормально, флексбокс, бэм всякие понимаю, но короче заебала ебля эта с классами, семантикой и прочей поебистикой. Хочу через какое-то время просто брать заказы по вп какому-нибудь и хотя бы 40к получать с фриланса. Хз, достижимо это за 4-6 месяцев изучения пыхи или нет
Аноны, а как принято проверять права на какие то действия? Типа бест практикс? Если дело на этапе контроллера - то тут понятно, нет прав - заворачиваем с уведомлением. А если мне нужно в зависимости от прав какую либо кнопку сделать видимой / или не видимой?
В ларавел есть хелпер который прямо в разметке шаблона вызывается. У меня слим4 + твиг и я не понял как делать такой хелпер. Но мне даже скорее интересно как такое сделать без хелперов которые проверяются прямо в коде. Переменную с логическим значением передавать? Но таких переменных может быть несколько. Можно конечно передать, в массиве что бы не хламить. Но как то не особо красиво что ли.
Аноны, такая странная трабла - в базе хранится имя отчетсво человека полностью. В виде строки. Мне нужно сделать из этого инициалы , такое: "Иван Иванович" в "И.И." Собственно проблем нет никаких. Трабла в том что в браузере если фио полностью отрисовывается - то все норм. А если созданные мною инициалы отрисовать - почему то черный ромб с вопросом внутри. Че это за херня?
>>1957224 п.с. дело прояснилось - короче доступ к символу в строке в которую я из базы достаю, допустим 'Вася', как к массиву в таком виде: $name = 'Вася'; echo $name[0] не работает потому что в базе у меня строки хранятся занимая место - два байта на одну букву. Поэтому я букву получить могу только допустим с помощью substr(); А я чет затупил в этом вопросе. Пхп всегда, если рассматривать строку как массив, на одно значение массива из строки берет не более одного байта?
Можно сделать объект ПроверяльщикПрав и передавать в twig его. А там делать вызовы вроде if ($accessChecker->can(AccessChecker::EDIT_ARTICLE)) { ... }.
Можно сделать как в симфони. Там есть twig-хелпер {% if is_granted('ACCESS_EDIT_ARTICLE') %}.
То есть, на каждое действие делается константа и через какой-то объект проверяется наличие прав на это действие. Иногда кроме константы еще и передается объект, на доступ к которому проверяются права:
if ($security->isGranted(SomeClass::SOME_ACTION, $object))
В мануале по mt_rand упоминается функция mt_getrandmax(). Она возвращает максимальное число, которое можно передавать в mt_rand. Попробуй выполнить код var_dump(mt_getrandmax()); У меня он возвращает 2 миллиарда.
А ты передаешь 1 триллион. От этого mt_rand ломается. Как я понял, он работает только с числами от 0 до 2 млрд. Используй 2 вызова mt_rand, если тебе нужно сгенерировать длинное число.
Вообще, эта идея полагаться на то, что точки будут всегда в четных или нечетных элементах, выглядит довольно хлипко. Я бы лучше сделал проверку через preg_match('/^[.?!]+$/') - может, это чуть помедленнее, но зато читабельнее.
Потому что в PHP нельзя написать "присвоить a и b случайные значения". Можно присвоить 2 переменным одинаковое значение, написав так:
$a = $b = 1;
Это работает, потому что оператор = выполняется справа налево и возвращает присвоеннное значение дальше. То есть в записи выше сначала выполнится выражение $b = 1, оно вернет 1 и получится выражение $a = 1, которое и выполнится.
Чтобы присвоить разные значения, надо писать так:
$a = 1; $b = 2;
У тебя же выражение выполняется так:
$anonDice1 && ($anonDice2 = mt_rand(1, 6))
Сначала выполняется присваивание $anonDice2 случайного числа (допустим, это 5), это число передается дальше и получается выражение:
$anonDice1 && 5
Это выражение не получится вычислить, так как переменной $anonDice1 не существует. Отсюда ошибка.
То есть интерпретатор PHP не способен понимать произвольные команды, команды должны делаться по жестко заданным правилам. Люди также делают другую ошибку: когда хотят написать условие "a и b равны 1" они пишут
Не обязательно. Но он должен указывать на единственную запись, потому он может ссылаться либо на первичный ключ либо на колонку (или колонки) с уникальными значениями.
Зависит от ситуации. Вообще, принципы нормализации требуют атомарности ячеек, то есть в 1 ячейке хранится одно значение, а не список. Но в реальности иногда удобнее сохранить массив. Можно хранить значения через запятую, некоторые СУБД вроде Постгрес поддерживают хранение массивов, и можно туда засунуть JSON.
Но во многих случаях это будет неправильная идея. Ты не описал какая у тебя ситуация, потому непонятно, как правильнее сделать.
Он подставляет значения не напрямую ("INSERT .. $x"), а через плейсхолдер ("INSERT :x"). Значения автоматически экранируются и заключаются в кавычки и инъекции не будет.
> разговор за опыт и рабочие кейсы Часто встречаются люди, которые в X особо не разбираются, но были в проекте, где была X (которую настраивали другие люди), и могут сделать вид, что в X разбираются. Потому в разговор за опыт желательно добавлять проверочные вопросы вроде "как с помощью X можно сделать Y". Тут-то и пойдут отмазки вроде "ну, мне надо почитать мануал, погуглить", из которых ясен реальный уровень знания X. Правда, чтобы задавать такие вопросы, надо самому разбираться в X.
Вообще, если использовать библиотеку для работы с формами, то достаточно лишь описать тип и ограничения для каждого инпута, а она сама все проверит. Если же ты по каким-то странным причинам пишешь формы руками, то попробуй хотя бы в функции вынести повторяющийся код.
Лучше бы без копипасты, например, можно сделать функцию выполнитьОперацию(операция, арг1, арг2) и вызвать её (перенести switch в эту функцию, убрав его из цикла).
Хорошо бы сделать код более устойчивым к случаям, когда например идет подряд 2 знака или выражение начинается со знака. Чтобы выдавать сообщение, а не падать с ошибкой.
Сама идея вычисления с приоритетами может и неплохая, но не будет работать при наличии скобок. Если хочется вычислять любое выражение с приоритетами и скобками, то есть 2 подхода:
1) с помощью готового алгоритма преобразовать в обратную польскую нотацию и вычислить её 2) распарсить рекурсивным спуском выражение на AST - Abstract Syntax Tree - дерево узлов (узел - это например: узел числа или узел операции, причем узел операции может содержать в аргументах другие узлы). Затем вычислить значение в дереве. Узлы обычно реализуют с использованием ООП.
Оба этих подхода для начинающего довольно сложны (но интересны). Потому в задаче разрешается игнорировать приоритеты операций.
Если хочется именно заморочиться, то можно написать свою библиотеку для форм. Делаем объект, представляющий один элемент формы, делаем такие элементы вкладываемыми друг в друга (чтобы можно было собрать из них форму). Делаем объекты, представляющие ограничения и условия проверки. Очень полезно для саморазвития, хотя и будет сложно поначалу.
У тебя нет разделения ответственности в коде. То есть, ты даже не вынес валидацию в отдельную функцию, а пишешь весь код сплошной стеной. Надо учиться разбивать его на отдельные функции, каждая из которых занимается своим делом.
Такой подход не масштабируется, то есть при увеличении объема кода он станет нечитаемым и неподдерживаемым.
Также, у тебя в коде есть недостатки:
- неправильно делается экранирование данных. htmlspecialchars надо вызывать при выводе данных в шаблоне, а не там, где ты их вызываешь. - при ошибке надо показывать форму с введенными в нее данными, а ты это не делаешь и заставляешь человека заново заполнять форму. - надо использовать mb_strlen, а не strlen. strlen не умеет считать длину текста с русскими буквами.
Нет, обычно ты не создаешь классы на каждое поле, а используешь готовые классы из библиотеки. То есть ты описываешь каждое поле, и какие на него действуют ограничения. Вот, как это могло бы выглядеть в теории:
$form = new Form; $form->addField('name', [ new TextLength(20), new Regexp('/^[a-z]+$/') ]); ...
> Но я не понял, как сделать так, чтобы код сумел понять, что это именно русское/английское слово. Самый простой вариант - можно смотреть по языку первой буквы.
> Потому что, например, регулярка подходящая под английское слово так же подойдет и под русское, а для русских слов надо писать отдельную программу, как и для английских.
Нет, тут достаточно одной программы, которая ищет слова, написанные буквами 2 разных алфавитов. Можно, например, сделать так:
- разбиваем текст на слова - для каждого слова определяем по первой букве язык - ищем посторонние буквы в слове
Или так:
- находим слова из смеси алфавитов - в каждом таком слове определяем язык - находим посторонние буквы
Задача про тестхаб приближена к реальным проектам по сложности и там возникают такие же проблемы, как в реальных проектах. Тут надо подумать, что лучше:
- запретить менять тест после появления ответов. Вместо удаления делать soft delete (скрытие из списков, при этом тест остается в базе). - сделать версионность тестов, чтобы при редактировании создавалась бы новая версия теста (а старая оставалась неизменной). Тогда ответы могут ссылаться на нужную версию теста. - сделать вопросы неизменными и версионируемыми, соответственно на них можно будет ссылаться из ответов
Тут получилось довольно хитрое решение с использованием внутренних указателей в массивах. Код также полагается на недокументированные особенности, вроде того, как меняется внутренний указатель при выполнении unset().
Можно было поступить еще так:
- сделать массив, где ключи идут по порядку, а значения - это номера девочек (идут вначале от 1 до N) - завести переменную-указатель, присвоить ей 0 - увеличить переменную на число слогов (с проверкой на выход за границы массива) - удалить элемент, на который она указывает, с помощью array_splice() - и так далее.
Главная идея DI в том, что объект не ищет сам зависимости, и не пытается их откуда-то взять, а ему просто передают их через конструктор (или как-то еще) при создании. И поиск зависимостей теперь это не ответственность объекта, а ответственность того, кто его создает.
>>1958132 У тебя присвоение вместо сравнения Ну и методы какие-то бессмысленные. Либо делай более общими, либо удаляй - тупо лишняя абстракция. Ну и название check ни о чем не говорит, что она делает, какой тип вернет. Еще косяк: ты создаешь форму, но не передаешь туда логин, хотя внутри методов проверяется логин этой формы, т.е. он у тебя пустой будет.
Крч перепиши это говно. Проще с нуля сделать, чем тут что-то править.
Это не совсем ООП. В ООП объект - это объединение данных (полей вроде $login) c методами (функциями) для работы с ними. Соответственно, в ООП ты не вызываешь вручную check_length, check_empty и не передаешь туда данные, а ты создаешь объект и вызываешь $form->validate() и он сам все проверяет и возвращает все ошибки (при этом validate может конечно вызвать check_empty, но эту функцию надо сделать private, чтобы снаружи ее вызвать было нельзя). Ты же код, который должен быть внутри объекта, пишешь снаружи его.
Если тебе сложно писать ООП код, начни хотя бы с разбиения на функции. Сделай отдельно функцию для чтения данных из $_POST, а отдельно функцию для валидации данных, отдельно функцию записи данных в БД.
Также, вместо strlen надо использовать mb_strlen. Незачем использовать в наши дни кодировку ASCII вместо UTF-8.
И еще, у нас в шапке есть задача про студентов, к ней идет куча полезных советов по архитектуре. Стоит их почитать.
А ты не хочешь порешать нашу задачу про ООП? У нас в шапке есть ссылка на учебник, там есть глава про ООП и задача про ООО Вектор. Можешь попробовать ее решить.
Также, есть задача про ООП-Гостиницу тут >>1939079
Попробуй их порешать. Или, если тебе не хочется уходить далеко от форм, попробуй спроектировать набор классов для работы с формами. Начни с краткого перечисления требований (какие возможности будут у твоей библиотеки), затем спроектируй классы, как они связаны и что представляют, и затем можешь писать код. Я выше давал примеры, как можно реализовать проверку форм с помощью ООП. В идеале ты должен получить набор кирпичиков, из которых можно собрать любую форму.
То есть, я предлагаю не делать класс конкретно под твою форму, а сделать более универсальное решение - набор классов, из которых можно собрать любую форму.
>>1958220 >Если тебе сложно писать ООП код, начни хотя бы с разбиения на функции. Сделай отдельно функцию для чтения данных из $_POST, а отдельно функцию для валидации данных, отдельно функцию записи данных в БД. каждая функ на один файл,а потом в главном файле все это подкл через реквер?
Можно пока что писать в одном файле, если функции небольшие. В отдельные файлы обычно выносится то, что можно подключать из нескольких мест, чтобы не копипастить.
Здраствуйте аноны в общем я хотел написать на laravel с 0 знаниями форму где динамически добавляются новые строки в таблице по нажатии кнопки. Добавление и удаление я сделал, но получилось крайне хуево, можете дать совет. Как обойтись без смешивания js, html, php
>>1962253 Прочитай, что такое шаблонизатор blade. Его использует лара. Пишешь в контроллере return view('index', compact('paginator', 'categoryList')); и тебе во вью с именем index.blade.php передаются две переменные из контроллера: $paginator и $categoryList. Ну или какие захочешь. А во вью уже вся разметка.
Что касается жабаскрипта, то его пишут в resources/js/xxxxx.js Подключаешь его в resources/js/app.js и перед выкладкой конпелируешь командой npm run dev (ну или npm run watch, так удобнее). Как это всё работает - читай про auth Или, если читать не хочешь то земля тебе пухом, выполни предварительно composer require laravel/ui php artisan ui:auth php artisan ui vue --auth
>>1937972 так то нет , хороший мид ми может пилить сносный мид код , по той простой причине что 7 летний опыт похапе внезапно не так и релевантный в том же go пайтон и тд, очевидно что базовые вещи структуры for if навернуть можно быстро , но теже паттеры которые хорошо ложатся на похапе могут быть совершенно не нужны в том же пйтоне