Опять зима стоит у двери, а мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет открыть стартап, кто-то заработать на лапшу быстрого приготовления, кому-то просто нечего делать.В нашем треде отвечают почти на все вопросы, только бампайте каждые 5 дней. Это тред и для начинающих. Слово "классы" у тебя ассоциируется только со школой, а в аттестате тройка по математике? Ты наш человек.Предыдущий тред был тут: >>1475112 (OP) . Все старые треды есть в архиве: https://phpclub.tech/ (там есть поиск, так что можно легко найти обсуждение какой-то задачи или ответы на свой старый пост) или ищутся в гугле по словам "клуб изучающих php" и в архиваче. Мейлач лежит? Есть запасной тред на доброчане: /s/res/23225.xhtml#i46467Форматируй свой код, если хочешь, чтобы его читали (как, написано во втором посте).Правила: ведем себя воспитанно, помогаем новичкам, читаем учебники, решаем задачки, постим ссылки на решения, ОП их проверяет и дает советы и замечания. ОП заходит редко, где-то раз в 2-3 дня, у него мало времени, не жди его, решай задачки дальше. ОП отвечает на все вопросы по его задачкам и учебнику, а вот насчет каких-то других вещей - только если останется время. Но в треде немало анонимных экспертов разного уровня, так что вряд ли вопрос останется без ответа. С чего начатьУ нас есть свои уроки по основам PHP, они собраны и выложены по адресу http://codedokode.github.io/phpbook (вас отредиректит на другой домен, не читайте, не сохраняйте, не запоминайте его, он временный). Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то можно начать с него. Он простой и понятный. Там есть задачи, их нужно решать (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению. С другой стороны, если этот учебник тебе не нравится, можно читать любой другой. Или официальный мануал. Или все сразу.Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Visual Studio Code, Netbeans PHP или PhpStorm (с ним будет удобнее).Если не знаешь как решать, запости код, напиши в каком месте остановился и попроси подсказку.Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP, этого недостаточно. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL, PDO, работа с таблицами в БД, работа с формами, MVC, git, composer, JS, фреймворки, автоматизированное тестирование. Надо переходить к более серьезным задачкам, которые научат тебя всему этому.- для начала прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md- установи Апач + PHP (советы выше и ниже) и читай туториал http://php.net/manual/ru/tutorial.php- Учи HTML/CSS и SQL, PDO, хотя бы основы- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217- Еще более сложная и долгая задача на Yii/Symfony: https://gist.github.com/codedokode/8733007- После нее можно изучать автоматизированное тестирование https://gist.github.com/codedokode/a455bde7d0748c0a351a- Если ты все решил, переходи к Symfony 3/Doctrine 2 - Почитать про паттерны http://designpatternsphp.readthedocs.org/ru/latest/README.html (если ты не изучил ни одного фреймворка, то это будет рановато), тут с примерами кода http://designpatternsphp.readthedocs.org/ru/latest/README.html . Имей в виду что без примеров использования их учить бесполезно - не поймешь, хочешь увидеть примеры использования паттернов - ковыряй исходники Симфони, например Symfony Forms. Не заучивай паттерны - смотри код и думай, зачем тут они использованы. Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:https://github.com/codedokode/pasta/blob/master/soft/php-install.mdhttps://github.com/codedokode/pasta/blob/master/soft/apache-install.mdМожет тебе понадобится пользоваться командной строкой, вот гайд https://github.com/codedokode/pasta/blob/master/soft/cli.mdРешения задач лучше показать мне, особенно на ООП,так как сам ты вряд ли увидишь все ошибки. Пости свой код на гитхаб и вкидывай ссылку в тред по мере решения. Я прокомментирую и укажу на ошибки.Параллельно стоит подучивать английский, на первых порах можно без него, но по мере развития придется все чаще сталкиваться с англоязычными статьями, так что лучше не откладывать. Читать можно news.ycombinator.com - это что-то вроде их хабра. Также можно начинать смотреть фильмы и видео на английском.Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.- HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md- JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0- SPA (сложно): https://github.com/codedokode/pasta/blob/master/js/spa.md- Проверялка решений на JS: http://dkab.github.io/jasmine-tests/- MySQL: https://github.com/codedokode/pasta/blob/master/db/databases.mdЧто почитать- Мануал по PHP — http://www.php.net/manual/ru/langref.php- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования- JS: learn.javascript.ru- Про Git: https://git-scm.com/book/ru/v1- Новости IT на англ. https://news.ycombinator.com/- какой-то древний, устаревший, но большой и на русском справочник по веб-разработке, посоветованный аноном: https://starcat.dp.ua/doc/wdh/Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492 У ОПа нет аккаунтов и групп вконтакте, в фейсбуке, в твиттере, все "пхп-треды" там поддельные.Платиновые вопросы- Почему PHP? Потому что вакансий море, и учить легко. - Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.ru/6bfCY9lfl и получи личную немного устаревшую оффлайновую копию сайта (можно читать хоть на андроиде без интернета)- Что надо знать чтобы найти работу - разработчику: PHP, SQL, HTML/CSS, JS, ООП, Git, композер, MVC, фреймворк. Верстальщику - HTML/CSS, JS, jQuery. У нас в треде были люди, которые практически с нуля учились и смогли найти работу.- Что будут спрашивать на собеседовании если 0 опыта - гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись- Можно подробнее про поиск работы, собеседования - нет, ОП писать не будет, но может кто из анонов захочет рассказать. Поищите тред перезвонивших, а также раздел /wrk/- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть. Если каждый будет оформлять код как хочет, будет бардак.Если тебе лень выравнивать код руками, закачай его на http://beta.phpformatter.com/ и нажми «format». Робот исправит выравнивание и отступы в мгновение ока (да, прогресс не стоит на месте). Если ты используешь мощную IDE вроде PhpStorm, там тоже есть функция форматирования кода.Горячие клавиши для форматирования кода в разных IDE: https://gist.github.com/codedokode/8759492Вообще, в PHP долгое время не было единого стандарта оформления кода, все писали как попало и было много бардака, но сейчас дело лучше — есть стандарты PSR-1 и 2. Вот как надо оформлять код:- переменные и функции пишутся с маленькой буквы, подчеркивание не используется, используется camelCase, пример: $x, $numberOfPeople, printResults()- Название функции начинается с глагола, в стиле «сделайЧтоТо»- не знаешь английский? Не беда, в 21 веке есть решение этой проблемы. Не пиши транслитом, открой лучше Гугл Транслейт и найди название для переменной там- в именах классов используется CamelCase, первая буква большая, «_» может использоваться- мы предпочитаем подстановку переменных вместо конкатенации строк: "I am $age years old" — хорошо, 'I am ' . $age . ' years old' — плохо из-за обилия точек и кавычек- мы используем для отступов 4 пробела (можно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела)Вот ссылка на стандарты, где все это описано подробнее и даны примеры оформления: PSR-1: https://github.com/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-1-basic-coding-standard.mdPSR-2: https://github.com/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-2-coding-style-guide.md
Напомню себе, как будет время, проверить из позапредыдущего треда:- https://github.com/asdasdasdasddasasdasdas/StudentList из >>1448614- https://github.com/baraboolka/StudentList из >>1460026- https://github.com/hikkej/student_list из >>1460537- https://github.com/asdasdasdasddasasdasdas/Filesharing из >>1462815- https://github.com/deadj/student-list/ из >>1466025 и >>1475811Если я кого-то еще пропустил или не ответил, можно напомнить о себе в этом треде. В прошлом треде >>1475112 (OP) на большинство постов даны ответы.
>>1511162Таки спорно. С одной стороны, ты прав и действительно нет смысла что-то усложнять, если нужно выкинуть пользователю html-ку с парой кнопок, то jquery будет гораздо проще.Но:1) jquery уже подрастерял свою актуальность, не полностью, но... Во-первых, браузеры подсократили различия между собой (только говносафари ещё удивляет), нет такой острой необходимости в умной обёртке, учитывающей их. Во-вторых, сам js уже эволюционировал, на ванильном js-е можно сделать то же самое с чуть-чуть большим количеством кода.2) Любой софт имеет тенденцию к усложнению со временем. Тебе нужно показать пользователю одну формочку, вторую, добавить валидацию, эффектик, что-то ещё, анимацию красивую... и в какой-то момент ты понимаешь, что оно слиплось в ком из лапшевызовов апи браузера и работы с глобальным состоянием, стоящий на костылях и хаках, чтоб быстрее. И переделать это на любой нормальный фреймворк займёт часов 20. И ты приходишь такой к начальнику и говоришь, что да, добавить новую форму - два часа, но тебе нужно ещё двадцать, потому что вот так вот. И ты услышишь следующие аргументы: "а чего ты сразу нормально не сделал?", "ну оно же работает сейчас, правильно?", "у нас нет денег на бессмысленные украшательства, не трать на это времени", "просто добавь кнопку, как-нибудь потом перепишешь" и тд и тп. В итоге будешь жить с этим легаси-говном или, матерясь, срочно переписывать его нормально.Я это к чему, у бизнеса почти никогда нет ресурсов переделывать то, что и так приносит ему денег. Проще уже сразу сделать нормально, потратив на жалкий час больше, там не так много работы, сделать одну сраную форму на сраном реакте и пропустить через сборщик. Зато потом легче будет, если что.
Вопрос по dependency injection container (использую PHP-DI http://php-di.org).Как взаимодействовать с контейнером из классов? У меня есть индексный файл, в нём создаётся контейнер и через контейнер получается главный класс приложения. Примерно так:```$dicBuilder = new \DI\ContainerBuilder();$dicBuilder->addDefinitions("config.php");$dicBuilder->useAutowiring(false);$dic = $dicBuilder->build();$blog = $dic->get(\Core\Blog::class);$blog->run();```А вот как мне получить доступ к $dic из остальных классов? В голову пришли следующие варианты:0. Создать статическое свойство/синглтон, который будет хранить контейнер. Интуитивно кажется, что это хуёвая идея. Типа, использую DIC, но сам контейнер доступен "глобально".1. Вставить код создания контейнера (4 строчки) в каждый класс. Возможно, это наиболее правильно, но куча копипаста ведь.2. Создать такой же контейнер в контейнере. Т. е. в config.php пишу примерно следующее:```\DI\Container::class => function ( ContainerInterface $c ) { $dicBuilder = new \DI\ContainerBuilder(); $dicBuilder->addDefinitions( "dic-cfg.php" ); $dicBuilder->useAutowiring( false ); $dic = $dicBuilder->build(); return $dic;}```Вроде не самое неадекватное решение, но получается, что я в контейнере создаю абсолютно такой же контейнер и дальше уже работаю с ним. Да и опять же - копипаст, пусть и всего 2 раза.3. Изменить код в индексном файле на примерно следующий:```$dicBuilder = new \DI\ContainerBuilder();$dicBuilder->addDefinitions("config.php");$dicBuilder->useAutowiring(false);$dic = $dicBuilder->build();$dic->set(\DI\Container::class, $dic);$blog = $dic->get(\Core\Blog::class);$blog->run();```Т. е. добавить контейнер в самого себя через set. На первый взгляд выглядит адекватно, но, возможно, я что-то упускаю.Как поступить более правильно? Или, может, все варианты сосут и есть какой-то другой?
>>1511269Все варанты - костыли с говном, никогда не делай такого. Любой контейнер зависимостей имеет встроенные способы разрешения этих самых зависимостей. Ищи в документации - там всё есть, только поискать.А вот то, что ты не почитав нормально доки по либе, которую решил использовать, да ещё и потом костыли писать начал - хуёво. Избегай такой практики - самому же потом фейспалмами лицо разбивать не придётся.
>>1511200Иначе поставь вопрос - чем лучше питон, или нода или руби? И зачем тебе, допустим предпринимателю выбирать не пхп? То что хотят программисты - это маня хотелки. Важно что хотят те кто платят бабки. И думаю всякие помидоры всегда пляшут от этого.
>>1511306В документации я ничего не нашёл. Единственное, что хоть сколько-то релейтед https://github.com/PHP-DI/demo/search?q=%24container&unscoped_q=%24containerНо это, по сути своей, 1 вариант, только без копипаста. Разве это адекватное решение?
>>1511308Не понимаю зачем ты на такие посты отвечаешь. Каждый тред очередной шизоид всплывает с таким вот вопросом.И невдомёк болезному, что те, кто варится в этой всей теме знают рыночек побольше его, причём в разы. Вопрос нубский, жирный и неуместный.
>>1511331>Вопрос нубскийНу так я нуб, думаю с чего начать. Вот и спросил.Тут ведь для начинающих тред.
>>1511333>думаю с чего начатьДумай молча.>Тут ведь для начинающих тред.Т.е. ты тут ждёшь только таких же как ты - думающих с чего начать? И что толку от такого треда?
>>1511334>Думай молча.С чего ты решил что ты можешь мне указывать?>Т.е. ты тут ждёшь только таких же как ты - думающих с чего начать? И что толку от такого треда?С чего ты решил что тут должно быть как ты хочешь?
>>1511269>Как взаимодействовать с контейнером из классов?Вся соль контейнера в том что тебе не нужно взаимодействовать с ним из классов. Ты в конструкторах описываешь нужные зависимости, и контейнер эти зависимости за тебя резолвит.>Как поступить более правильно? Или, может, все варианты сосут и есть какой-то другой?У любой программы есть точка входа, подумай какая точка входа нужна для твоего приложения и что она должна делать? Для твоего веб приложения упрощенно это почти всегда инициализация, рут -> обработчик. Т.к. контейнер в иерархии находится ближе точке входа то у тебя есть возможность просто сказать ему, контейнер - вызови обработчик и передай ему все зависимости. (На этом этапе еще тесно можно общаться с роутером и биндингом переменных рутов и переменными обработчика, например /post/:id и передавать в $id это значение). И почему ты автовайринг выключил? Это же пушка
>>1511311Почему нет? Представь что ты в public/index.php подключаешь этот файл, получаешь объект контейнера, и всё, ты можешь инитить любой класс, тот же роутер, ну а дальше понятно.
>>1511353>Вся соль контейнера в том что тебе не нужно взаимодействовать с ним из классовВ принципе, я предполагал такой вариант. Это объясняет, почему в доках ничего по этому поводу нет.>И почему ты автовайринг выключил? Это же пушка Я пока несколько путаюсь в этой теме, поэтому сейчас хочу руками указывать зависимости. Как начну лучше понимать происходящее, можно будет и включить.Вообще, мои искания начались вот с какого вопроса - как передать в объект два разных объекта одного и того же класса. Автовайринг тут, очевидно, не сработает. В процессе поиска ответа понял, что нихуя не понимаю, как оно работает.>>1511355Ну, допустим. А какие очевидные минусы имеются к варианта 3 (кинуть контейнер через set)? Или тут уже принципиальной разницы нет?
>>1511363>Ну, допустим. А какие очевидные минусы имеются к варианта 3 (кинуть контейнер через set)? Или тут уже принципиальной разницы нет?Я, если честно, вообще не понял зачем ты контейнер засовываешь в контейнер и как это тебе поможет. Это же какой-то бред на уровне return $var === true ? true : false;>как передать в объект два разных объекта одного и того же класса. Автовайринг тут, очевидно, не сработает.Автовайринг сработает, но скорее всего по дефолту передастся две ссылки на один и тот же объект, хотя реализация вообще разная может быть. Для таких случаев используются биндинг или фабрики, например у тебя класс принимает два одинаковых интерфейса, но ты хочешь две разные реализации засунуть. (Хотя выглядит это очень странно и тупо)
Аноны, помогите разобраться с отправкой почты. Не понимаю как это должно работать.есть нативная функция mail() в пхп, которая для отправки почты использует встроенный почтовый сервис операционной системы. В линукс он есть по дефолту.Я работаю с вин7, и у меня это функция не работает.Так же существует smtp - протокол и smtp-сервера. Что бы отправить на такой сервер письмо - необходимо что бы данное письмо соответствовало стандарту smtp. Для этого используют библиотеки типа PHPMailer.Я правильно понимаю?Если я работаю из винды, то мне требуется поставить smtp сервер какой нибудь. Настроить его, и уже из своих скриптов отправлять на него письма, которые уже этот сервер будет рассылать куда нужно.Так?
Вопрос по БД. Допустим есть здоровенный JSON на 1.5к строк, который отдает сервер, и мне нужно его сохранить в бд. Структура сложная как пикрилейтед. Какая структура таблиц делается в таких случаях? На каждый array делать новую табличку и привязывать по айдишнику что ли?
>>1511411Либо да (нет), либо хранить как json в sql базе, либо хранить как json в json-ориентированной базе типа монгодб на выбор
Поясните что есть api? Это ссылкка, которая возвращает какие то данные (для фронтенда в json, например)?
Почитал про phpMailer, в документации сказано что он позволяет отправлять из винды письма на smtp сервер. То есть реализует некий smtp клиент ? Этот клиент не может быть написан на пхп, так как является системным приложением и написан на с++?Я правильно цепочку понимаю:Мой пхп код -- вызываю smtp клиент, он формирует письмо и отправляет на smtp сервер, который отправляет письмо адресату . Так ?
>>1511146 (OP)Здарова, пыхеры. Для стороннего заработка хочу делать магазы на вордпрессе со всякими опенкартами. Вчера немного пописал на пхп, освоился, нынче хочу задать вопрос, я так понимаю плагины со всякими валидациями и куками хранятся в композере? Во что мне посоветуете углубиться, или же забить на это хуй и учиться чисто вордпрессу, а там все плагины сами всё сделают? Кстати, что за хуйню ублюдочный оракл сделал с сайтом mysql? Вчера зашел и ахуелСам жээс фулстак.
Как понять работу контейнера? Допустим я зарегестрировал зависимость в контейнере симфони $conteiner->register('request', Request::class);Когда я буду получать реквест в конструкторах других классах мне будет возвращаться один и тот же обьект?Или есть у меня зависимость шаблонизатора Twig. Я хочу в этот шаблонизатор добавить глобальную переменную класса Session. $container->register('twig', Environment::class) ->addArgument(new Reference('twig.loader')) ->addMethodCall('addGlobal',['session', new Reference('session')]);Если мне, допустим, нужно определить Session еще и в конструкторе асбтрактного контроллера. У меня будет один и тот же обьект Session в обоих случаях? Или создадутся 2 разных обьекта? Смотрю примеры фреймворков (Symfony, Laravel) вообще ничего не ясно. Доки симфони по контейнеру прочитал, думаю, десяток раз. Не вижу там этой инфы. Еще меня смущает использование таких обьектов как $app, response в контроллерах. Как они обьявлены глобально?Подскажите хотя бы как это загуглить, ибо как не ищу выдает одни и те же доки на разных языках, но там только описано как задать зависимость, например.
>>1511689>У меня будет один и тот же обьект Session в обоих случаях? Или создадутся 2 разных обьекта?А тебе в исходниках посмотреть не судьба эти методы?
>>1511730Да я без негатива вроде, хз.Смотри тот метод, где разрешается зависимость очевидно - как оно там работает. Исходники-то открыты.Ты ж программист.
>>1511744Я уже все пересмотрел. Сейчас пробовал респонсы создавать разные контейнером и менять в контент. Пришел к выводу что он создается один и тот же. Это радует. Только пропала одна проблема - появляется новая. Symfony Session компонент просто не работает. Когда пытаюсь его создать - пишет что сессия уже запущена. Но на метод $session->isStarted() возвращает false. Пробовал и session_abort до этого делать и гуглить. В гугле самая большая проблема в том, что выдает запросы по работе с самим фреймворком, а не с компонентом.
Здравствуйте аноны! Я в некотором замешательстве. Лениво учу python довольно продолжительное время, знаю синтаксис и не более. Да и то поверхностно. Не могу понять где применить этот язык и куда двигаться, везде кричат что нет вакансий, дикая конкуренция итд. Короче полная дизмораль. Подумываю пересесть на стул с php. Скажите, у вас есть четкий алгоритм прихода к успеху на работу? Не уткнусь ли я в лес непонимания куда мне двигаться дальше? У меня тройка по математике и я хочу простую ламповую работку для сыча. Пхп тоже требует адский стек технологий?
>>1511498бамп!Аноны, кто в теме объясните подробно.Как phpmailer может отправлять напрямую письма из винды, если это поидее надстройка над mail(), которая по дефолту вызывает в linux функцию sendmail, а в виндовс на сколько я понимаю не вызывает нихуя ( или вызывает какую то виндовую почтовую службу все таки? )
>>1511689В принципе в контейнере всегда должен храниться один и тот же объект. Когда ты запрашиваешь объект, идет проверка - если объекта в "хранилище" контейнера нет - он создается, а если нет - возвращается уже созданный объект.У ОП-a есть урок который позволит понять чуть лучше:https://github.com/codedokode/pasta/blob/master/arch/di.md
>>1511815Ты не прав. В контейнерах может лежать по сути фабрика, есть такой подход. В том же симфони контейнере можно указать, тебе кэшировать объект или каждый раз пересобирать его заного.Ну и да, главная задача контейнера - резолвить зависимости между компонентами, а все прочие кэши-хуеши - дело десятое.мимо
>>1511771Везде нужен стек. Но на пхп легче, можно хоть в те же вордпрессы вкатиться. Я хоть и нуб, но не особо понимаю преимущество питона в вебе, язык сам по себе тормознутый, так еще и конкуренты аля пхп => и работы меньше.
>>1511689Тебе правильно посоветовали: изучать исходный код.Контейнер Симфони относительно сложный, для изучения лучше взять что-нибудь простое вроде Pimple: - https://pimple.symfony.com/- https://github.com/silexphp/PimpleКонтейнер Симфони сложнее, так как он позволяет конфигурировать сервисы через конфиги вроде YML-файлов, а также в нем есть "компиляция" - генерация единого PHP-файла с заложенными в нем настройками, что позволяет сразу загрузить этот файл, а не читать и не разбирать конфиги в дальнейшем. Это повышает производительность.> Когда я буду получать реквест в конструкторах других классах мне будет возвращаться один и тот же обьект?Это зависит от контейнера и его настроек. Возможно и то, и то. В Симфони, например, есть специальная опция для выбора, возвращать один и тот же объект или создавать новый: https://symfony.com/doc/3.4/service_container/shared.htmlВообще, на мой взгляд, это плохая идея класть Request в контейнер (или какие-то другие изменчивые объекты). Представь, что у тебя приложение, которое обрабатывает много запросов подряд: foreach ($requests as $request) { $container->set('request', $request); $kernel->handle($request);}В ходе работы приложения оно может запросить какой-то сервис из контейнера, и при создании этого сервиса контейнер встроит в него текущий request. Затем при обработке следующего request оно запросит тот же сервис, и ему дадут экземпляр, в который встроен предыдущий request, и который будет "думать", что до сих пор работает с предыдущим запросом.Раньше Симфони использовала scopes, чтобы не допускать такие ситуации и удалять сервисы вместе с request. Но позже их убрали: https://symfony.com/blog/new-in-symfony-2-8-deprecating-scopes-and-introducing-shared-services Вместо request теперь в контейнер кладут request_stack, который возвращает актуальный request, что по моему не сильно лучше и не исключает того, что долгоживущий сервис сохранит себе копию request.Также Симфони могла бы пересоздавать контейнер на каждый новый запрос. В любом случае, мне это их решение не нравится. Проще просто не класть request в контейнер.> $container->register('twig', Environment::class)> ->addArgument(new Reference('twig.loader'))Это, кстати, можно настраивать с помощью конфига, а не писать кодом. Правда тогда для оптимизации придется делать "компиляцию" контейнера.> Еще меня смущает использование таких обьектов как $app, response в контроллерах. Как они обьявлены глобально?Ты бы дал пример кода или ссылку, а то непонятно, о чем речь. Непонятно, где ты их увидел, какой фреймворк или библиотеку использовал, какой версии. Симфони, например, умеет смотреть на тип аргументов в методе контроллера и автоматически передавать туда подходящие объекты (мануал: https://symfony.com/doc/3.4/controller.html#fetching-services-as-controller-arguments )
Аноны, объясните, почему я не могу через composer удалить пакеты которые требуют версию php большую чем я в данный момент использую?Юзал 7.2, ставил пакеты требующие именно 7.2.Откатил до 7.0 - теперь composer не может их удалить>>v6.4.1 requires php ^7.2 -> your PHP version (7.0.32) does not satisfy that requirement.Такая вот ошибка пишется.
>>1512017Композер, как я понимаю, обновляет версии в большую сторону. Проще всего удалить папку vendor и composer.lock и запустить установку заново.
>>1511771Бамп вопросу, я может не совсем правильно спросил, имелось ввиду смогу ли я вкатится во что нибудь простенькое вроде пилить сайтики на фрилансе. На начальном этапе и 20-30к зарплата ьудет норм. Что для этого необходимо знать?
>>1512200Очень много всего, на самом деле. Для начала, попробуй сделать студентов или файлообменник из оп поста. Дальше уже сам будешь видеть какие у тебя пробелы. Алсо, не рекомендую сразу во фриланс нырять, ты с 90% будешь пилить адовый говнокод.
>>1512015Ребят, я уже спрашивал но конкретного ответа не получил. Какая загруженость на работе в веб-конторах? На данный момент я сижу с утра до ночи и либо код пишу либо что то читаю. Пока что все устраивает, но понимаю, что если дальше так продолжу то выгорю или ослепну нахуй. А на счет работы боюсь что меня возьмут, а я не буду успевать работу выполнять.
>>1512241Тоесть ты предлагаешь учиться на собственных проектах. Придумывать сайт с функционалом, потом реализовывать его. Что скажешь о cms, оно вообще нужно или сразу фреймворк учить? Имеет ли смысл пилить свой движок для сайта?
>>1512277У пхп ждунов только ларавел конторы. Бойся как огня всяких вордпресс контор. Не делай сложных заданий дома. Налегай на жс. Быстрее вкатишься.
>>1512298Да и вообще ты сможешь себя программистом в полном смысле считать только когда в командной разработке участвовал. СМS подразумевает что один чушка по быстрому накидывает плагинов и проверяет чтобы это все минимально работало.
>>1512298Это не мой пост, мне лучше чтобы без cms , а то это зашквар как я понял. У python и php есть точки соприкосновения? Будет профит если знать оба языка?
>>1512306У меня в городе просто нет вакансий для чистого Laravel junior. Везде упоминается Yii как минимум. А то и на cms скажут шаблон натянуть - хер знает. Стоит ли мне без опыта в такую контору идти чтобы его набраться? Или сидеть ждать чуда/искать фриланс на ларке/symfony.
>>1512309Зашкар или не зашкар понятия какие-то детские. Это твой путь или не твой, может кто хочет стать cms одиночкой на арворке. Кто-то веники вяжет и неполохо себя чувствует.
>>1512241>Алсо, не рекомендую сразу во фриланс нырять, ты с 90% будешь пилить адовый говнокод.Тут считаю двоякая ситуация. Для большинства войти-в-ойти это что то типа двери в нарнию, где тебя добрые дяди возьмут к себе, научат и платить будут. В принципе это потенциально возможно.Но в этом контексте я считаю что личные качества значат больше чем навык, навык придет по итогу если код писать. А вот решительность, активность, предприимчивость, умение искать работу и себя подавать - это стоит гораздо дороже всех прочих личных навыков, и на самом деле не просто так из воздуха берется. А уж если ты еще и начинающий.Я это к тому говорю, что по итогу на любой скилл будет покупатель. Я лично видел статичный прости Господи лендиг это был пиздец ужас, на табличной верстке за который взяли 10 тыщ. Тут полтреда за 10 к и месяц времени фреймворк ебанет и магазин поверхнего. Утрирую конечно. Но работать зная что ты учишься,и тебе еще и бабла заплатят, пусть и на дошик - это гораздо приятнее.Поэтому эти вещи стоит прокачивать, просто реально по себе искать задачи. Люди на такой хуйне зарабатывают порою, что диву даешься. Кабанчики не зря подскакивают в этой жизни. >>1512298>>Программист не ограничен пхп проектами.Золотые слова. Я как в пхп основательно въехал - для меня в node.js все значительно яснее стало.
>>1512474>Золотые слова. Я как в пхп основательно въехал - для меня в node.js все значительно яснее стало.Хочу когда с пхп разберусь и стану хотя бы мидлом - начать учить другие языки. Считается ли это нормой? Помню в треде писали что нужно выбирать что то одно - там и сидеть.
>>1512533Скорее наоборот, чтобы стать мидлом придется учить другие языки и технологии. Иначе будешь на одном месте сидеть.
>>1512533У бекендеров принято ещё и фронтенд знать хоть как-то. Тот же js тебе по-любому изучать придётся. Никто не мешает потом на него перекатиться.Ноду ту же щупал, наверное, каждый второй из местных.
>>1511814Кажется я понял почему PHPmailer может отправлять smtp-почту - потому что соединение реализуется черкз сокеты. А их пхп нативно поддерживает.Я прав?
Делаю задачку по учебнику,что не так?<?phperror_reporting (-1);$human1 = mt_rand(1,6);$human2 = mt_rand(1,6);$cpu1 = mt_rand(1,6);$cpu2 = mt_rand(1,6);$humanSum = ($human1 + $human2);$cpuSum = ($cpu1 + $cpu2);if ($humanSum > $cpuSum);{ echo "Победа человека!\n";}elseif($humanSum < $cpuSum);{ echo "Победа ИИ!\n";}else ($humanSum == $cpuSum);{ echo "Ничья!\n";}?>
>>1512801Идеон говорит что-то не так с синтаксисом PHP Parse error: syntax error, unexpected 'elseif' (T_ELSEIF), expecting end of file in /home/m5d2V4/prog.php on line 16ПХП Шторм подсвечивает выделенные жирным скобки как Expecting statement<?phperror_reporting (-1);$human1 = mt_rand(1,6);$human2 = mt_rand(1,6);$cpu1 = mt_rand(1,6);$cpu2 = mt_rand(1,6);$humanSum = ($human1 + $human2);$cpuSum = ($cpu1 + $cpu2);if ($humanSum > $cpuSum);{ echo "Победа человека!\n";}elseif($humanSum < $cpuSum);{ echo "Победа ИИ!\n";}else ($humanSum == $cpuSum);{ echo "Ничья!\n";}?>
>>1512853Точно! Спасибо.Но теперь Шторм ругается на else ($humanSum == $cpuSum) { echo "Ничья!\n";}Cannot use [] for reading
>>1512866>В чем?Ты теперь на каждый пук будешь у нас спрашивать?Сходи и сам посмотри как правильно писать на пхп надо.
Анон, делаю калькулятор (пушо с переводом цифр в слова не справился):1) Откуда берётся ноль? Пробовал убрать с помощью $i+1, но не вышло.2) Я хочу, чтобы у меня в $a записывались числа при помощи цикла, после чего при появления знака '+' - он прекращал записывать цифры в $a и начал следующие цифры после знака '+' записывать в $b. Как это реализовать?
>>1512970У тебя не видно чему равен $input и чему равно начальное значение $a. Может, там такой код? $a = 0;....$a = $a . $char;Здесь оператор точка перед склеиванием преобразует число 0 в строку "0" и к ней приклеит следующую цифру.
>>1513081Бля, точно, спасибо.А как можно добавлять число к числу, без преобразования в строку?$a += - не преобразует, но он тогда просто прибавляет цифры. Какой-то оператор для этого существует?
>>1513083даже когда>>1513103не присваивается в функции строкано я не понимаю почему там есть равно, значит должно блинсейчас кстати попробую обьявить $str= ' ';
>>1513101А не надо вначале было класть 0. Помести в переменную пустую строку.Также, ты мог бы использовать математику вместо строковых операций, что будет красивее. Формула такая: число = число умножить на 10 + новая цифра.
>>1513113>А не надо вначале было класть 0. Помести в переменную пустую строку.Так поменял я, я говорю о том, как сделать так, чтобы переменные добавлялись не в строку и чтоб на выходе получалась НЕ строка.>Формула такая:Формула чего?..
>>1512536>>1512543Ну фронтэнд это ясное дело. Просто все обычно к стеку так привязаны, советуют делать упор конкретно на него. А я хочу и все фреймворки шарить, и в ноде копаться, и в питоне. Но если так даже принятно, то в чем вся "болезненость" перехода на другой язык? Или это все сказки неосиляторов?
>>1513109>>1513103>>1513083>>1512873>>1512872ВСЕ РАЗОБРАЛ! Спасибо за внимание, оп не надапотом еще запятые доделаю, устал яhttps://3v4l.org/uaKV2
>>1513180>> Но если так даже принятно, то в чем вся "болезненость" перехода на другой язык? Или это все сказки неосиляторов?Я с ноды начинал, у нее документация для нуба - ад адский. Я вообще нихуя не понимал. Че от чего наследуется, и нахуя оно вообще нужно. И как из этого говна сайт собрать. Потом между делом изучил питона синтаксис, но питон рыночек порешал. На нем крайне мало для нуба работы.По итогу пришел в пхп, выучил sql, и так по гайдам, по видосам и прочем я разобрался и в сессиях, и в ООП и в том как вообще должно быть организованно приложение. Слои, контейнеры и все такое.Я все еще нуб, но именно на пхп я начал понимать что к чему.Сейчас для одного человека пилю личный кабинет для сайта, за небольшие деньги, типа первый проект. И все дается через боль, но идет вперед. И когда я возвращаюсь к node иногда - я прям гораздо проще понимаю что к чему, яснее.Но это я с позиции нубаря.
>>1513180>А я хочу и все фреймворки шарить, Время >и в ноде копаться, и в питоне. Время x20>Но если так даже принятно, то в чем вся "болезненость" перехода на другой язык? Во времени. Если ты можешь тратить на это всё по 25 часов в сутки большую часть своего свободного времени то все ок.Нет проблемы выучить yii, laravel и symfony ибо в целом они все mvc, только со своими внутренними правилами. Если поймешь какой-нибудь один из них, то с другими будет уже проще разбираться. Тоже самое и с другими языками программирования. В них свой синтаксис, свои нюансы, свои библиотеки/фреймворки/мода. Нужно следить за новыми версиями языка/фрейворка. Обновляться если в новой версии есть какие то исправления по критическим проблемам / улучшение производительности. Я все ржу когда вспоминаю как в 7.0 или 7.1 зарезервировали слово Object и на одном проекте пришлось в коде все это переименовыватьНет смысла быть человеком-оркестром. Стоит грамотно выбирать то, что учить. Плюс не забывай, что если постоянно работать и/или учиться то можно просто ебнуться и выпилиться.
Ребзя, а как понять на каком уровне находится анон и какой уровень нужен, чтобы идти на РАБоту?Понятно, что учиться можно бесконечно. Да и некоторые аноны с нулевыми знаниями работать шли и там уже учились.
>>1513410>Нет проблемы выучить yii, laravel и symfony ибо в целом они все mvcНу я узнал о psr-7. И сейчас в компонентах ковыряюсь. Как я понимаю в пхп фреймворки все на одном фундаменте построены.>В них свой синтаксис, свои нюансы, свои библиотеки/фреймворки/мода.Мне кажется синтаксис другого языка не очень долго учить, мода - да. Не знаю почему, но не верится что для перехода с той же пыхи на руби или питон у мидла потребуется более 1 месяца. Ну потеряю я на месяц-два чуть чуть в зп, лучше чем на люстре вздернуться. >Плюс не забывай, что если постоянно работать и/или учиться то можно просто ебнуться и выпилиться.На самом деле я уже начинаю этого бояться. Слишком спешу и времени много уделяю, жаль что выбора другого нет.>>1513424Можешь откликнуться на вакансию - пришлют тестовое. Даже если ты его не сможешь сделать/сделаешь плохо, то для тебя это какой никакой а опыт. Возьмут - хорошо, не возьмут так хоть практики прибавиться.
>>1513410>Нет смысла быть человеком-оркестром. Стоит грамотно выбирать то, что учить.А я считаю, что поковырять стоит всё что интересно и дотянешься, но при этом иметь собственный стек в котором сечёшь.
Как решается эта задача?Напиши программу, выводящую таблицу умножения чисел от 1 до N на самих себя, используя цикл. Программа должна вывести примерно такой результат:1×1 = 12×2 = 4...9×9 = 81 Я не понимаю вообще эти ебаные циклы.Это какая-то дичь.
>>1513557Скачай видеоурок какой-нибдуь и посмотри. Или на ютубе. Всё станет ясно и понятно.Советую именно так делать. Если всё ещё не поймёшь - гугли как сделать такой цикл (таблица умножения). Но не копируй, а разбери по строке, что происходит и почему прибегаю к туториалам, которые ты прошёл.
>>1511149То у одного регнуться нельза, у другого дебильные ограничения на название группы, у кого-то код отформатирован так, будто копипейстом за одну ночь настрочено.Вы там своё говно вообще тестируете?
>>1513600Сможешь ли ты в спойлере хотя бы показать как?Логика от меня начисто ускользает.Я третий день сижу за этим и похоже зря теряю время.
>>1513665Если надо что-то совсем плюшевое, то:for I>N{echo "<tr>$X</tr><tr>x</tr><tr>$X</tr><tr>=</tr><tr>pow($X)</tr>"}
>>1513693чувак так далеко не уедешь. Расскажи как ты пытался решить эту проблему, какой код писал, что именно было не понятно.
>>1513703Я знаю что не уеду.Я не понимаю ебучего принципа как это говно работает, это ускользает от моей человеческой логики.Ну теперь когда я пробомбился, я не понял почему у меня не умножает$a =1$b = $a*$a;for ($a = 1; $a < 10; $a++) { echo "$a X $a = $b";}А надо чтобы выводило:1Х1 = 12Х2 = 43Х3 = 9И так далее до 10.Я не понимаю как отобразить вывод, как сделать так чтобы число само на себя умножалось и как оно бы посчиталось.По моему пиздец какой неудачный пример и резкий скачок в сложности там.Просто цикл при увеличении на единицу понятен, но дальше просто космическая пропасть сложности.
>>1513762for ($b=1; $b<=9; $b++) { for ($i = 1; $i <= 9; $i++) { echo "$b $i = " . $b $i . "<br>"; }}Или for ($i = 1; $i <= 9; $i++) { echo "$i $i = " . $i $i . "<br>";
>>1513762Просто не твоё.В IT много разных профессий - попробуй что-нить более понятное и не задротное.
>>1513762>$a =1>$b = $a$a;Не нужно>for ($a = 1; $a < 10; $a++) {правильно>echo "$a X $a = $b";неправильно.echo "$a X $a = " . $a $a;
>>1513410> Нет проблемы выучить yii, laravel и symfony ибо в целом они все mvcТащемта то, что называется mvc в yii и (частично) laravel - это хуита, которую перенесли из старых GUI-шных приложений и не адаптировали нормально под веб.Ну и в принципе, 99 погромистов из 100 понимают "модель" как слой работы с базой данных, "контроллер" как место, где нужно писать (бизнес) логику, а "вьюху" как место, где нужно принтить данные. Что, естественно, не так.
>>1513763>>$b<=9;А зачем тут равно?Один знак < меньше достаточен только 10 указать и явно все окончится 9кой.
>>1513785Ты хули доебался, долбоёбина?Ну блядь, сука, мне надо числа от ОДНОГО до ДЕВЯТИ выводить, я и сделал цикл от ОДНОГО до ДЕВЯТИ, а не десяти. Иди на хуй, чёрт ебаный
>>1513789Если стоит просто < 10, 9 и будет последней цифрой и 10 не выведет никак.В остальном твой бомбаж как бы говорит что ты говно.
>>1513790>послал выблядка на хуй>анон считает, что это бомбёж а не призыв к действиюВыключай свои маняфантазии и иди работать.
Пытаюсь получить бесплатный домен tk на freenom.com, и не получается. Они прикрыли лавочку, или я где-то туплю? Где ещё можно получить домен бесплатно? Мне любой, лишь бы его можно было прикрутить к уже купленному vps.
>>1513773Если вкратце, то:"Модель" обычно понимается как "набор классов-моделей бд", что ошибочно. "Модель" является "моделью бизнес-области", по аналогии с математической моделью.По сути, работа программиста - это моделирование некие бизнес-процессы средствами программного кода.Соответственно, модель ничего не знает про то, на чём она работает, не знает ничего про базу данных и всё такое, там пишется платформо-независимый код.Далее, "вьюха" и "контроллер", эти штуки нужны были в те времена, когда софтина крутилась на одной машине с пользователем, соответственно, была задача "отображать" что-то на экране и "контролировать" приложение, улавливая сигналы. Сейчас в вебе как бы всё давно не так, mvc, mvp и прочее актуальны для десктопов и мобилок.Сейчас в вебе нужен слой транспорта/интерфейсов (сокеты/http/grpc/*), вызывающий слой приложения (содержит юз-кейзы), который уже вызывает конкретный сценарии из модели и связывает их в конкретный юз-кейз.При этом оно всё базируется на инфраструктурном уровне, который уже содержит реализации работы с бд (к примеру, в виде репозиториев) и прочее.Там много всего и ещё больше тонкостей, читай про clean architecture, hexagonal architecture и domain driven design.
Знаете, лично я не понимаю, почему ВСЮ логику сейчас принято пихать в модель. А в контроллере остаётся только передаточное звено. "О, юзер хочет сделать вот это - пнём вот этот метод модели и отдадим юзеру результат!". Я не вижу, чем этот подход лучше, чем толстый контроллер. Ну, кроме "стильно-модно-молодёжно".
>>1513891А это уже переход на личности. Давай так: я мимокрокодил и вообще не кодил ничего, окей? Ты в любом случае круче меня.>>1513893>>1513896Вот хоть убей не вижу профита.
>>1513905>я мимокрокодил и вообще не кодил ничегоА какой тогда смысл с тобой вообще время терять? Притащил статей чтобы срач начать, а сам отношения к разработке не имеешь.Иди-ка ты в/б, дружок.
Анишки, пока вы сретесь, может кто подскажет:имеет место проблема с кешированием сайта, сделанного на slimСуть проблемы - делается урл типа /delete/2 по нему система удаляет файл с айдишником 2, обычный анлинк. Проблема в том, что к концу дня этот урл перестает удалять файл. НО, если я очищаю кэш браузера, то урл начинает работать и срабатывает еще пару раз. А потом по-новой очищай. Вопрос - кто-нибудь сталкивался с подобным? Куда хоть копать? В сторону браузера? В сторону хостера (бегет)? В сторону слима? Я добавил в шапку сайта заголовок с ноу-кэш. Не помогает. Смотрел в трех разных браузерах - везде одинаково.
>>1513848Ты или по пунктам критикуй, или не возникай. И да, сам попробуй уложить архитектуру приложений в 2 абзаца.Ну и да, если совсем кратко:- "модель" - это модель предметной области, содержит бизнес-логику- "контроллер" - это то, что нужно делить на две части, собственно, "хендлер" (вычитывает нужные данные из запроса) и "юз-кейз" (валидирует данные, вызывает модель)- "вьюха" не нужна совсем.
>>1513810>Соответственно, модель ничего не знает про то, на чём она работает, не знает ничего про базу данныхМинуточку, а скул-запросы куда лепить? В контроллер? Или во вью? Куда их ещё-то, как не в модель? И как можно написать запрос, который будет ничего не знать, в какую базу он полезет: в оракл или в майскул?
>>1513979в сервисконтроллеру насрать, каким образом получается нужный набор объектов из моделион только говорит "а дай-ка мне такие объекты"потому что завтра ты поменяешь БД на обращение к микросервису, и чо, будешь контроллер еще переписывать?а там и до гуя дойдешь?
>>1513980Анон дело говорит. Ты описываешь интерфейс, скажем:interface UsersRepository { public function Load(int $userId); public function Save(int $userId); public function LoadByName(string $name);}И используешь его в сервисах и юз-кейзах. А этот интерфейс уже может реализовывать MysqlUsersRepository, который и делает запросы.
>>1513977>по пунктам критикуйПережовывали сто раз уже на форумах. Нах ты сюда это принёс, болезный? Ни кода, ни своих наработок - только чужие статьи и чужие мысли.Кого критиковать, тебя? Ты никто вообще.
>>1514006Хз, я не пробовал, но с большой настороженностью отношусь к любым таким надстройкам над php. Может и норм, но я бы всё равно ноду взял.
>>1513980>потому что завтра ты поменяешь БД на обращение к микросервису, и чо, будешь контроллер еще переписывать?Зачем контроллер? Модель. А "сервис" - это уже не MVC же получится. Я что-то запутался в вебе образца 2019. Олсо, за это "мы делаем сайт визитку, но вдруг завтра он станет порталом на микросервисах и оракловой базой в распределённом кластеере? Давайте предусмотрим всё!" известный всем нам товарищ рекомендовал в своей книге (обязательной для изучения любому программисту) пиздить ногами.
>>1514015Что за книга? Прям увожением проникся к товарищу.городить абстракции на абстракции только потому, что так можно, и может пригодиться когда-нибудь - признак дегенерата от программирования
>>1514018>Что за книга?Честно говоря, я забыл и как его звали, и как называлась книга. Не то Кнут, не то Страуструп, а может ещё кто-то из их компании. Постоянно мелькает эта книга, а я постоянно забываю название.
Как делать задачу?Клавиша shiftЕсли ты общаешься в интернете, то, наверно, заметил, что у некоторых людей есть дурная привычка, вопреки всем правилам и нормам русского языка, начинать все предложения (и даже иногда имена) с маленькой буквы. Поскольку никакие аргументы на таких людей не действуют, давай исправим их текст с помощью языка PHP.Не знаю как составить регулярное выражение для разделения текста на строки. Не получается впихнуть пробел в такое выражение '/[.!?]+/u' .http://sandbox.onlinephpfunctions.com/code/943693eba4c9584583afc1fa406796417445212a
>>1514020Ну я понел примерно.Помню первые парсеры писал и с ООП игрался - наворачивал одно на другое вечерами - библиотеку на фасад, с тором чтоб и многопоточно, и по SOLID всё надо красиво. Потом заметил, что я третий день пишу ёбань и ни строчки конкретной логики, и написал за полтора часа всё что надо. Тогда и понятно стало, что тормозить надо все эти фантазии и писать конкретику, иначе дроч один.
>>1514015Надо, Федя. Надо. Это за бабло заказчику извлоль быстрее, некогда проектировать и так сойдет. Когда учишься нужно айл ду май бест всегда делать. Вот наспупит реальный случай, когда сеньор-помидор психанет и нахер уволится, и придется тебе придумывать архитектуру 1000 человекочасов. А ты обосрешься и будешь дальше всю жижнь свои мокрописьки писать. Оно конечно понятно что 90% веба - это мокрописки. Но хочедца расти над собой.
>>1514045- Дарья, когда котлеты будут?- Через десять минут Филипп Филиппович.- Молодой человек, изволите обследоваться, приходите после обеда к трем часам.
>>1514051Молодой человек, помогите пожалуйста >Не получается впихнуть пробел в такое выражение '/[.!?]+/u'
Объясните нюфане, если компания хочет создать приложение и собирается использовать фреймворки, то она берет фреймворк для пхп вроде ларавеля ИЛИ она берет фреймворк для джс вроде реакта ИЛИ она берет и то, и другое и пытается их помирить?
>>1514058/[.!?]+/u =====> /\s/uРазбивает теперь по словам....Возможно я неправильно описал проблему. С предыдущей маской /[.!?]+/u получается это __________________________________________________________array(3) { [0]=> string(11) "ну что" [1]=> string(47) " не смотрел еще black mesa " [2]=> string(86) "я собирался скачать ,но все как-то некогда было"}__________________________________________________________Вроде бы всё ок, но остаются пакостные пробелы в начале и конце строки... Как бы их убрать?
>>1514015Понятно, что для сайта-визитки сложного бекенда не надо.Но:1) Не все пишут сайты-визитки;2) Софт имеет свойство усложняться, а не упрощаться со временем;Я приведу аналогию с канализационной системой и прочей инфраструктурой. Проектируешь ты такой городской район и тебе говорят, что там 3.5 хижины находятся. И ты бросаешь им провода с соседнего здания, пару труб - и все счастливы.А потом появляется ещё хижина, ещё одна, домик, домик, магазинчик, маленький заводик, офисное здание, блядский сраный небоскрёб и статуя огромного кота.И если ты в какой-то момент (а может даже сразу) не сделал нормальную развязву, систему распределения и так далее, то в итоге всё превратиться в тайские коммуникации (https://om-ek.ru/image/cache/catalog/photo/vxTa4HosZ4w-800x600.jpg).Именно для этого и придумали архитекутуру, методы, паттерны и так далее - как набор инструментов и способов выстраивать инфраструктуру так, чтобы в итоге не самоудавиться случайно.И говняный MVC при усложнении логики - это отличный способ навернуть говнеца, ещё говнеца поверху и запечь в совершенно нечитаемый дерьмонолит, разработчики которого уволятся или умрут от ужаса, фичи будут пилиться годами, вызывая каскады регрессий и всё такое.Так что не будь дауном, применяй паттерны и инструменты с умом и не ври мне тут, что "не нужно и всё и так работает", всегда после таких слов я заглядывал в код разработчика и видел кромешный пиздец.Нормально делай и нормально будет.
>>1514028Разбей исходную строку на предложения. В них сделай заглвные буквы и склей. Чтобы регулярки подбирать удобно пользоваться этим https://regex101.com
>>1514065А, увидел. Вообще способов много можно придумать, сам не помню каким делал. Но сейчас первое что в голову приходит - разбить строку на предложения, потом предложения на слова. И все это склеить. Но мне кажется можно сделать как то легче с помощью регулярок
>>1514439Для начала, использовать онли симфони либо ларавел, если мало опыта. yii и cms-ки - это архитектурный ад.Во-вторых, прочитать гайды, советы и бест практики по выбранному фремворку.В-третьих, выше уже писали. Изучать clean architecture, hexagonal architecture и ddd, а затем их реализации на php, лучше на конкретном фремворке. Лучше пока ещё ничего не придумали.
>>1514480Ты в глаза долбишься что-ли?Симфони, либо ларавел, если мало опыта.Много опыта -> симфониМало опыта -> ларавел
>>1514446Интересно где найти контору, которая делает все на чем то одном. Как правило это студия где делается все и на всем, от wordpress до laravel. Или ДСах это норма?
Привет если кто работал с битриксом а в особенности их рест апи сочуствую"Задача" стоит в том чтобы воспользоваться им в дальнейшем наименее больно, для этого нужна та или иная обертка, какие рассматриваются варианты?1. работать полностью по философии битрикса только насытить обертку чеками и некоторыми нужными вещами которые в апи отсутствуют в силу говности - этот вариант наименее удобен для дальнейшего пользователя библиотеки но наиболее устойчивый об этом далее2. делать обертку в виде классов гейтов и дтошек на всякие сущности с минимальными проверками уже в дтошках, всем остальным внутри гейтов3. спрятать апи по сути в "орм" поверх него, играй с модельками и кидай в персист, на остальное тебе посрать, возможно немного кодогенерации для отражения схемы реального портала на модели или тому подобноеварианты 2. и 3. (в меньшей степени) "опасны" в том плане что т.к. контракт у этого апи по сути так же как и документация"прозрачный", почти невидимый, то следовательно код который оборачивает его вероятно придется часто менять, так-же не понятно с многими вещами как работать, т.к. любой модуль может пихать своё говно в это же самое апи и иным образом его модифицироватьВ общем задача завернуть апи наиболее устойчивым и удобным образом, уже два дня бью голову как получше это организовать.Наличие всяких жидких штучек вроде серверного батчинга с референсами через по сути обращение к серверным php переменным не сильно в этом помогает, мы даже думаем тупо не поддерживать такое.
>>1511146 (OP)САП, двач, нужна помощь.У меня есть три класса с профессиями. Задача: Создать страничку, где с помощью <form> и <select> дать пользователю возможность выбрать профессию, ajax запросом отправить ее на сервер, где нужно получить список полей (свойств класса), сформировать под каждое из них <input> и снова отправить на сервер, где создать выбранный объект класса и записать информацию о создании в лог.Если пользователь изменит профессию, то список полей должен обновиться.Что у меня получилось:1. Создать классы, унаследоваться, разобраться с __constructor, __get и __set и все такое;2. Создать класс-логгер;3. Разобраться с запросами и ответами, манипуляцией dom с помощью jquery, добавлением, удалением и обновлением элементов страницы.Что у меня не получается:Разобраться с тем, как создать объект на основании информации их $_POST['prof'].Пробовал разный треш, на который пышечка справедливо шлет меня становиться членодевочкой:$object = new $_POST['prof']; - так объект создать нельзяget_class_vars($_POST['prof']); - так нельзя посмотреть методы классаget_class_vars($_POST['prof']); - так нельзя посмотреть методы объекта.Я понимаю, что это бред, так как я получаю в $_POST['prof'] строку, а не класс. Но не понимаю, как тогда мне сассоциировать с этой строкой класс, как на ее основании создать объект и заполнить его данными.К задаче есть подсказка:"Что бы получить список полей (то есть список всех свойств класса профессии), можно создать специальный метод, который будет получать массив всех свойств при помощи функции https://www.php.net/manual/ru/function.get-object-vars.php.Например, для водителя это будет: Имя, возраст, зарплата, стаж, категории, марка личного автомобиля".Но мне она особо не помогает, так как я концепцию как таковую не оч понимаю. Двач, очень прошу, объясни в чем тут дело? Как правильно?
>>1514749Зависит от конкретной конторы и её типа. Если тебя интересуют аутсорсеры, то те, которые подешевле, берутся за всё подряд. Те, которые подороже, могут себе позволить крупных закачиков и какую-никакую архитектуру, они так и так будут тяготеть к нормальным фреймворкам. Но тут всегда нужно очень внимательно смотреть на саму контору, чтобы в ад не попасть, даже крупняк бывает очень херовый и лучше бы в такой не попадать.А у продуктовых контор основной продукт уже на чём-то написан, можно хоть на собеседовании об этом спрашивать.
>>1515166Ну у меня в городе из контор только пару контор берущихся за любую работу как я понимаю (любой регион и любая сложность). Я вот начитался, и теперь боюсь идти, ибо скорее всего работать придется со всем cms/yii/laravel
>>1515134>ajax запросом отправить ее на сервер, где нужно получить список полей (свойств класса), сформировать под каждое из них <input> и снова отправить на серверМне кажется это лишнее, лучше сразу их куда-нибудь скласть и при смене пункта в селекте рисовать нужные инпуты.
>>1515134Если задача - просто дать пользователю возможность менять профессию, то городить что-то со свойствами классов изначально ошибочно.Делаешь класс UserStorage с методами add и get, делаешь класс ProfessionStorage с теми же методами add и get, делаешь класс UserProfessionStorage с методами addForUser и getForUser.(Чтобы не заморачиваться с бд, то каждый из классов, может писать и читать из файлика, это изи пишется)так что твоё действие "получить для юзера профессию" будет выглядеть, как:$profId = $userProfs->getForUser($user->id); // возвращает id профессии или null.if ($profId !== null) { $prof = $professions->load($profId); // тут делаешь с профессией, что хочешь. }
>>1515146Фабричный метод тебе в помощь.Хотя, скорее всего, ты неправильно архитектуру пилишь с ООП это надо продумывать.
>>1515253Анончик, ты такой умняш, спасибо тебе, чувствую себя черствым хлебушком.>>1515272Такие были условия задачи. Не уверен, что там подразумевались паттерны, но постараюсь разобраться, спасибо тебе.
Посаны, разбираюсь с ООП.Собственно, такие вопросы: https://ideone.com/8Xfm051. Есть price и weight. Если я хочу с ними работать, например с учётом ндс цену вывести, то в каком виде и где я должен рассчитывать ндс? Без разницы куда вставить расчёт ндс? Внутри product?2. функции - являются методами, верно?3. Если я хочу создать отдельный метод, в котором будет выводиться только цена и ндс, то надо просто создать второй метод с нужными данными, после чего вызвать его? Нужно ли мне ещё один констракт создавать для этого, потому что при создании new Product у меня будут значение кроме ндс и цены, такие как вес, название и пр.?
>>1515372>3. Так, с 3им разобрался, нужно указывать все значения констракта, просто новый метод не будет их выводить. Тупанул.
>>15153721. Ты неправильно понимаешь "суть" (тм) ООП. ООП - это не про то, чтобы нафигачить классов, это про то, чтобы представлять код в виде объектов (сервисов), каждый из которых выполняет свою работу и по необходимости обменивается сообщениями (вызовами методов) с другими. Всякие инкапсуляции и наследования - это уже частность, следствие объектности.Также прочитай про SOLID, в частности про принцип единой ответственности.Грубо говоря - если у тебя есть user, то это просто объект для хранения данных о пользователя, и всё, кроме геттеров и сеттеров там ничего держать не нужно.Если тебе нужно считать цену - то тебе нужен PriceCalculator, который берёт, скажем, продукт и возвращает посчитанную цену для него.Если тебе нужно вывести что-то куда-то (запринтить объект в виде html в output), то тебе нужен Renderer, View или что-то такое.Короче, на каждую область логики тебе нужен свой сервис, не смешивай всё в одном.2. Метод - это функция, исполняемая в контексте или конкретного объекта (может обращаться к его свойствам), или класса (если метод статический).
Анончики, кто работал с яндекс облаком? Не могу разобраться с api для загрузки объекта в хранилище. Может кто помочь?
>>1515384>1Ух. Понятнее не стало. Т.е. мне нужно создать метод подсчёта цены, так? Т.е. должна быть функция подсчёта цены, к которой я буду обращаться в будущем.Алсо, создам я, например, функцию прайскалькулятор, которая будет подсчитывать цену с ндс. А после чего я её просто засуну в функцию printInfo, верно?Блин, чё-т сложно и непонятно. Блин-блинский. Вообще ниче не понимаю. Пойду дальше туториалы смотреть.
А знаете ли вы, что строка в php - это не обязательно последовательность букв? С таким же успехом строка в php может быть цепочкой произвольных байтов. И если именно с такой точки зрения рассматривать строки, то можно без всяких проблем совершать в php байтовые операции.
>>1515448Ну, общую суть ты уловил.Ни один твой клас не должен делать всё, он должен исполнять только свою конкретную работу, не больше. Представь свой код в виде конвейера, в котором каждый твой класс - это или объект, лежащий на ленте, или робот, которой чего-то там делает над объектом, лежащим на ленте.(собственно, код - это и есть конвейер, он исполняется по одной инструкции, сверху вниз, отдельными "операторами" - функциями, ну ты понял)Соответственно, твой класс Product задизайнен неверно, потому что у него откуда-то нарисовался метод printInfo(). А твой класс Product, очевидно, хранит информацию о продукте. Всё, если тебе нужно принтить продукт - создавай productPrinter либо Renderer, что-то такое.Твой код должен выглядеть условно как-то так:Роутер (принимает запросы и вызывает коллбек) -> Хендлер (получает объект запроса и вызывает нужный сценарий из бизнес-сервиса) -> Бизнес-сервис (описывает сценарии типа "добавить продукт в корзину", "оплатить заказ", вызывая специализированные сервисы по необходимости) -> Инфраструктурные сервисы (база данных, калькуляторы, счётчики, любая фигня) -> начинаем возвращаться назад -> Бизнес-сервис (всё рассчитал, сохранил, возвращает ответ) -> Хендлер (получил от бизнес-сервиса ответ, прокидывает его в сервис, отвечающий за отображение ответа) -> Отображатель (или View, выводит или возвращает какие-то данные в каком-то виде, например продукты в json или ордеры в html)
>>1515508>Соответственно, твой класс Product задизайнен неверно, потому что у него откуда-то нарисовался метод printInfo(). А твой класс Product, очевидно, хранит информацию о продукте. Всё, если тебе нужно принтить продукт - создавай productPrinter либо Renderer, что-то такое.Это весьма сомнительное умозаключение. Сделать для дебага функцию printInfo у продукта - это совсем не такая уж плохая идея. А вообще не плохо было бы сделать сразу несколько классов для продуктов:1) Продукт как модель, хранящий данные продукта и работающий с базой данных.2) Продукт как View, отображающий продукт тем или иным образом. Таких View может быть разумеется несколько.3) Контроллер для продукта, который получает запросы пользователя, выбирает нужный продукт, объединяет нужный продукт с нужной View и выдаёт ответ пользователю.
>>1515531Это у тебя сомнительное умозаключение. У него в printInfo понаписаны `<div style='border: {$this->border}; ` и прочее, это явный рендеринг уже. Да и принтится любой объект элементарным print(serialize($object)), так что специальные методы в принципе не нужны.
>>1515550Ну тогда ты прав конечно, html не место в классе продукта. >print(serialize($object))Не читабельно получится. Вместо этого нужно использовать print_r($product) или var_dump($product). А действительности лично я на практике применяю функцию print_r_die($object) и var_dump_die($obejct)Функция print_r_die() выглядит следующим образом:function print_r_die($object) {ob_clean();print_r_die($object);die();}Функция var_dump_die выглядит аналогичным образом.В итоге, если нужно отдебажить какой-то объект, я могу в любом месте кода запустить print_r_die() и посмотреть строение любого объекта или массива.
>>1515570Это в любом случае костыли. С момента создания xdebug надобность принтить объекты практически исчезла, потому что ты смотришь непосредственно на данные в памяти.
>>1515574Мне не нравится дебажить при помощи xdebug. И я как дебажил принтами, так и буду продолжать.
>>1515578Для меня это звучит, как "мне не нравится ездить на автомобиле, буду как привык, на лошадях".Дебаггеры не просто так придумали.Прочем, как только ты окажешься на достаточно сложном проекте - поймешь. Ох, как же я как-то в своё время заколебался дебажить логику процессинга заказов на одном очень крупном интернет-магазине.. 15 шагов у дерева статусов, нетривиальная логика переходов, куча условий.. Мммм, мякотка.
>>1515543Пиздос. Ваще нихуя не понятно.Мне пока элементарные вещи не ясны.Вот как пример, я создаю вторую функцию getPriceона должна выглядить так?public function getPrice(){$NDS = ($price/100*18)+$price}А что мне с ней в итоге делать? Куда её записывать/вставлять и главное как? Во первых, мне надо, чтобы она выводилась. Значит мне надо создать public $NDS. После чего её надо добавить в констракт, чтобы она существовала. И только после этого добавить её в принт инфо в виде -<p>{$this->NDS}</p>Это всё так будет работать или нет? К тому же, по скольку мы добавили её в констракт, $test = new Product(Запросит здесь NDS указать, а как я её тут укажу?.. 'getPrice()'?)
Сори, что совсем тупые вопросы задаю. Просто я без явного примера использования не могу самостоятельно допердолить, как подобное реализовывается. (Ну как не могу - мой максимум то, что я расписал выше, но это всё теоретически и скорее всего неправильно)>>1515719
>>1515719Мне в голову пришла совершенно тупая мысль: почему бы тебе не вывести логику расчёта НДС в субд?
>>1515733Друже, я делаю элементарные задания. Если ты про фигню типа sql, то я до такого ещё не дорос. Мне просто бы понять, как правильно сделать это и дальше по примеру этого работать с остальными заданиями до новых вопросов. >>1515719
>>1515719Давай начнем с того, что ты нормально вопрос сформулируешь. Что хочешь сделать и что не понятно.
>>1515747Я же всё вроде расписал.>>1515372>https://ideone.com/8Xfm05Вот тут вот оригинал кода. Хочу добавить функцию расчёта ндс, чтобы цена с ндс выводилась, но я точно не уверен, как это делается, потому что со всеми этими паблик/констрактами и прочем создалась путаница в голове и я не совсем понимаю строение кода и как его применять. Собственно, все вопросы которые у меня возникли находятся именно в этом посте >>1515719
>>1515760Ну и зачем ты пытаешься лезть в ООП, если не понимаешь как оно работает. Посмотри на ютубе видос про создание инернет магазина, блога и тд или почитай пикрелейтед.
>>1515806Большое спасибо за помощь, можешь дальше не отвечать на поставленные вопросы!Пиздец, каждый вопрос в треде - за место внятного ответа на простые вопросы говорят 'иди читай то, иди читай сё', или предлагают какую-то невъебенно-сложную залупу или же вообще отвечают не по теме, предлагая какие-то базы и прочую хуйню. Я уже прочитал несколько статей и посмотрел гайды и мне непонятны очевидные вещи, потому что я НЕ ВИДЕЛ как эти вещи решаются на пример. Поэтому я жду ответа правильно ли я понял, как это делается или же что-то нужно изменить/что-то я не понял/делается как-то иначе > >>1515719
Реально, в чём проблема написать 'ты понял правильно, делается так так и так, а в этом случае ты понял не правильно и делать надо как-то иначе'. Я сразу вспоминаю тот видос от какой-то пизданутой психиаторши, которая говорит о программистах и которую тут форсили. На фоне происходящего в треде из срачей и пиздежа не по делу кажется, что она не такая уж и пизданутая.
>>1515820>Реально, в чём проблема написать 'ты понял правильно, делается так так и так, а в этом случае ты понял не правильно и делать надо как-то иначе'.Проблема в том, что тут сидят такие же чуваки и им нахуй не впёрлось заниматься твоим образованием.Ты идиот ваще? Нанимай репетитора и будет он тебе всё расжёвывать, а у нас самообучение в ходу.
>>1515816Просто судя по твоему сообщению, у тебя на самом деле отсутствует элементарная база, в этом нет ничего плохого. Я рекомендовал тебе посмотреть видосы на ютубе как раз чтобы ты посмотрел как вся эта хуйня работает на примере. Можешь глянуть канал этого чувака что по ссылке, он неплохо рассказывает про ооп и mvc, как только вникнешь в то что он объясняет, многие вопросы сами по себе отпадут.https://www.youtube.com/watch?v=ba3M3_Myrqg&t=1s
>>1515834Так если они не понимают - нахуя они лезут? Лол.Я написал - ваше дело ответить по/ не ответить. Я точно так же тут где могу отвечаю на лёгкие вопросы, где не могу - молчу.
>>1515841>у тебя на самом деле отсутствует элементарная базаДело в том, что я уже много чего прочёл, где-то попрактиковался. Но я такой человек, что если я не понимаю что-то логически, тогда надо просто посмотреть чужой пример. Да и как видишь я выше вроде как расписал план действий исходя из логики, но скорее всего оно не будет работать, потому что я что-то упустил. Просто я привык копировать и запоминать, после чего применять. А многие вещи в гайдах не упоминаются из-за этого приходиться каждый раз изобретать велосипед. Как ты и сказал, у меня даже не с ООП проблема, а скорее с базой и построением кода при применение ООП. Просмотрю уже завтра на свежую голову. Может быть найду ответы, спасибо.
>>1515842Тебе правильно намекнули - ты в теории плаваешь. Без теории ты проста очередная макака за клавиатурой.Если не делал задачи из ОПпоста, то не лезь ваще никуда пока.
>>1515846>у меня даже не с ООП проблема, а скорее с базой и построением кода при применение ООПВ твоих сорцах не только с ООП проблема. Ты даже данные неправильно выводишь - через эхо никто не выводит разметку уже лет 15 как. За это по яйцам бьют в хороших коллективах.У тебя именно базы нет.
>>1515876ПХП сделан для того, чтобы безболезненно впиливаться в вёрстку, а у тебя наоборот - вёрстка болезненно всунута в ПХП.Просто чтобы посмотреть данные, то можно выводить через var_dump. Особенно православно получается, если ещё и xdebug накатить.
>>1515880>Так если я не хочу вардампитьДа не хоти. Только потом не надо обижаться, если тебя макакой кличут и книжки советуют.
>>1515882Ну с учётом того, что вар дамп был использован, почему бы не перестать его использовать и вписать эко?..
>>1515889Речь не об echo, а о вёрстке в коде. Перемешивать логику и представление, а потом говорить, что не понимаешь ООП это, как бы, несколько неправда.
>>1515816Тебе никто ничего не должен. Учить тебя никто не нанимался. Если что то не получается - ты ОБЯЗАН, как минимум, нормально сформулировать свой вопрос:"Ребята, помогите. Нужно сделать это вот. Я не понимаю вот тут, пробовал так и сяк, гуглил такое и сякое."А когда человек заходит и пару постов ноет что у него что то не выходит, при этом считая что ему все должны быстро кинуться и помочь - это свинство. Не понимаешь ООП? У ОП-а есть хорошая теория и пару задач практических. Понимаешь теорию, но нужна практика? Загугли бля, есть куча практических примеров, реализаций всего и вся. Или ты хочешь чтобы в треде тебе в 1000 раз что то расписывали? Скинули ссылку на видос по MVC - посмотри же его, а не ной что кто то хуевый не ответил на твой вопрос
>>1515946>Тебе никто ничего не должен. Где я написал, что мне кто-то должен? Это вы тут некоторые делаете вид, что чё-т полезное пишите, на деле же из 5 человек только 1 чё-т дельное скажет. >А когда человек заходит и пару постов ноет>ноетОдин пост спросил, дальше вы сами говно развезли. И ты кста продолжаешь это делать.>Скинули ссылку на видос по MVC - посмотри же его, а не ной что кто то хуевый не ответил на твой вопросА где я, долбоёб, ною? Я сказал человеку спасибо и сказал, что посмотрю.Иди короче хуй соси, дебил. Вот о таких анонах-проггерах я ранее и писал. Попробуй ещё раз доебаться до меня, я тебя опущу за каждый пункт как это сейчас сделал.
>>1515947Да мне вообще до пизды. Можешь дальше в глаза долбиться и думать что прав. Я тебе написал как это выглядит со стороны. Опустил он меня, лол. Откуда вы такие лезете отпускатели
>>1515384>если у тебя есть user, то это просто объект для хранения данных о пользователя, и всё, кроме геттеров и сеттеров там ничего держать не нужно.проиграл с этого эксперта по ООП.
>>1515979Ну давай, поясни мне за active record. Заранее знаешь, что я тебе отвечу. Возможно даже Фаулера процитирую, чтобы совсем наверняка.
>>1516096Да зачем же сразу актив рекорд? Хотя бы какие-то преобразования на приватными данными делать - уже методы нужны. Тот же жснонабле интерфейс например.
>>1516156Во-первых, ты неправильно понимаешь концепцию приватных полей. На то эти поля и приватные, что они требуются исключительно для работоспособности данного класса и не должны торчать наружу.Во-вторых, JsonSerializable - это костыль, потому что у объекта может быть много разных представлений в формате json. Самый простой пример - динамический набор полей, какие поля в get-е задал, такие и хочешь получить (есть такая практика в rest api). Или, к примеру, проверки доступа - такое бывает, что некоторые поля можно возвращать не всегда, например, есть разница, в показе json-представления объекта пользователю (вернув его из апи) или послать этот объект в другой сервис (сервис аналитики, к примеру). Если ты всю эту логику будешь писать в юзере, у тебя получится божественный класс с кучей ответственностей.Поэтому не путай тёплое с мягким, User - это такой DTO, отвечает за передачу объекта пользователя между компонентами твоей системы, ни для чего более. Для сохранения его в базе тебе нужен будет UserRepository, для представления его в json тебе нужен будет отдельный JsonEncoder или даже UserJsonEncoder (смотри компоненты симфони, которые сериалайзеры, они совсем не зря сделали их именно так или иначе).
Аноны, у меня какая то очень странная дичь с моим приложением на slim 3.9.Вдруг в один момент у меня перестали работать редиректы:return $response->withRedirect('/', 301);Не работают и все тут.Посмотрел раннюю версию - там все работает. Начал сравнивать - вроде все одно и тоже. Начал дикую еблю с обменом файлов, рокировкой каталогов. И выяснил вот что.Структура index.php таковы, что зависимости находятся в другом файле и подгружаются в index.php.Типа такое - require_once $_SERVER['DOCUMENT_ROOT'] . "/dependences/dependences.php";Методом перебора я выяснил что если который в файле зависимости подкинут в файл глючной версии - то все работает. Херня только в том, что код и там и там одинаковый.Более того, если код из глючного файла поместить прямо в index.php - а сам файл заккоментировать - то все будет работать нормально.А если создать еще один файл подгрузки зависимости и в него поместить глючный код - то работать редирект не будет. Но если же в этом новом файле удалить глючный код, и записать идентичный код из старой рабочей версии приложения - то работать будет.Я если честно слегка фрустрирую от этих дел. Мож кто то встречался с таким?
>>1516178>>Методом перебора я выяснил что если который в файле зависимости подкинут в файл глючной версии - то все работает. Херня только в том, что код и там и там одинаковый.Методом перебора я выяснил что если в файл зависимости подкинуть код из нормальной рабочей версии - то все работает. Херня только в том, что код и там и там одинаковый.самофикс
>>1515372 > Есть price и weight. Если я хочу с ними работать, например с учётом ндс цену вывести, то в каком виде и где я должен рассчитывать ндс? Без разницы куда вставить расчёт ндс? Внутри product?Если расчет совсем простой, то можно поместить в отдельный метод в классе. Но если там всякие тонкости, то имеет смысл делать это в отдельном классе-сервисе для расчета налогов.> 2. функции - являются методами, верно?Метод это что-то вроде функции, которая работает с данными объекта.> 3. Если я хочу создать отдельный метод, в котором будет выводиться только цена и ндс, то надо просто создать второй метод с нужными данными, после чего вызвать его? Вообще, вывод данных обычно делается в шаблоне. То есть класс Product хранит информацию о товаре и предоставляет ее, а вывод карточки товара делается шаблоном такого вида: <div class="product-price"><?= ViewHelper::formatPrice($product->getPrice()) ?></div><div class="product-weight">Вес: <?= $product->getWeight() ?> гр.</div>Урок про шаблоны: https://github.com/codedokode/pasta/blob/master/php/templates.mdСоответственно, метод printInfo() тоже имеет смысл убрать. Впрочем, если ты с его помощью что-то дампишь для отладки, то можно оставить, хотя дампить товар через var_dump($product), наверно, было бы удобнее.> Нужно ли мне ещё один констракт создавать для этого, потому что при создании new Product у меня будут значение кроме ндс и цены, такие как вес, название и пр.?Ты не можешь сделать два конструктора. Можно, впрочем, сделать статический метод для создания объекта.
>>1515384 > обменивается сообщениями Лично мне не нравится, когда вызов метода называют "сообщением", так как никаким сообщением он не является. Соответственно, зачем называть одно другим - непонятно. В моем понимании сообщения ассоциируются с очередями сообщений, многопоточностью и подобными вещами.>>1515979>>1515863Такие посты тут не нужны. Они не содержат никакой полезной информации и только отталкивают посетителей. >>1515820 Людям, которые тут устраивают флейм, и правда, стоит задуматься, что заставляет их это делать. >>1515834Не вперлось - так пройдите мимо, зачем флейм устраивать? Вопросы заданы вполне нормальные и на них можно спокойно ответить. Все ли в порядке с человеком, который в ответ на нормально заданный вопрос агрессивно реагирует?
>>1515719У нас в ОП-посте есть учебник, в нем есть глава про ООП, я бы советовал ее почитать и решить задачи оттуда. Или любой другой подходящий учебник. Там рассказано и про поля, и про методы. Объект содержит поля, где хранится информация, и методы для работы с ними. Для того, чтобы рассчитать НДС, достаточно добавить один метод, который посчитает и вернет значение, не требуется добавлять новые поля.Твой код сделан неправильно, так как в нем нету return, и поле NDS не требуется.Вместо "констракт" правильно писать "конструктор". >>1515215Нет. Но слишком большая вложенность (более 3-4-5 отступов) это плохо.>>1515134> Разобраться с тем, как создать объект на основании информации их $_POST['prof'].Просто: if ($prof == 'x') {$object = new ClassX(...);} elseif ($prof == 'y') {$object = new ClassY(...);} else {// ошибка}Идея описывать профессии в виде классов может быть немного неудобной, так как тебе скорее всего надо как-то еще описывать подписи к полям (вроде "зарплата") и тип полей (например, год рождения - число от 1901 до 2010, пол - это выбор из 2 вариантов итд). Для этого придется либо добавлять аннотации к полям ( https://elisdn.ru/blog/80/some-reasons-to-learn-phpdoc ), либо делать в классе метод для получения такой информации.Описывать форму может быть удобно, представив каждое поле в ней объектом определенного класса:$manager = new Profession();$manager->addField(new IntField('Опыт работы, лет', 0, 50));$manager->addField(new StringField('Личные качества'));...При желании можно сделать класс Manager extends Profession, в котором в конструкторе добавляются нужные поля.Возможно, также имеет смысл вместо изобретения велосипеда использовать что-то готовое вроде Symfony Forms.> Но мне она особо не помогает, так как я концепцию как таковую не оч понимаю. Концепция в том, что состав полей формы описан списком полей в классе. Также, мне кажется, что аякс тут вообще не требуется. Можно просто заранее получить список полей во всех профессиях, встроить его в страницу в виде JSON объекта и обращаться к нему вместо отправки запросов:var fields = {manager: ['age', 'experince', 'salary', ...],engineer: [....],...};Более того, можно на стороне сервера в шаблоне сгенерировать формы для всех профессий и переключать их (скрывать/показывать) при смене типа профессии: <select name="profession">...</select><div class="form-for-manager state-hidden"> форма для менеджера </div><div class="form-for-engineer state-hidden"> форма для инженера </div>Это будет проще всего, хотя наверно и не соответствует формулировке задания.Еще одна идея - помечать блоки в HTML-разметке специальными атрибутами и на их основании скрывать/показывать блоки при смене профессии: <div data-professions="manager, engineer"><label>Опыт работы: <input ...></label></div>
>>1516293> Лично мне не нравится, когда вызов метода называют "сообщением", так как никаким сообщением он не является. Соответственно, зачем называть одно другим - непонятно. В моем понимании сообщения ассоциируются с очередями сообщений, многопоточностью и подобными вещами.Про обмен сообщениями - это в первую очередь был референс в сторону классического определения ООП, каким оно задумывалось изначально, пока не превратилось в карго-культ трёх главных слов.Ну и да, обмен сообщениями - это всё ещё хорошая абстракция, потому что она превращает какие-то классы и функции в логическую структуру программы, где есть сервисы и они вызывают друг-друга. Сообщением тут является метод + аргументы. По моему опыту, когда человек усваивает эту аналогию, его код тут же становится чище, ему становится легче разделять ответственности и не лепить всё в одно место.
Кто-нибудь разбирается в сокетах?Взял сокетный чат https://kode-blog.io/websocket-server-phpУстановил его на хостинг - всё ок, отлично работает. С хрома. А файерфокс не хочет коннектиться к серверу, говорит, несекьюрно.>The app itself is under SSL but the websocket being accessed is not. Chrome and Opera don't care but Firefox does.According to: https://bugzilla.mozilla.org/show_bug.cgi?id=303952This is known and is not considered a bug. Mozilla's response: wontfixОк, нашёл решение (использовать на сервере прокси, первый ответ тут: https://stackoverflow.com/questions/16979793/php-ratchet-websocket-ssl-connect )Установил оба модуля в апач модули: sudo a2enmod proxysudo a2enmod proxy_wstunnelsudo a2enmod proxy_httpДобавил в apache2.conf строки:ProxyPass /wss2 ws://xxxxxxxxxxx.xxx:999ProxyPassReverse /wss2 ws://xxxxxxxxxxx.xxx:999А в js-скрипт вызова сервера:websocket = new WebSocket('wss://xxxxxxxxxxx.xxx/wss2/');999 порт специально открыт.И снова хром работает, а файерфокс нет. Пикрелейтед. Маму его ебал, что этой собаке не нравится? Уже два дня ебусь.Сервер:Ubuntu-18.04-amd64Apache/2.4.29PHP 7.2.24
>>1516168Нафига ты тогда песню про геттеры-сеттеры завёл,если у тебя все поля публичные?Алсо, актив рекорд вполне рабочий паттерн, что бы не говорили такие пафосные снобы вроде тебя.
>>1516431Ващет это он создаёт эти треды и во многом благодаря ему они все ещё держаться. Если это ОП конечно.
>>1515841Это нормально, что я понимаю, что делает человек с видео, но вернувшись к коду через час забываю, как это работает и зачем это вообще нужно?
>>1516450>благодаря ему они все ещё держатьсяДругие треды без всяких ОПов держатся. Если ОП что-то делает, то это никак не даёт ему право указывать остальным как себя вести - это уже свинство. Да и не касается его это никак и не должно касаться.Алсо, не надо из двача доброчан лепить - гарантированно будешь послан.
>>1516424Актив рекорд рабочий в простых случаях, когда нужно на коленке mvp сварганить. А в сложных системах смешение отвественностей ни к чему хорошему не приводит. И с этим спорить тоже бесполезно, все тонкости сравнения active record vs data mapper уже по сто раз обсосаны и куча статей на эту тему написана.Не понимаю, как вас самих не корёжит видеть в одном классе методы из разных предметных областейА геттеры-сеттеры нужны в сложных случаях, когда у тебя внутри объекта что-то нетривиальное хранится. Например, объект времени, там могут лежать таймстамп, таймзона и микросекунда, всё такое. В простых случаях для DTO сойдут и публичные свойства.
>>1516452Да. У всех так (кроме совсем умников, которых очень мало). Понять мало, нужно еще что то сделать самому по мотивам, что бы закрепить. Желательно в этот же день. И желательно, поменьше заглядывать в исходное видео.Такие вещи объясняет "Learning How to Learn" by Barbara Oakley.
Скиньте какую-то простую реализацию Active Record. В гугле ничего внятного не нашёл - какой-то говнокод из 13 года разве только. Компоненты фреймворков мне ещё рано ковырять - жидко обосрусь в процессе.Суть в том, что в общих чертах я понимаю, что в родительскую абстрактную модель пихается круд, с привязкой к свойствам дочернего класса, но как-то с реализацией не получается совсем.
>>1516494Разбей все на небольшие задачи. Начни с простого. Сделай класс с двумя полями - одно строковое для имени таблицы, второе для словаря ['Имя поля' => 'значение']. И одним методом save() по вызову которого значения из словаря будут записываться в таблицу. Потом добавь возможность загружать в этот класс данные из таблицы - сначала просто по айди (если сможешь то можно и сразу по более сложным запросам). Проще всего наверное будет сделать через фабричный метод, хотя обычно наворачивают какие-то конструкторы запросов. Теперь надо добавить возможность отличать новые классы от загруженых из базы (для новых класов при сохранении вызывается инсерт, для старых апдейт). После этого обмазываешся магией __get/__set и скрываешь реализацию (словарь с значениями полей). В общем у тебя есть примитивный AR класс. Дальше уже добавляешь что нужно. Возможно стоит подумать в сторону синглтона - чтобы когда ты создаешь несколько объектов которые соответсвуют одной и той же записи в таблице то чтобы при изменении одного объекта сразу апдейтился второй (без записи в таблицу и обязательно при записи). Это не обязательно синглтоном наворачивать - как минимум есть вариант с наблюдением/ивентами. Также очень полезно будет помечать поля которые были изменены (и сохранять старые значения) - но это уже когда будешь добавлять события жизненного цикла, типа beforeSave, afterSave и т.д.
CodeIgniter это пиздец и суицид карьерный? Он-то конечно "mvc", но код вместо того чтобы быть похожим на жабу как Симфони становится все какой-то лапшой уровня самописных фреймворков из туториалов с медиума, еще и ООП какое-то убогое
>>1516586>Теперь надо добавить возможность отличать новые классы от загруженых из базыЭто, как ни странно, я уже продумал - по наличию айдишника. Если он пустой - вставляем, если там что-то есть, то апдейт.
>>1516596Это пиздец, очевидно же. Кроме symfony, laravel и микрофреймворков (если ты шаришь) в мире php лучше ничего не трогать.
>>1516838Ты забыл знак вопроса.И да, погугли выше и предыдущий тред, эта тема обсуждается здесь раз в неделю точно. Вкратце: php не особенно для этого предназначен, лучше даже не пробуй и используй какие-нибудь прокси для этого.
>>1516494https://www.yiiframework.com/doc/api/2.0/yii-db-activerecordhttps://github.com/yiisoft/yii2/blob/master/framework/db/ActiveRecord.phpМожно еще конечно посмотреть модель из Eloquent, но она пиздец какая сложная.
>>1516838У меня на проде работает Centrifugo. Отличное и простое решение без всяких пхпшных демонов. Есть хорошая и поддерживаемая либа https://github.com/centrifugal/phpcent для работы с ним.
>>1516882Ну ты же понимаешь, что "суть" - это класс с набором полей и методами save() и load() - и пишется за 5 минут?
>>1516882Суть можно посмотреть в документации фреймворков.В Yii довольно лакончиные исходники, поэтому там разобраться весьма легко.
>>1516976Так да, но обычно за тебя выбирает рынок, на Симфони нужны одни мидлы да сеньоры в крупные компании, а вкатывальщик еще повезет если yii будет ковырять, с высокой вероятностью онлайн магазин запчастей на битриксе будет творить
>>1516976Почему кал? Полгода где-то сижу джуном в конторе, которая свой продукт пилит. Фичи пилить достаточно просто, документация неплохая, в целом работать с ним приятно. Откуда такой хейт?
>>1516786slim подходит под твое условие?Мне нравится на нем писать и ебаться с библиотеками.Ща делаю небольшой заказ на нем.
>>1516846>>да не ссы,там все НАТИВНО))Речь шла про принципиальную поддержку. А так для реального приложения на сокетах node повеселее будет
>>1516982На Laravel скорее всего набирают джунов. Он похуже симфони, но зато дико популярен и уж точно лучше yii. Ну и даже на симфони полюбому можно найти что-то, если захотеть.>>1516995Потому что действительно очень плохая архитектура. Плохая в смысле некачественная, порождающая хрупкие решения с высокой связностью. Плюс, многие решения уже устарели.Не спорю, писать на ней можно, но вообще говоря, писать возможно на всём, что угодно.Прочитай статьи на том же хабре на тему сравнения yii с другими фреймворками и всего такого.Ну и да, беги оттуда. Yii к счастью по-тихому умирает и всё меньше продуктов делается на ней. У нас в СНГ оно почему-то ещё популярно, а вот за рубежом (а значит, и за бОльшие деньги) ты его уже не найдёшь.>>1517011В целом норм, но если ты джун, лучше поищи себе контору, где сможешь научиться правильным вещам у сильных ребят, это сильно ускорит твоё развитие.
Сейчас пробую разобраться с паттерном MVC.Сделал простую гостевую книгу (Ввод имени, отзыва, сохранение и вывод данных из файла).https://github.com/RamPG/guestbookOOP/tree/masterВ плане работоспособности кода не смог разобраться с ошибкой: когда файл пуст, он выбивает Undefined offset, пробовал empty и isset, но безуспешно.В плане архитектуры вижу только одну корявость - это класс View, я просто разорвал класс и запихал туда HTML документ. Как можно сделать лучше? Создать отдельный файл page . php и вызывать его через include?Не обращайте внимания, что все в одном файле, с этим чуть позже разберусь.
>>1517056>Yii к счастью по-тихому умирает и всё меньше продуктов делается на нейнастолько умирает что скоро yii3 скоро должна полноценно выйти (:
>>1517262Я видел ченджлоги, они не впечатляют. Вместо нормальной архитектуры и компонентов symfony они обновили мажорную версию и перелезли на PSR-овские интерфейсы. Ну так себе. Выглядит словно, что чуваки просто насилуют труп. Очень надеюсь, что его как можно быстрее закопают и оно перестанет отравлять людям жизнь.Ну и да, для меня вообще неочевидно, что именно из yii нужно спасать? Коряво реализованную систему внедрения зависимостей, наполовину состоящую из статических вызовов? Консольную тулзовину на скриптиках? Магически унылый active record с костыльной событийностью? Уёбищную систему плагинов? Напрочь стандартную MVC архитектуру хотя нет, с хуёвым роутингом? Дешёвую кодо-генерацию, которая генерирует ненужные вещи, которые пишутся за 5 минут? Гайды и рецепты на уровне 2010?Yii и ему подобное говно умерло в тот момент, когда люди узнали о компонентах симфони, стоит это признать. Сейчас если ты хочешь написать mvc, ты берёшь любой роутер, пишешь код контроллеров, модель и сцепляешь это всё через любой контейнер, с любой ORM. В итоге, ты получаешь то же самое, но более качественное и не обременённое внешними зависимостями, делающее только то, что нужно. Под любую задачу есть симфони-компонент или библиотека, просто делаешь composer require и пишешь нужный тебе код. Yii остался где-то в прошлом, когда каждый писал свой умеющий всё комбайн. Ну и имхо, для тех, кто до сих пор не научился разрабатывать системы сложнее, чем mvp и просто копипастит код из примеров и stack overflow. Джуниоров и вечных джуниоров, одним словом.
>>1517241Твои view файлы для каждой страницы должны храниться в разных файлах. Отдельно должен лежать layout, в котором они будут рендериться. Сделал примеры как это можно организовать максимально просто.https://www.codepile.net/pile/X5JXblNdhttps://www.codepile.net/pile/wW8mEXLN
>>1517241View, грубо говоря, это твоя html страничка которую ты пихаешь в content-body твоего сервер-ответа.
>>1518023Анон выше кинул примерно как они рендерятся. Я когда список студентов делал - просто нужный для контроллера html файл подключал. Но я сам еще не особо в этом разбираюсь.
Надумал вкатиться в веб. Начал с изучения HTML, потом думаю разобраться с CSS и начать наконец учить какой-нибудь язык программирования, возможно PHP или Python, пушто хотелось бы идти в направление к back-end'у. Можете что-нибудь посоветовать? А в идеале мне бы товарища, который хочет идти в этом направлении со мной. Вместе будет проще же.
>>1518168>Поцчему?Чем тебе такой же вкатывальщик поможет? Всё скатится к обоюдным смехуёчкам и мемесам в телеграмме.Осваивать всё равно каждому по одиночке придётся.
>>1518181Ну в идеале они могут друг с другом новой инфой делиться. Закрепляя эту инфу для себя, и подталкивая товарища к чему то новому. Но это, конечно же, в идеале.
>>1518191>на второй вопрос>как в таком случае облегчить обучение и не сдуться?Никак. Оставайтесь в жопе.
>>1518191>Справедливо, но на второй вопрос ответа не поступилоБля, бро. Все зависит от того в какой ты ситуации находишься и кто по жизни. У тебя же своя голова на плечах есть? Есть. Вот она тебе и нужна чтобы самому себе на такие вопросы отвечать "а как мне будет лучше". Мы то откуда знаем
>>1518186>они могут друг с другом новой инфой делитьсяТо же самое можно делать и на тематических форумах, типа как в этом треде аноны отвечают.>подталкивая товарищаЭто психологическая уловка - дескать вдвоём уж мы-то не сдуемся никак. На самом деле вам обоим будет одинаково влом этим занимать.Просто очередная попытка переложить ответственность на плечи товарища.
>>1518199По жизни я е6аный лентяй и хикка со стажем. Дважды пытался вкатываться в программирование, но не вышло. Сейчас я изменил пару переменных, но нет никаких гарантий, что снова не обосрусь. Поэтому я и надеюсь на какую-то поддержку, потому что сам не могу справиться.
>>1518201У меня друг в вузике на it инженера учится, у них с этим все ок. Есть компания ребят которая делает что по кайфу. Разные технологии щупают, пытаются что то делать. Конечно это все на уровне "и там и сям", но им вроде как интересно. Так что если люди реально хотят - то почему бы и нет, это будет точно в плюс.
>>1518210Над ними в вузике стоят и теребят, а над вами никого не будет. Ну и они во вкус уже вошли, а тебе ещё только предстоит это всё.
>>1518209За какое время планируешь вкатиться, что с работой в твоем регионе. Мыслить нужно отсюда начинать. В ОП-посте есть нормальный гайд по вкату, когда сделаешь файло-обменник спокойно можешь искать галеру . Я, учась в вузе почти на 3 курсе, начал с него. Мне понравилось как он написан, ведь в вузе у меня учат полнейшией хуйне (аля ООП с первой ссылки в гугле на листочке). Вот, спустя 3 месяца в своей залупе нашел работу, осталось мелкие детали обсудить. Но я и до вуза уже в минимальное программирование умел. Только от тебя зависит сколько времени уйдет. Но желательно сильно не перенапрягаться ибо можно кукухой поехать.>>1518213Нет, они по собственной инициативе этим занимаются. Тот же web им не говорят пилить. Но для себя, пощупать, они не против. Да и технологии разные обсуждают часто - вариться в тусовочке очень даже полезно. Если там не отбитые аутисты сидят, конечно
>>1518221>Но для себя, пощупать, они не против.Так это нормально - я вот тоже щупаю всякое из любопытства. Я ж говорю - они в теме и на волне уже, тут главное не забрасывать и продолжать. Тебе до этого пилить и пилить ещё.>вариться в тусовочке очень даже полезноЯ как-то ходил в конфочу местных и нихуя хорошего там не увидел. 95% пиздежа по левой теме и только 5% по делу.Если в правилах конфы нет чётких требований общения, то всё скатится к мемам и смехуёчкам. По опыту уже знаю.А все те, где указаны эти требования ничем не лучше этого треда\любого тематического форума.
>>1518221>В ОП-посте есть нормальный гайд по вкату, когда сделаешь файло-обменник спокойно можешь искать галерунипонел. Но спасибо.>Но желательно сильно не перенапрягаться ибо можно кукухой поехатьДа, у меня с распределением ресурсов не очень ^^"
>>1518209Мертворожденная идея потому что для эой цели>>поэтому я и надеюсь на какую-то поддержку, потому что сам не могу справиться.ты не найдешь себе нужного партнера. Тебе нужен чувак с волей, который превозмагает. Но такому чуваку не нужен баластный инвалид, который пока еще нихуя не знает, так еще и с психологическими проблемами. Для такого ты ненужный балласт.Ты можешь найти себе подобного тебе партнера - но как выше справиделиво заметили, вы оба будете одинаковы, и будете опыляться друг от друга постоянно, и заниматься хуитой. Так что толку не будет.Увы, тебе придется в первую очередь самому привозмочь свои психологические проблемы
Аноны помогите! Нужен шаблон маленького интернет-магазина с динамическим каталогом товаров и чтоб можно было прикрутить саму продажу и прием оплаты а можно и без этого. С меня куча нефти за помощь. Нужно в учебных целях.
>>1518209>По жизни я е6аный лентяй и хикка со стажемУ тебя просто нет мотивации и тебе норм. Я так последние полгода тоже ебловал типа некуда спешить, иногда настроение было такое что не вставал целый день с кровати, месяц назад последние бабки кончились что уже жрать не мог купить ну и за неделю вкатился на работку, мозг все загоны и внутренние проблемы просто офнул и начал действоватб.>>1518490$i = 5;++$i + ++$i = ? >>1518505Из готовых решений есть вордпресс и опенкарт, но это говно говна. В учебных целях почему бы не попробовать написать свой магазин? Можно смоделировать систему на ооп без веба вообще. Потом эту модель доктриной замапить и сразу прокачаться в нескольких направлениях.
>>1518528>вордпресс>говно говнаКак-то пробовал его. Темки васянские хорошо накатывать и удобно, но вот разработка на нём - пробитое днище. Архитектура отсутствует и вместо неё одни костыли. Весь вордпресс это один большой костыль над простецкой системой для блога. Уже тогда стало понятно, что такие вещи изучать не стоит - костыли индивидуальны для каждого проекта и в другом они не пригодятся.А ведь там ещё и плагины накатывают, которые друг от друга зависят. Ояебу какой кошмар.Как эта адская хуетень ещё не подохла я удивляюсь.
>>1518540> Как эта адская хуетень ещё не подохла я удивляюсь.Есть целый класс говнокодеров, которые только на нём и работают. Своя экосистем получается. Одни хотят заплатить поменьше и получить побольше, а другие хотят говнокодить за гроши и не париться.
>>1518567Это еще и во всем мире, в Пиндосии и Германии каких-нибудь на пхп девелоперов и энтвиклеров как раз часто требуют вордпресс/друпал, прямо как у нас любят написать в требованиях жс жквери вьюжс вордпресс джумла модх пхп ларавел йии симфони опыт 5-10 лет 35к
>>1518613Да, вот ты правильно написал, херка напишет латиницей, еще лучше "Bitrix Framework, уверенное знание Bitrix API".Вот кстати одна из типичных пиндосских индусовакансий с вполне такой зп дажеhttps://job-openings.monster.com/magento-developer-php-milwaukee-wi-us-tekpartners-solutions-llc/213582793
>>1518608Друпал тащемта сделан хотя бы наиболее качественно, да и на симфони компоненты переехал. Хотя вся ирония в том, что именно его хорошее качество и прочая архитектура ему и мешает, cms-говношлёпы ссутся использовать что-то сложнее скриптиков в стиле php4, а хорошие разработчики в любом случае не хотят на cms что-то делать.
Сап дващь. Делал кто-то на прод счетчик просмотров страницы? Я вот думаю как реализовать лучше и пока что есть несколько вариантов но не знаю какой лучше.Для защиты от накрутки думал идентифицировать запрос по фингерпринту и не давать чаще чем в 5 минут например обновлять счетчик.Сам счетчик можно много как реализовать, начиная от колонки в таблице view_counter и заканчивая отдельной таблой PageViews со всей инфой и считать из неё. Была еще упоротая мысль кроном каждые 30 мин из гугл аналитики выгружать просмотры по страницам и обновлять в бд данные.
>>1518631>хорошие разработчики в любом случае не хотят на cms что-то делатьТак с нынешними либами за пару часов можно самому небольшую cms за вечер накидать. И при этом нет никаких ограничений от производителя - руки развязаны.
>>1518651Да, не раз видел и участвовал.>>1518674В этом и смысл cms'ок, что ты поставил, накликал что-то и оно работает - и не надо платить разработчикам, архитекторам и так далее. Для малого и среднего безнеса - то, что нужно.
>>1518645А для какой цели?Можешь логи нгинкса парсить демоном на фоне.Можешь свой счетчик в sql поставить, но если приложение окажется нагруженным, то ето узким местом может оказаться из-за локов при записи.Можно в очередь кидать записи и оттуда уже разгребать демоном.
Как в пыхе дергать данные с радиобаттонов, то есть какой именно нажат? На каждом радио есть атрибут с уникальным value, это как я понял будет получать пыха.
>>1518733Сам браузер решает какой именно нажат (группировка по атрибуту name) и в запросе устанавливает соответстdующие name=value
>>1518693>накликал что-то>и не надо платить разработчикам, архитекторам и так далееКак накликал - так и работает. А потом ходят и жалуются, что у них скорость сайта никакая, сео чёто тоже не ахти, плагины есть, но всё не то, что нужно конкретно им.Тысячи их.>Для малого и среднего безнесаМаксимум для лендосов салона "Валентина". Что-то серьёзное и со структурой ты на cms не поднимешь, а порой в этом вся соль.
>>1518747Несколько радиобаттонов с одинаковым именем образуют группу<input type="radio" name="a" value="1"><input type="radio" name="a" value="1"><input type="radio" name="a" value="1">Когда пользователь кликает по какому-то из радиобаттонов с одинаковым name, браузер следит за тем, чтобы выделение с остальных снялось. Когда пользователь отправляет форму, в форме по ключу name будет стоять значение кликнутого радиобаттона.
>>1518748Да нифига, какой-нибудь простенький сайт с контентом, интернет-магазин, формочку там для обратной связи, туда-сюда.. Там нагрузок не было и не будет, удобство может быть и не очень удобным и всё такое. Какой-нибудь, к примеру, сайт для заказа цветочных букетов. Маленькая витрина с фотками и наборными компонентами, форма заказа и админка для выкладывания контента и управления заказами/статусами заказов.
>>1518747>>1518752value в примере не поменялНу то есть ты в php просто получаешь $_GET['a'] и тебе выводится тот, который чекнул пользовватель.
>>1517387Пиздец манямир, из разряда пэхэпэ мертвый язык, скоро всех програмистов заменят нейросети !!!!!!!!!!!!!!1
Подскажите что за хуйня: Есть переменная $conn в файле connection.php в ней хранится подключение к бд. Есть два стула файла: index.php - в нем вся мишура, и main.php - там у меня функции. Так вот, эта переменная видится в index.php, но не видится в main.php. Чому так? Причем оба подключаю методом include, и все они находятся в одной папке.
Сап аноны, у меня вопрос. Знач на винде пользовался homestead, но шинда изрядно надоела, да и для моего некропк запускать виртуалку на вин 10, это гиблое дело. Поэтому вопрос, есть ли какие то альтернативы для линукс?Не очень бы хотелось поднимать виртуалку, может есть какие то альтернативы?
>>1518858>Laravel Homestead>Included Software Ubuntu 18.04Ты просто хомячок. Какая тебе альтернатива. Свой хуюмстед ты же не осилишь запускать из чрута
Бля ребят я уже просто заебался, не могу ввести в бд текущую дату! Мне надо именно в datetime(не timestamp) а он тупо нули записывает, как я только не пытался. Проштудировал кучу сайтов\статей. Поменял все, и тег в input , и форматы, и прогонял через функции превращения в стринг и тп. Не знаю что делать, надо тупо ввести эту дату в бд!
А до этого id на name поменя(да был косяк) но когда исправил, все равно не работало. Еще mysqli_real_escape_string снял. Тогда сработало. Пиздец
>>1519073>Мне надо именно в datetime(не timestamp)А что так? Таймштамп потом в датетайм перегнать - как 2 пальца, насколько я помню.
>>1519073Напишу снова: всё что может делать сама СУБД, пусть делает сама БД, например высчитывает timestapm через NOW().
>>1519073Кстати совет. Юзай сокращённый открывающий тэг только для краткого эко. <?= "Привет"?> В остальных случаях всегда <?php Стандарты все дела
>>1511146 (OP)Ребят, пролистал/pr как я понял вы тут самые добрые (аниме), поэтому обращусь с вопросом к вам - я работаю юристом, но мне это надоело, постоянный негатив от клиентов, все они проблемные, душные и я думаю вкатится в програмириование/кодинг. С перспективами потом перебраться в Москву, начать зарабатывать в идеале 100к примерно. Какой язык учить, с чего начать?
>>1519305>Какой язык учить, с чего начать? Смотря к чему у тебя душа лежит. Если пофиг и просто ищешь место поспокойнее и потеплее, то учи JS, на фронтендеров нынче спрос большой.
>>1519305php норм, но готовься, что для нахождения любой нормальной работы нужно въебать кучу времени и сил в обучение. Минимум 2-3 года только для того, чтобы перестроилось мышление и можно было хоть как-то называться разработчиком, а не кодомакакой.И это не снобизм, просто область реально огромная и нужно, знать, понимать, как устроены и уметь использовать туеву хучу инструментов, протоколов, приёмов и всё такое. Ну и зависит от того, что считать разработчиком, cms-формошлёпы же тоже что-то там делают.
>>1519305Хм. Ну для начала стоит отметить, что программирование делится на кучу сфер, от науки, то секьюрити.Из самых популярных: Web, мобильная разработка( деление на андроид\айос) , десктоп (опять же apple\windows). Игры опять же разные платформы.. консоли.Для начала выбери направление. В ом же вебе есть разные стаки.. например php/js/html (бэк) + frameworks. Или Js/ Css/ html + frm(фронт). Или Python/js... (бэк)А когда выберешь. Можно выбрать язык..Если просто хочешь денег то выбери самое востребованное - web or mobile.. А там тоже есть свои самые полпулярные языки+фреймы
>>1519317>>1519318>>1519320Спасибо большое, часть из этого не понятно, в плане того что выбрать, но web звучит как то проще и понятнее.
>>1519442> web звучит как то проще и понятнее.В целом , так оно и есть. Но щас опять же наплодили кучу технологий.. поэтому учить надо пару языков и сверху пару фреймворков. К примеру, стажор бэкендер должен знать на базовом уровне: Php/Js/Html/ ООП ,MVC, Larqvel/Yii.
>>1519318Я бы врачем стал, но я уже старый и ойти. Работал в больнице, в стационаре каждый второй на лехухе или бнв катает. Им люди сами за профессионализм несут.И статус - если ты хороший уролог/гинеколог ты в друзьях у топ своего мухосранска будешь находиться всегда. Конечно нужно не всратым терапевтом калымить, а идти на оперирующие специальности. Но там и ответственность, мама не горюй. И почет, и пиздец уважение. Представь как горд врач, когда с того света вытаскивает кого то?Пока ты очередному комерсу магазин пилишь.
>>1519558>Пока ты очередному комерсу магазин пилишь.Двигаем человечество в будущее, пока очередной гордый врач стотысячного алкаша с того света тащит.А как же.
>>1519589Толсто.Любой хороший специалист имеет уважение. Если ты думаешь освоить профессию, относясь к ней без уважения, то у тебя ничего не выйдет. Это распространённая ошибка васянов, которые потом оседают в Пятёрочках. Они ничего не любят и не стремятся, а ценности их - лексусы, и чтобы заносили побольше.
Ура! Я сделал умножение. Знаю тупо, но просто хотел поделиться, появилась маленькая гордость, что хоть в чем то разобрался. <?php for ($x = 1, $b = 1; $x < 10, $b < 10; $x++, $b++) {$sum = ($x $b); echo "$x$b = $sum\n";}
>>1519679Тут ты прав. Прост увидел из прошлых примеров и не стал заморачииваться как на инглише это записать.
>>1518947> пхп не видит инклюд в функции пиздос как удобноИспользуй require и require_once и будет тебе счастье.
Ребят, а кто-нибудь знает как сделать запрос с помошью js и php в бд, с помошью ajax? Т.е вот кнопкочка с статьекй, жмешь - а статья удаляется из бд без перезагрузки стр. Можно ссылочку или что гуглить надо?Буду очень благодарен
>>1519695Отправляешь запрос на сервер с помощью ajax -> сервер удаляет нужную статью -> данные на странице обновляются. Или что тебя интересует?
>>1519699Да но как это делать, реализация этого интересует, как писать такие запросы. Задействован ли php? Или мой код может напрямую менять инфу в моей базе данных на сервере? Тогда разве это безопасно? Так каждый сможет отправить запросы ,не?
>>1519695Если остановится на rest то ты мог бы1. Сделать get запрос с номером статьи и получить обновленный список статей в теле ответа и c помощью js обновить html (так делают только самые нубы)2 Сделать тоже самое delete запросом (rfc ничего не сказано о теле ответа на delete запрос. Но это считается отклонением от стандартного поведения)3 Сделать такой же delete запрос но получить пустой ответ. Сделать нововый get ajax запрос для того чтобы получитьобновленный список статей4 После delete запроса с пустым ответом просто js ом удалить статью из html
>>1519711Я не совсем опытный, но что тут не безопасного? Отправляется post/delete запрос на сервер, на сервере с помощью php этот запрос обрабатывается и выполняется нужное действие. Подозреваю что для удаления статьи нужно обладать какими то правами, вот это и проверяется с помощью сервера. Так же из минимальной защиты пользователя можешь почитать про crsf токен.
>>1519719В браузере у пользователя можно статью с нужным id просто в JS-е убрать, либо как написали выше на запрос серверу вернуть обновленый список статей, но мне этот вариант как то не очень нравится
>>1519719>>1519717> post/delete запрос на сервер, на сервере с помощью phpТ.е в этом пост запросе указывается например к примеру файл x.php в котором код удаления статьия. А сам post/delete запрос просто его запускает?а как гуглить такое? Просто у меня домашка на завтра я все сделал кроме такого запроса.
>>1519683Вангую, что он инклюдил в какой-то функции, поэтому переменные у него попадали в локальную видимость и не были видны снаружи этой функции. >>1519695>что гуглить надо?Работу с ajax.Но я бы не совался без понимания http-протокола, как минимум. Эта кнопочка только для пользователя просто работает - на деле там логики нормально так.>статья удаляется из бд без перезагрузки стрВ двух словах: js посылает данные с удаляемой статьёй на определённый эндпоинт API сервера, который в контроллере уже работает с базой данных.Потом этот же js удаляет ноду со статьёй из DOM-дерева документа. Получается без перезагрузки.
>>1519728Нет, сначала гуглишь и читаешь про MVC, потом про HTTP запросы. >а как гуглить такое? Просто у меня домашка на завтра я все сделал кроме такого запроса.Ну мы же не знаем как ты свое приложение скостылил, какие свойства есть у твоей статьи, какой ключ. Самое банальное делать ссылку по типу ursite.com/threads/{id}/deleteИ по id в БД просто удалять
>>1519743>>1519738Сайт без MVCИ мне надо без jqueryпросто отправить "DELETE FROM `bd1` where id =1" а потом Dom обновить (это я смогу)
>>1519699>Отправляешь запрос на сервер с помощью ajax -> сервер удаляет нужную статью -> данные на странице обновляютсяА как сервер поймет, что это не хаккерский скрипт? Прежде чем выполнить
>>1519809Так же как и при обычном не ajax запросе, при помощи номера сессии, который посылается в виде кукиса даже при ajax запросов.Правда это нужно еще программировать на php.
>>1519812>>1519814Да спасибо. А можно кусочек с маленьким кодом 1 запросика плиз.Я гуглю но нигде не нахожу рабочий кусок.
Аноны, сейчас в учебных целях повторяю одну здоровенную форму одного крупного сайта.В ней куча элементов которые появляются и скрываются в зависимости от выбранного поля в селект. Я когда JS изучал подобное делал.В форме на том сайте для такого юзается jQuery вовсю.Сейчас везде и всюду говорится что jQuery не торт и его юзать нельзя.Но допустим закажут мне что то подобное - как реализовывать такую форму? Не на рекат\вью это писать?Или вообще нативно херачить?
>>1519936Сайт древний, скорее всего. Легаси - все дела. Если заказчику нет дела до технологий - бери фреймворк, тебе же легче будет (если умеешь в него). Если заказчику нужно что-то допилить - используй то, что уже есть.
>>1519936>jQuery не торт и его юзать нельзяТак ты спрашивай - почему нельзя его юзать?Очень часто такое слышно от хайповых js-петухов, которые кроме своего фреймворка ничего не знают.
>>1519953Уже тысячу раз вам блять объясняли, что сам по себе он норм для того, чтобы повесить пару обработчиков, сделать анимашку или отправить запрос, но когда появляется что-то посложнее типа динамической формы с валидациями, какой-никакой роутинг или ещё чего (что ВНЕЗАПНО делает просто сраный скриптик на фронте отдельным маленьким приложением, работающим в клиентском браузере), то лапша на jquery стремительно превращается в неподдерживаемый кусок говна, без архитектуры, расширяемости, зато с кучей дырявой магии.
У меня не выходит разобраться с правами на каталоги для Laravel.Есть Ubuntu 18.04. На ней apache 2.4. Корень для сайт: /var/www/html. Какой владелец должен быть у этого каталога? Какие права нужно выдать, чтобы ларавел нормально с ним работал? Плюс папки bootstrap/cache и storage.Я и так и сяк пробовал настроить, в итоге всё сломалось и не работает.Последнее, что делал:sudo chown -R testuser: /var/www -сменил владельца с рута, на себя.sudo find /var/www -type f -exec chmod 664 {} \;sudo find /var/www -type d -exec chmod 775 {} \; - хз что это, написано "Then I give both myself and the webserver permissions:", что бы это ни значило.
>>1520023>что бы это ни значило.Вернее, что он написал, я понимаю, но что это за команды - нет. find какой-то - это же просто команда поиска, что она может сделать?
Как реверснуть оператор сравнения с null - "??"$a = $b ?? 'b is null';А мне надо что-то вроде:$a = $b !?? someFunciton ($b);То есть, иногда надо что-то сделать с переменной, но только если она не null. А если null, так пусть просто будет null.
>>1520016Здрасте. Добро пожаловать в мир react и прочих.>>1519974Да, мне именно это требуется. Из фронта я умею нативный JS и react уровня to-do-list. Жиквери никогда не юзал.Достаточно подходит для моей цели.
>>1520023Попробовал по https://tecadmin.net/laravel-file-permissions/sudo chown -R www-data:www-data /var/www/htmlsudo find /var/www/html -type f -exec chmod 644 {} \;sudo find /var/www/html -type d -exec chmod 755 {} \;cd /var/www/htmlsudo chgrp -R www-data storage bootstrap/cachesudo chmod -R ug+rwx storage bootstrap/cacheВсё равно не работает. Если положить в корень test.php, то он нормально отрабатывает, а Ларавел нет. ForbiddenYou don't have permission to access this resource.
С задачкой про айфон чем можно пользоваться? Только теми материалами, которые уже были в первых уроках?
>>1520049> Жиквери никогда не юзал.Да это же стейтлесс-либа.Там 10 методов, которые требуются для 99% задач и все они тривиальные и понимаются интуитивно, типа "ты ей передаёшь dom-элемент (или путь до него) и коллбек, она вызывает коллбек при определённом событии".Короче, поиграешься полчаса и можешь считать себя знатоком и обновлять резюме, лол.
>>1520043может так?//если не nullif (isset($переменная));//если нулelseif (!isset($переменная));только вкатываюсь
>>1520043Равно: ==Очень прям пиздец равно аж по типу: ===Не равно: !==https://www.php.net/manual/ru/language.operators.comparison.php
>>1520156>но когда появляется что-то посложнее типа динамической формы с валидациями, какой-никакой роутингА это что?Кажись ты просто не понимаешь разницу между фронтом и бэком.
>>1520254> но когда появляется что-то посложнее типа динамической формы с валидациями, какой-никакой роутингЭто писал я, другие посты - кто-то ещё.Про роутинг я сказал потому что потом окажется, что форма должна вести себя по-разному на разных страницах, быть универсально-гибко-настраиваемой и всё такое. Там туева хуча вариантов и роутинг - только один из примеров того, что делает jquery-поделки неудобными для развития.
>>1520345>форма должна вести себя по-разному на разных страницахА если без фантазий? >роутинг - только один из примеров тогоРоутинг форм, ты имеешь ввиду?
По мере изучения всяких либ во время написания сайтов всё меньше приходится писать на ПХП и всё больше ебаться с вёрсткой и фронтом.У всех так?
>>1520477потому что бэк в массе однообразен и отточен.а фронт,это то что человек видит-дизайн и логика.тут фантазии больше.ну перчинка-жс ублюдский ЯП
>>1520478Но я хотел на ПХП писать, а не жс.Помню как свой парсер первый писал весь вечер - стена кода, сток под 200-250. А счас - накатил модную либу, скормил ей xpath, привёл в нужный формат другой либой, и всё - жрать подано. Дай бох 50 строк будет всё это дело.
>>1520476И ларавел и симфони являются фреймворками. Однако архитектура симфони построена так, что большая его часть ето независимые компоненты, которые не пересекаются с другими компонентами. Из-за этого компоненты симфони стали использоваться в других фреймворках, в том числе в ларавеле.В ларавеле куда меньше надо собирать руками, то есть из коробки что-то запустить, чтобы оно работало на ларавеле будет быстрее. В основном потому, что за тебя уже все решили. Например, взгляни на документацию роутинга в симфони и ларавеле:https://symfony.com/doc/current/routing.htmlhttps://laravel.com/docs/6.x/routingОба фреймворка имеют большое коммьюнити. На мой субъективный взгляд, для ларавеля написано больше инструментов (например какие-то свои очереди, вместо rabbitmq), однако и используются они только с ларавелем, как я видел.Наверное, можно предложить так:Если ты не работал с фреймворками до етого (либо работал с каким-то мамонтами типа yii и другими того времени), то тебе для проекта стоит выбрать Laravel. Если тебе нужно сделать что-то типа блога или онлайн-магазина, то тоже сстоит выбрать Laravel. Если ты хуево понимаешь в архитектуру, то тоже стоит выбрать для начала Laravel (тк на симфони накостылить несравнимо проще). Если это кастомный проект, с кучей недефолтных требований, то на симфони ето будет собирать проще скорее-всего, чем ларавель под себя переделывать.Я думаю анон меня поправит и дополнит чуть что.
>>1520477Если делать сайты-визитки и онлайн-магазины да. Надо идти в продуктовые компании, там куда лучше с этим. Очень много интересных задач было, нагрузки, масштабируемость, написание каких-то допинструментов. Как только уровень джуна пройдешь беги от сайтошлепов в продуктовое что-то, ну или куда-то, где проекты по 4-6 месяцев идут.
>>1520477На моем прошлом месте работы, когда начало появляться слишком много задач про сделай кнопку красную, чтобы жало и отправлялись данные и заебись все, то отдельно наняли фронтендера для этого. Но у тебя второго фулстака наймут.
Вопрос к ОПу. Какой потолок развития у php разраба? У меня есть планы переката в Европку - для этого пыха подойдет?
>>1520489Я бы дополнил что на ларавел не то чтобы сильно проще, а просто намного быстрее что-то написать чем на симфони, т.к. существует много шорткатов в виде глобальных функций и тебе не нужно долго думать о структуре классов и т.д. потому что в любой момент можно вызвать request() и оп, у тебя объект запроса например. А еще он всё таки немного подвязан на свой же орм Eloquent, это и хорошо и плохо, и если в теории можно свапнуть на доктрину или что-то еще, то на практике разные ларавел фичи начинают не работать потому что свойства приватные, или у этой фичи внутри проверка на инстанс или еще что, и приходится опять писать тот самый бойлерплейт. Например ларавель джоб класс, который через трейт умеет трансформировать модель в айдишник перед сериализацией чтобы память не охуела от активрекорда, а когда эта джоба выходит из очереди то по айдишнику заново гидрирует в свойство эту модель через рефлексию. Думаю что такой трейт можно легко и для доктрины написать, но сам факт.Я бы советовал всё таки сразу на симфони + доктрина писать, мне кажется что там больше классического ооп, бойлерплейта, конфигов и вот этого всего, после такого на ту же ларку перекатиться будет в разы легче чем наоборот, когда ты не понимаешь зачем тут вводить тип если можно просто строкой что-то передать и т.д.
Реально ли решить задачку с айфоном новичку?Как дальше заставить прогу вычесть столько, сколько нужно, что бы в минус не уйти.
>>1520562>Реально ли решить задачку с айфоном новичку?Она для новичка и есть.>Как дальше заставить прогу вычесть столько, сколько нужно, что бы в минус не уйти.Но сперва нужно синтаксис узнать - какие операторы есть и что делают. Нет смысла задавать такие вопросы.
У меня есть один очень важный вопрос. Можно ли сделать так, чтобы скрипт отдал клиенту ответ, но при этом сам продолжил свою работу на ещё некоторое время.Нужно это в следующей ситуации. В интернет магазине пользователь нажимает на кнопку "заказать". Скрипт создаёт различные документы содержащие данные о заказе и отправляет уведомления на различные емейлы. И только после этого показывает клиенту сообщение, что заказ совершён удачно. В результате клиенту приходится ждать примерно 10 секунд, а иногда и ещё больше.Ну так вот можно ли решить эту проблему только средствами пхп, без использования кронджоб?
>>1520431>>Роутинг форм, ты имеешь ввиду?Я думаю он имеет ввиду роутинг SPA фронтред приложения, реализованного к примеру на react.Если ты никогда не писал на react - то попробуй.>>А если без фантазий?Нет никаких у него фантазий.react реализует компонентный подход, когда ты можешь собирать элемент из других элементов, и все это может динамически изменяться. И один и тот же компонент может себя по разному вести на разных страницах.
>>1520254Похоже ты просто не перерос еще классическое MVC на бэкенде со статикой отдающейся клиенту.Внезапно MVC и тыщи его вариантов отлично живут на фроте. По необходимости получая от сервера только json с данными без какой либо разметки вообще.
>>1520633>один и тот же компонент может себя по разному вести на разных страницахЗачем? Это хуевый пример, когда пишутся сложные компоненты на все случаи жизни. SPA - это когда на одной станице рендерятся разные компонеты, в зависимости от условий. Например в зависимости от урл, когда для разных урл бекендом отдается одна страница. Это кстати наиболее правильное использование SPA, чем когда для урл используется хеш и зачастую не работают кнопки назад/вперед
>>1520642Чувак, наш с тобой диалог - абсолютно бесцельное "просто попиздеть". Словил такое густое ощущение.
Ребятухи, начал изучать ооп и возник такой вот вопрос. Это нормальная практика что если удалить в классе question все public поля, то программа будет работать как ни в чем не бывало? И почему так вообще происходит ведь раз нет поля в классе, то кажется заполнить эти поля никак нельзя при создании объектов. И раз все и так работает зачем что то объявлять в классе questoins? только для наглядности чтоб ничего не забыть? https://3v4l.org/dWVtb[
>>1520697>И почему так вообще происходит ведь раз нет поля в классе, то кажется заполнить эти поля никак нельзя при создании объектовПоля могут задаваться динамически через магический метод __set()
Поясните за симфони. Давно разрабатываю на пыхе, но чаще всего встречаюсь с ларавелом, отдельно используемыми компонентами симфони и всякими сраными легаси на чём угодно (вот такой я неудачник).Хочу разобраться в том, как правильно готовить симфони, какая там внутри архитектура, какие бест-практики, как правильно юзать доктрину и всё такое.Чего можно почитать, какие хорошо сделанные примеры приложений посмотреть и всё такое?Пока нагуглил бест практики на сайте самого симфони и пример оттуда же, но может есть ещё чего дельного.Ну и чего вообще нужно поизучать в этом котексте (из разряда, если бы я знал, чего спросить - спросил бы)?
>>1520633>роутинг SPA фронтред приложенияРечь о jQuery. Ты нормалный вообще - на нём SPA делать?Был вопрос о нём - вы в ответ бред нести стали. Один с реактом успокоиться не может, второй с роутингом форм носится.Зачем пхпшнику сдалось ваше SPA в норме, если ему интерфейс накидать? Именно поэтому ваше мнение никому не интерсно - вы даже в суть вопроса неспособны вникнуть.
>>1520845Ты почему-то отказывешься воспринимать тот самый первый пост, что тебе анон написал, чем только выставляешь себя долбоёбом.Тебе сразу сказали, что нет проблемы взять jquery чтобы навешать пару триггеров. Но в любом сложном случае типа роутинга, зависимости элементов одного от другого сразу лучше брать vue или react.
Сап аноны. Как лучше реализовать теги? Вот есть у меня в бд запись типа: ид, наименование, хуй, пизда, список тегов. Также есть отдельная таблица с этими тега вида: ид, название тега. Можно ли связать столбец из первой таблицы со второй, и чтобы первый столбец был списком со ссылками на второй? Или лучше не ебаться а сделать все обычным текстом, и делать запрос sql "...LIKE %tagname%"? Знаю что вопрос больше по sql, но вы же тут няши.
>>1521013Я специально перевел. А то он потом такой: "А на русском есть че почитать?" А я такой: "Иди учи ингришь, Маня". И понеслась на 20 постов. Ну как обычно в /pr/ происходит.
>>1521031Да какая разница? Эти доллары абсолютно не мешают (даже на самом деле чуть удобнее читать код, глазу есть, за что зацепиться).
Можно ли сохранить пробелы в получившимся массиве при использовании explode?$word = explode('/(?=\s)/u', $word); просто не работает$word = explode(" ", $word); убивает пробелы
>>1521022>А зачем в пыхе сделали $ перед переменными? Что-бы можно было писать переменные переменные и переменные функции:$var = 'hallo';$var_name = 'var';echo $$var_name; //напечатает 'hello';function bar() {echo ' world';}$func_name = 'bar';$func_name(); //напечатает ' world';
>>1521300Я думаю, что $$ - реализованы совсем по-другому чем eval. Впрочем это не важно, как они реализованы, главное что они работают и иногда бывают очень полезны.
>>1521321Ни одного нормального использования придумать не могу и не видел, за всё время работы.Лучший код - это явный код, когда точно понятно, что вызывается, когда, какого типа и так далее. Уверен, что со всеми трендами к типизации пыхи, $$ рано или поздно задепрекейтят.
>>1521323Насчёт переменных ты прав, но не на счёт функций. Запуск функций через $func_name() просто позарез необходимо в php и даже используется в стандартной библиотеке:Вот пример передачи названия колбэк функции в качестве аргумента:set_error_handler("handleError");
>>1521323>Ни одного нормального использования придумать не могу и не виделТоже хотел написать. Но передумал.>>1521355>Вот пример передачи названия колбэк функции в качестве аргумента:>set_error_handler("handleError");Анонимные функции, не?
>>1521022 У тебя просто маленький кругозор. $ используется в bash и ее предках, в perl. В глобальных переменных в Ruby. В конце строковых переменных в BASIC. Думаю, сделано это, чтобы упростить парсинг (разбор) кода, чтобы сразу было видно, где переменные.>>1521102 Стрелочки используются в Си/Си++ для обращения к полям и методам через указатель на объект, а не через сам объект.>>1521300Нет. Это "переменная переменная", то есть обращение к переменной, чье имя хранится в другой переменной. Осложняет понимание кода и не рекомендуется к использованию. Аналогично, есть "переменные свойства" и "переменные методы", хотя я предпочитаю для них использовать более читабельный call_user_func.>>1520797 Надо найти туториал по изготовлению приложения на Симфони, хорошие туториалы на английском. В ходе выполнения читать соотв. разделы документации, чтобы полностью разобраться в используемых компонентах, при необходимости не бояться залезть посмотреть код.
>>1521218Вот примерно такое может получиться у тех, кто не любит фреймворки, и любит писать все сам на "чистом" PHP. Правда, в случае с Битриксом там это вынужденно из-за авторских прав.>>1521178> $word = explode(' ', $word);Не стоит использовать одну переменную для хранения и массива, и строки. Лучше назвать их по-разному ($words и $phrase).> $words = " ";> $words .= $word;Чтобы не мучаться с лишними пробелами, проще предложения с обрезанными trim() пробелами класть в массив, а в конце склеивать массив через implode. У тебя же в коде выводятся лишние пробелы в начале текста и тебе приходится кривым костылем добавлять пробелы после точек.>>1521108 Первое не работает, так как explode не поддерживает регулярки. Надо использовать preg_split.>>1520939Отношение многие-ко-многим через таблицу связи.Также, тебе в помощь урок про нормальные формы БД: https://github.com/codedokode/pasta/blob/master/db/normalization.md
>>1519936Задача выглядит достаточно простой для jQuery. Делаем список вида "при каком значении какие поля показывать". Более того, можно обойтись почти без JS, вешать на форму класс в зависимости от выбранного значения, а на скрываемые поля повесить атрибут, при каком значении класса их показывать: <form class="type-x">...<div class="field" data-show-for="x y z"> .. </div>> Сейчас везде и всюду говорится что jQuery не торт и его юзать нельзя.Если не интересует поддержка старых браузеров, и лаконичность кода, то же самое можно сделать на vanilla js. Зачем тащить монстрообразный реакт, webpack, babel, JSX для этой задачи и связанные с ними головные боли, непонятно.>>1519974 Динамические формы с валидациями нормально делаются на jQuery или vanilla js при грамотной архитектуре, и реакт не спасет их при неправильном проектировании. Будет такая же лапша. Наоборот, он потребует лишних затрат времени, сильно усложнит работу из-за внезапно всплывающих проблем, потребует ставить вебпак и грузить полмегабайта кода, итд. Например, работа с асинхронными аякс-запросами не самая веселая вещь и потребует добавлять всякие промежуточные состояния "идет загрузка" и "ошибка загрузки". Впрочем, это и на jQuery невесело.Типичный пример подвоха: вы делаете автокомплит и по мере набора букв шлете запросы на сервер. Но ответы на запросы приходят в обратном порядке. Покажете ли вы неактуальный результат или вы знаете и предусмотрели эту ситуацию? Отмените ли лишние запросы? Обрабатываете ли корректно ошибки ответа на запрос? Показываете ли индикатор активности?И реакт (поправьте, если ошибаюсь) сам по себе эти проблемы не исключит. Все, что он делает - привязку (data-binding) отображаемых данных к данным "модели", которая там представлена огромным анонимным объектом.А чтобы усложнять код внедрением SPA должна быть веская причина, а не "на хабре много статей про реакт".
>>1520576 Это в общем плохая идея, так как ты можешь показать пользователю, что все ок, а потом операция не удастся. Также, если это часто использовать, то такие фоновые задачи могут занять все доступные воркеры и некому будет обрабатывать приходящие запросы. Нет защиты от дублирования, когда два процесса обновляют одни и те же данные.Лучше все же это делать в очереди задач.>>1520697Это странная особенность PHP, что при записи в несуществующее поле оно автоматически создается. Это мешает обнаруживать ошибки, когда ты опечатался в названии поля. В такой ситуации было бы лучше выдать ошибку, а не молча создать поле и продолжать выполнение программы.Можно запретить это магическим методом __set.> И раз все и так работает зачем что то объявлять в классе questoins? Чтобы при чтении кода было видно, какие есть поля. Также, чтобы можно было добавлять к ним комментарии. А в новом PHP - указывать еще и тип значения поля.Решение верное.>>1520562 Надо перед тем, как платить и вычитать что-то, сравнить остаток долга и сколько ты готов заплатить. И взять меньшее из 2 чисел. Если долг = 7000, а у нас с собой только 5000, то платим 5000. Если долг = 2000, а у нас 5000 то платим 2000.
>>1520566Смысл задавать есть, так как тут мог быть вопрос про логику, а не какой оператор использовать.>>1520521Увы, никогда не интересовался этой темой. Но, естественно, если изучать только PHP и ничем больше не интересоваться, то упрешься в потолок. Крутые специалисты, даже если работают на PHP, обычно обладают кругозором (например: Си, линуксы). Можешь поискать на Хабре статьи про переезд, а также попробовать погуглить вакансии и посмотреть требования.>>1520043 Используй if, либо тернарный оператор и не усложняй код.>>1520096Там есть поддержка старых браузеров.
>>1520088Можно пользоваться любой информацией, если это поможет.>>1520023Ты бы ссылку приложил на инструкцию, а то непонятно, откуда это взято. Смысл в том, что доступ к файлам должен быть и у тебя, и у веб-сервера, если он запущен от другого пользователя.Если ты глобально установил тот же Апач + mod_php или nginx + php-fpm, то в линуксе они обычно работают от имени пользователя www-data. И этому пользователю нужно иметь доступ к файлам хотя бы на чтение. А в те папки, куда будет писать Ларавель, еще и на запись.Владельцем лучше назначить себя. Там правда, будет проблема, что Ларавель будет создавать временные файлы от имени www-data, и лишить тебя к ним доступа.Я обычно использую встроенный в PHP сервер, который запускается от моего пользователя из ком. строки и позволяет не мучаться с правами. Также, ты можешь отключить глобально установленный Апач или nginx и запускать их вручную из командной строки от своего пользователя и с выводом логов в консоль, но ту придется поколдовать и почитать мануалы.
>>1520031>Вернее, что он написал, я понимаю, но что это за команды - нет. find какой-то - это же просто команда поиска, что она может сделать?Она находит файлы и может выполнить определенную команду для каждого найденного. Вот сайт, который пытается объяснить разные опции в команде: https://explainshell.com/explain?cmd=find+%2Fvar%2Fwww%2Fhtml+-type+f+-exec+chmod+644+%7B%7D+%5C%3B (исполнительные идиоты в моем провайдере зачем-то его блокируют).Также, ты можешь набрать в консоли или в гугле man find и почитать справку по команде.Также, может тебе поможет гайд по основам CLI https://github.com/codedokode/pasta/blob/master/soft/cli.md> Всё равно не работает. Если положить в корень test.php, то он нормально отрабатывает, а Ларавел нет. Проверь командой stat или ls -l, какие права стоят у файлов Laravel, в том числе index.php или что там используется вместо него. Проверь лог веб-сервера, к какому файлу доступа нет.>>1519817Вот тебе в помощь важные моменты, о которых надо помнить при использовании AJAX-запросов: https://github.com/codedokode/pasta/blob/master/js/ajax.mdИ правильно пишут, нужна защита от уязвимости CSRF.
>>1519676Тут не требуется две переменные $x и $b, если они всегда равны, хватило бы одной. Просто писать $sum = $x*$x;> $x < 10, $b < 10Это не имеет смысла, так как тут мы пишем не команду, а условие. Запятая используется, чтобы вписать несколько выражений в первый или третий блок, а во втором пишут условие проверки. В нем можно использовать && или ||, но нет смысла ставить запятую. Тебе надо внимательно прочитать, как работает for, а не ставить выражения наугад. for (действия до начала цикла; условие продолжения; действия после каждого шага) { ... }for (тут можно запятую; тут не имеет смысла ; тут можно запятую) { ... }
>>1521482>Ты бы ссылку приложил на инструкциюУже по нескольким делал. Вот последняя: https://www.digitalocean.com/community/tutorials/apache-ubuntu-18-04-ruА тут написал, что именно делал и что получил https://2ch.hk/s/res/2685013.html#2686503 Впервые настраиваю веб сервер вообще и апач в частности. Очень... непривычно.
Всем привет, создал группу для вкатывающихся в пхп, я сам сейчас на этапе создания списка студентов, более опытные антоны тоже приветствуются.https://t точка me/anonaprphp
Хочу вкатиться в вордпресс и получать миллионы долларов с фриланса, насколько это сложно и скок времени займет примерно, учитывая что знаю нормально питон/джангу и похапе.
>>1521481>и не усложняй код.Ясно, вы нихуя не понели.Кучи скобочек - вот что усложняет код.Сделать что-то с переменной, если она не null - это настолько частая операция, что для нее очень не помешает однострочная языковая конструкция.
>>1521917>Кучи скобочек - вот что усложняет код.С каких это пор группировка усложняет код?>это настолько частая операцияПо твоему коду не скажешь, что ты способен оценить насколько это частая операция.
Есть ли у кого то пример кода задачи про компанию "Вектор"?Не могу допереть что от чего наследовать: отдел от сотрудника, или сотрудника от отдела.
>>1522112Вроде бы нет. Я просто вижу очевидную связь между тем, что бы наследовать Профессии от Сотрудника. Но как должны взаимодействовать класс Сотрудник и Департамент?
>>1522159Ты совершаешь классическую ошибку новичка, пытающегося в ООП - пытаешься применить его там, где оно не нужно.По сути, забиваешь гвозди микроскопом.Так вот, наследование - это инструмент, который предназначен для - сюрприз - наследования (расширения) свойств и поведения одного объекта другим. И реально применяется в довольно узком наборе случаев, кроме шуток. Например, когда у тебя есть класс "модель", которая работает с базой данных и в этом случае все "модели" типа юзера, отдела и так далее также являются моделями.В твоём случае, отдел является сотрудником (или наоборот)? А сотрудник является профессией (или наоборот)? Если нет, то тебе вообще не стоит наследовать их.Не читал твою задачу, но вообще отдел и сотрудник - это два разных объекта твоей предментной области, а профессия является скорее всего свойством сотрудника.То есть, у тебя есть классы условно сотрудник, отдел, профессия и у сотрудника должны быть поля "ид профессии", "ид отдела".
>>1522159У тебя какая то каша получается. Немного расширю то, что писал >>1522203У тебя есть класс сотрудник. Далее у тебя есть класс сторож, класс продавец и класс директор. Они являются сотрудниками. Т.е наследуют из базового класса какие то общие свойства и методы. Например у них у всех есть рабочий график, оклад, стаж, дата приема на работу и какой нибудь метод расчета коэффициента зп который высчитывается на основании стажа и времени работы в предприятии. А вот что ты собрался наследовать сотруднику от отдела - для меня до сих пор загадка.
>>1522311>Далее у тебя есть класс сторож, класс продавец и класс директор.Я бы под это классы не делал - с точки зрения кода сторож, продавец и директор являются обычными сотрудниками. Достаточно им в свойство прописать ид должности.
Двач, помоги, пожалуйстаЯ хочу подружить ckeditor с ларкой. Он генерирует выход в html тегах. Только выход через {{}} всё успешно экранирует и я вижу <b>хуй</b> текст. Если убрать проверку, то мне могут поднасрать, сохранив напрямую через post, например. Если вырезать все эти script, onclick и так далее, то можно так же с веселым гиканьем испортить текст юзверу. Как мне усесться сразу на два стула?
>>1522336никак. найди какой-то редактор, который в bbcode или markdown будет текст размечать, и из него уже комментарии рендери
>>1522336либо, как очень хуевый вариант, можешь сделать свой валидатор, который будет только разрешенные теги без аттрибутов сохранять. но ето ебала и ты точно где-то проебешься, такие дела
>>1522341>никакОх. А как тогда справляются другие? Редактор популярный вродеЯ тут пока надумал оставить поддержку только всяких br и h2, куда точно не навесить скрипты, а все остальное спецсимволами замещать
>>1522346Добавляют только в админку такие штуки вроде. Для пользователей давно не видел. Если я не прав, анон покажет.Ну и смотри, такие редакторы, они реализацию с данными мешают. Например, твой сайт взлетит и надо будет мобильные приложения пилить, вот ето вот все. А у тебя в каждой статье, в каждом комментарии html тэги висят. И что теперь, через вебвью все выводить? Или страйпать теги и убивать всю разметку? Поэтому разметку рили лучше на маркдауне каком-то хранить, или посмотри другой, который тебя устраивать будет.
>>1522353>>1522346Ну, это не только мобильных приложений касается. Для магазинов, например, те же выгрузки товаров создавать если для маркетплейсов.Мой опыт показывает, что если менеджерам/маркетологам дать возможность где-то большой красный текст въебать, они его обязательно въебут. А если не давать, то они обязательно попробуют. А ты потом ахуевать будешь, глядя в базу, сколько говна они наворотили.Поетому если есть возможность, лучше сразу донести до бизнеса, что такие редакторы веселых табличек потом могут кучу проблем сделать и это какбы много часов работы.
>>1522339На самом деле там ид должности не надо - это доменный объект и там уже должно само имя должности содержаться.Я сам тот ещё нуб.
Крутить баранку, таксовать, это конечно отупляет. Прилично так просидел за задачкой с айфоном. Читал старые треды, смотрел как другие решали, ваще муть конечно, помогла эта подсказка - прибавляем проценты и комиссию к остатку долга (!не вычитаем ничего пока!)Вроде уловил логику, теперь кажется каким то простым и понятным. https://ideone.com/MXyHO1>>1521484Спс, мне надо все внимательно изучить и вопросов у меня дофигища, например почему сейчас работает эта строка, а не эта, почему эта переменная сейчас такая и тд. Но поищу сперва в книге.
Бросаю работу в офисе и вкатываюсь во фриланс, буду ковырять вордпресс и всякие правки делать в верстке, мне 400-500р в день хватит на жизнь, какие подводные? опыт работы 1 месяц в конторке бекендером.
>>1522966> какие подводные? Все зависит от того что ты из себя представляешь. А учитывая что> опыт работы 1 месяц в конторке бекендером.Думаю что пока что мало что. Хотя мб у тебя есть портфолио. У меня опыт фрилансинга был 4 года назад на фл.сру. Это ебаная помойка. Сейчас не знаю что и как там но думаю в лучшую сторону нихуя не поменялось. Про акк щя стоит 2к лол нахуй. 1. Адекватных заказчиков там 1%. Да и то они обычно выбирают того у кого репа не по нулям. Остальные дают задачи на уровне "сверстать лендос адаптив пихельперфект за ночь бюджет 1к пожалуйста отнеситесь серьезно!!!! Кто не готов ни откликайтесь!!!! Оплата только после того как скините вёрстку!!!! В начале ответа напишите "Владимир Путин молодец"!!!!1.1 сразу готовься к тому что тебе придется САМОМУ ОБЩАТЬСЯ с самыми тупыми заказчиками. И улыбаться и отвечать на из вопросы если хочешь чтоб тебе заплатили твои 500р. 2. ВордПресс вобрал в себя все самое худшее на что способен пхп. Когда будешь исправлять какой нить баг на новом проекте охуеешь от плагинов/тем и от синтаксиса. Там каждая макака придумывает свои стандарты. Проще фреймвор выучить. 3. Ты будешь сидеть дома. А если у тебя с дисциплиной все по плохо...4. Придется постоянно мониторить новые проекты и пытаться их отбить от индусов которые делают все за 100р. 5. Постоянно будешь трястись за рейтинг и отзывы. Мой совет короче. Поработай на галере год а там уходи
>>1522954>/ Посчитаем расходы 20 раз на 20 месяцев вперед /Так неправильно делать. Нет никаких 20 месяцев - есть только кредит и выплата. Месяцы код сам должен считать, насколько помню.Программирование на то и программирование, что цифры любые могут быть, вплоть до 999 месяцев.>for ($month = 1; $month <= 20; $month ++) {>...> if ($creditBalance <= 0)> break;Лолб. Цикл со счётчиком превращается в штаны в условный цикл который и надо было использовать изначально.
Анончики, начал делать задание про файлообменник. Поставил slim 4 и twig, но вместе они не хотят работать. Ошибка "Using $this when not in object context". Поставил Slim 3 и всё норм, работает. Можно как-то поправить, чтобы Slim 4 работал с Twig?
>>1522995Спасибо за развернутый ответ, понимаю что вордпресс говно, но он слишком популярен чтобы его игнорировать, я еще подумывал удаленку выбить, видел вакансии куда не требуется опыт каким-нибудь версталой, можешь что про это рассказать?
>>1523127>видел вакансии куда не требуется опыт каким-нибудь версталойКидал уже отменили? Месяц отработаешь за спасибо.
>>1523253Двачую. Он популярен в нише индусятины и низкоквалифицированной рабочей силы за копейки. Там, где нормально платят, вакансий по вордпресу не наблюдается.
Вот это вот, то что в шапке советуется для новичка http://codedokode.github.io/phpbook, это норм курсик для стартующего или получше чего можно найти?
>>1523323Если портфолио нет хоть какого - не возьмёт никто. 1 месяц опыта в какой-то шаражке не катит.Нах ты нужен кому без скиллов, кроме как разводилам всяким?
>>1523407Поставь после echo $text; строку echo "------\n"; и повысь число шагов в цикле до 10.И тогда наверно поймешь.
>>1523127>Спасибо за развернутый ответ, понимаю что вордпресс говно, но он слишком популярен чтобы его игнорировать,Когда будешь пытаться исправить/допилить что-то на вп ты проклянешь все на свете. Аноны >>1523253 >>1523280 дело говорят. Один раз редактировал форму комментариев. Добавлял поле. Так вот. В этом говне нет мб ща есть шаблона формы. Все блять через функции нахуй добавляется. Удобно, правда? Плюс знаешь почему он популярен? Потому что всякие пиздодельные заказчики, желая сэкономить, ставят бесплатные плагины, в которых ВНЕЗАПНО находятся анальные плаги. И в один прекрасный момент сайт вирусится. Там на самом деле куча всяких прикольных моментов может быть. Например редирект юзеров с сайта, при рефере, например, с гугла. И как бы в коде все окей. Симптомов заражения нет.А трафик падает. Понаставят там свои сео свистелки и перделки, которые все мета теги превращают в суп с говном, а потом ой чойта все сламалось это ты веноват!!111 до того как тебе дал в руки сайт все роботало!1111111 АЙ АЙ АЙ ПОЗИЦИИ ПАДАЮТ!!11111Короче не стреляй себе в ногу. Серьезно. в /web чувак писал про то, как они там темы для вордпресса продавали. Поищи тред. Там треш. Я уже не говорю про настройку интернет магазина(!!!!) на вордпрессе. Напоминаю, что wp это изначально система для блога! Учи фреймворки, не проебывай время. Один день изучения фрейворка для тебя будет полезней, чем 1к проектов на WP за 100р. > я еще подумывал удаленку выбить, видел вакансии куда не требуется опыт каким-нибудь версталой, можешь что про это рассказать? Меня друг спас с фриланса. Я на контору, в которой он работает, работал удаленно. Так. Макака эникейщик. Потом я пошел без нормального опыта и с минимальным набором знаний в местную контору практически за еду. И там с трудом, но начал развиваться. С самого начала психологически помогало то, что рядом есть кто-то, кто может помочь / подсказать.Ща вот думаю куда дальше двигаться. По идеи надо бы перекатывать в дс/дс2. На удаленку не хочу. Ибо целый день дома такое себе.
>>1523566>Учи фреймворки, не проебывай время. Один день изучения фрейворка для тебя будет полезней, чем 1к проектов на WP за 100р.Согласен, но за учение фреймворка мне платить не будут, в лучшем случае только через пару месяцев и то в офисе, на фрилансе/удаленке нужны мидлы, а вот на задания с CMS можно претендовать без опыта вообще, хотя и экосистема этих цмс невероятно хуевая.
>>1523719Напиши себе в резюме год работы фрилансом на пхп и пиздуй жуном в какую-то крупную контору. По ходу дела будешь учиться, жолжно взлететь если ты не tupoy. Ну там скажи, что на yii первом работал. Его все-равно уже не юзает никто, так что сможешь время пока тупить будешь АДАПТАЦИЕЙ К НОВОМУ ФРЕЙМВОРКУ объяснить. Ну ты только там, что такое классы и mvc прочитай перед собесом.Анон правду говорит, что вордпресс это пиздец. Опыт на вордпрессе за опыт не считается. Вордпресс юзают в основном те, у кого денег нету и тебя будут наебывать и кидать (ну или платить 500 рублей, что одно и тоже).
>>1523738Да пускай лезет на этот ВП, зачем вы его отговариваете?Хочется человеку в говне с мухами копаться за копейки - так на здоровье.
>>1523719Есть 2 пиздец какие хуевые cms с которыми приходилось работать - жумла и ВордПресс. Их избегай по возможности. Есть битрих - он кривой пезда. Но за него платят. И есть смысл в нем разбираться. Хотя и неприятно. Вроде его позиционируют как фреймворк сейчас. Пиздец блять. Анон кстати хороший совет даёт >>1523738. Хз правда получится ли у тебя это провернуть на удалёнке. Обычно конторам удоленщики нужны чтоб кидать нудную и низко оплачиваемую работа на которую тратится обычно много времени и после которой хочется выпилиться помню как то всю ночь исправлял ошибки html синтаксиса на страницах древнего сайта лол. Плюс там могут тебя поставить на повременную оплату с учётом времени в каком нить ебаном битрих24. А потом в конце месяца тебе пишет начальник "почему на такую то задачу потратил час вместо 15 наносек?" И начнется мозгоебля на 2 часа по каждой задаче. Плюс за день могут понаставить 2 задачи суммарно за которые получишь 200р, а могут 69 задач за которые ты тоже плачешь 200р которые нужно сделать ещё вчера. Короче может быть весело. А может и нормальное что попадется.А почему ты уходишь с текущей галеры после месяца плаванья? И почему хочешь именно хикковать?
Блядь, опять в нихуя не делание вкатился незаметно. Я плачу по ночам в подушку и прошу Всевышнего дать мне уже дисциплину и силу воли.Так обидно уже ну почти-почти вкотившись топтаться на пороге.Истино успех/не успех - только лишь следствие личностных качетств человека. Чел с сильной волей и упорстовом вкотится за полгода.
>>1523879Просто тебе это не нужно. Если бы у тебя заканчивалась еда и ты или вкатился бы, или умер от голода - не было бы проблем с мотивацией.А так, ты подсознательно ощущаешь, что тебе и так хорошо и потому не делаешь нихуя.
>>1523788Я кстати прикидывал, как бы я сделал заебись cms - и пришёл к выводу, что нет смысла, кардинально лучше чем есть уже не сделать.Всё дело в том, что лучшее на текущий момент представление бизнес-логики - это программный код (по сути, формальный язык описания бизнес-правил и бизнес-механизмов), со всеми его встроенными механизмами типа ооп, метапрограммирования, комментирования, тд и экосистемой с контролем версий, статическими анализаторами, тестами и всё такое.А cms-ки - они не про код, они про накликивание всего в интерфейсе и использование каких-то готовых кусков кода, встраиваемых в некую уже существующую систему, то есть априори про что-то менее гибкое, менее проработанное и более волшебное.Даже если прикрутить кодогенерацию и на основе накликанностей будем генерировать правильный код на божественной симфони, то в итоге пользователи всё равно будут взаимодействовать с такой цмс через кнопочковый интерфейс, что возвращает нас к предыдущему состоянию, когда работа ведётся не программированием, а еблей настройкой внешних модулей.Так что, если у тебя в штате есть программисты, то ты отправляешь их писать всё на симфони/ларавел/чём-то ещё и получаешь проработанный проект. Если у тебя их нет, то ты или сам, или нанимая специально обученную обезьянку, накликиваешь что-то похожее на то, что ты хочешь из насколько-то подходящих тебе блоков, конфигурируя их настолько, насколько позволяют тебе создатели этих блоков.Из всех известных мне вариантов, на двух стульях более-менее ровно пытается усидеть только Drupal, но в итоге они от этого же и страдают. Их охуенная без шуток, кстати, лучшая среди всех cms'ок архитектура задирает сложность, не позволяя мартышкам быстро лабать говносайтики, что завышает стоимость часа разработки и пугает клиентов - а cms-очная суть (основанная на накликиваемой магии) не позволяет нормально программировать эту штуковину.
>>15237887 лет опыта. Вообще никогда в жизни не работал с цмсками. Начал с написания говносайтиков с каким-то чуть-чуть кастомным функционалом на чистом. 7 лет назад толи они еще не оч популярные были, толи я дурачек был. Потом пошел работать в ентерпрайз.Один раз папке на вордпресе установил яндекс-метрику. Попробовал засунуть ее код хедера, посмотрел, что они нихуя не на всех страницах подгружается - подумал, что ну его нахуй в етом говнище разбираться и плагин для яндекс-метрики ему скачал. Такие дела.
>>1523893Ты сейчас описал причины по кторомы 90% населения скатвыыается в пизду.А вообще, это считай механизм естественного отбора. Кто то рождается высоким, с предпосылками к росту мускулатуры, с сильной волей и решительность.А кто то рождается всратышем.Единственное мы люди осознаем свои косяки,и потенциально можем влиять на себя.
>>1523903>>А cms-ки - они не про код, они про накликивание всего в интерфейсе...Чет ты мудришь.cms этот про то что бы собрать сайт\блог\магазин не имея вообще навыков программирования. цмс заняли свою нишу. И огромное количество людей ими пользуются имея только зайчаточные знания прогинга. Или даже не имея их вообще.ЦА цмс - не программисты вообще.
Если я знаком с фреймворками, а мне дадут срочно сделать задание на cms - я не растеряюсь? Или там совсем все просто?
>>1523963Я всё о том же, о чём и ты, просто раскрыл полнее. CMS не может стать идеальным программным продуктом, потому что от неё требуют универсализации и простоты на уровне загружаемых компонентов и зачаточных знаний разработки. И чем сильнее ты делаешь CMSку более "программируемой" тем сильнее ты толкаешь её в сторону от ЦА.
>>1523996Зависит от нагрузки и финансовых возможностей. Если речь о сотнях RPS с откликом до секунды, то осилишь.>>1523990Если у тебя будет задача срочно что-то сделать в любой незнакомой системе, то ты растеряешься. Это нормально, потому что - сюрприз - система незнакомая, а все системы, все cms-ки и все фреймворки ты никогда знать не будешь или ебанёшься в процессе. Выбирай один нормальный фреймворк симфони или ларавел, тут уже десятки анонов уже писали об этом, каждый 10-й пост одно и то же и специализируйся на нём, хотя бы первые 2-3 года, пока учишься. Изучай бест-практики, архитектуру и всё такое.
>>1523893>Просто тебе это не нужно. Если бы у тебя заканчивалась еда и ты или вкатился быКак вкатывание даст ему еду? На вкат нужно время, а жрать нужно каждый день и желательно несколько раз в день. С такой логикой проще вкатится в курьеры или в пятерочку, жрать будет что.
>>1523879Да такая же хрень. Второй месяц пишу в лучшем случае пару строк иногда больше бывает, да на форумах сру, но ничего толком не изучаю.Типа наступил на грабли прокрастинации. Алсо заметил, что лучше не забрасывать больше чем на пару дней - потом пипец лень уже будет по-новой начинать.
>>1524023Ну короч смотри, это на самом деле более чем реально для чистого php без особого тюнинга. Но самое тяжёлое место - это как правило база данных и операции над большими данными, тебе в первую очередь нужно думать над тем, как именно ты будешь решать такие проблемы, проектировать архитектуру с учётом кэширования, всяких materialized view, предподсчётов и всё такое. Во вторую очередь, тебе следует подумать над транспортом, что именно использовать для связи компонентов, сокет или ещё что-то, нужен ли тебе двусторонний мессаджинг, постоянное соединение, всё такое. Тут всё ещё зависит от того, клиент-серверное у тебя приложение, или какой-то обработчик крутится прямо на клиенте. Во втором случае всё проще с транспортом, но сложнее с ограничениями по памяти.И уже потом, сформулировав все требования к архитектуре, выбирай язык и фреймворк. Можешь собрать всё и уже здесь написать повторно, мы тебе точнее скажем.В двух словах - на php такое сделать можно, если руки растут из правильного места.
>>1524058>на php такое сделать можно, если руки растут из правильного местчитал статьи,где не рекомендуют такое на пхп,советуют ноду с сокет ио и монгой.на самом деле динамики там не сильно много будет,примитив,но нужный примитив.структура БД примитивна.за основу всзять ларку и прикрутить уже эту фичу
>>1524064Монгу точно советуют необоснованно, любая база будет достаточно быстрой на маленьких масштабах.Нода действительно лучше подходит для реалтайма за счёт своего встроенного неблокирующего IO.Но php тоже справится, хоть и несколько хуже. Вопрос в том, как ты его приготовишь. Соответственно, если хорошо знаешь пыху и плохо ноду - бери пыху и читай, как готовить или бери и то, и то и использую ноду как прокси, нормальное решение. Если опыт примерно никакой и там, и там, то бери ноду, будет попроще.
>>1524101>Нода действительно лучше подходит для реалтайма за счёт своего встроенного неблокирующа свул?
>>1524112Нода архитектурно заточена под неблокирующие операции, а php-нет. Как свул поможет, если в пыхе работа с файловой системой блокирующая? ORM-ки блокирующими операциями пользуются? Библиотеки не чистят статический кэш, потому что никто не подумал о том, что приложение демонизируется? Ну и сам-по-себе свул - это всё-таки не родной компонент экосистемы, а что-то внешнее, чёрт его знает, как оно может проявиться и когда. А дебажить сегфолты - это крайне неблагодарное занятие (поэтому я бы скорее amp взял, он хотя бы на корутинах построен, а они для пыхи родные)Я бы, если бы не знал ноду, поднял бы её рядом с самым обычным php запущенном через php-fpm, чтобы держала сокеты и слала http-запросы в пхп, который бы работал совершенно стандартным образом. На ноде в таком случае нужно писать минимум кода, только проксирующую логику, проблем с пыхой тоже минимум, потому что всё стандартно, дополнительные затраты небольшие, потому что нода ходит в локальный сервер, там десятки миллисекунд буквально. Хороший компромисный вариант, короче.Ну или можно взять amp/swoole/reactphp/ratchet, но они меня все так или иначе напрягают своей чужеродностью для пехапешной экосистемы. Но ты можешь попробовать, вроде так тоже делают и оно даже работает.
Сука так впадлу последнюю неделю дорабатывать в офисе, просто пизда, зато потом уволюсь, поживу недельку и на удаленочку сяду.
Аноны, как правильно делают - есть оче большая форма, в ней некоторые поля скрываются/появляются. Соответственно в результате в $_POST разные данные.Как мне "деактивировать" лишние/скрытые в данный момент инпуты, что бы они не появлялись пустыми полями в $POST?
>>1524302Тут разобрался - атрибут disable. Но опять же, из JS его можно изменить. Данные присылаемые как то на беке проверять? Типа для каждого вариант своя некая маска.Такой вопрос - допустим поьзователь загружает мне на сервак пять своих файлов - как правильно их временно сохранить? СОздавать уникальный и временный каталог куда они будут загружаться?
>>1524327>Данные присылаемые как то на беке проверять?Да.>СОздавать уникальный и временный каталог куда они будут загружаться?Можно и так.
>>1524002Мимо дегеративного вопроса не судьба пройти? Хуево тебе живется наверное>>1524013>Если у тебя будет задача срочно что-то сделать в любой незнакомой системе, то ты растеряешься.Да, я понимаю. Просто я с cms не знаком, но ковырял yii/lara/symf. Вот и возник поврос, стоит ли время уделять на ознакомление с цмс-ками, или забить болт и дальше учить фреймворки.>Но php тоже справится, хоть и несколько хужеЯ конечно хуй с горы, но имхо для всего есть свой инструмент. Забивать гвозди отверткой можно, но не нужно ведь>>1524302Валидация же в любом случае нужна. Допустим я тебе запрос не через формочку отправлю, с нужными мне данными, без валидации никак же
>>1524365> Я конечно хуй с горы, но имхо для всего есть свой инструмент. Забивать гвозди отверткой можно, но не нужно ведьПродолжая твою аналогию, "лучше, конечно, пилить деревья бензопилой, но если не умеешь ей пользоваться - возможно, проще будет топором".
Где почитать стандарты написания документации, напримерvar_dump ( mixed $expression [, mixed $... ] ) : voidкак вот эти все скобочки расставлять внутри, для чего многоточие как правильно именовать "абстрактный" аргумент, я уверен, где то есть стандарт этого всего вот. Код быстро разрастается, иногда трудно вспомнить даже порядок аргументов или метод например, хочется конструкторы и публичные методы вынести на одной страничке в алфавитном порядке где все легко найти будет. Загуглить не смог, все не то.
>>1524499Это смотря где я мимопроходил, а где нет. Я сразу написал, что:> Соответственно, если хорошо знаешь пыху и плохо ноду - бери пыху и читай, как готовить или бери и то, и то и используй ноду как прокси, нормальное решение. Если опыт примерно никакой и там, и там, то бери ноду, будет попроще.Надо писать на том, что знаешь, потому что всё что угодно можно сделать на каком угодно языке на самом деле. Вопрос в затратах, а потратишь ты меньше там, где ты уже разбираешься.
Суп, жвач. Помоги дурачку, чот я где- то обсераюсь (вирт. серв мне даже говорит, где), не могу понять, как фиксить и куда исправлять. Помогай, прошу.При вводе числа и нажатия на кнопку происходит целое ничего.
>>1524769Оно очевидно не приходит, поэтому на 19 строке у тебя вываливается первый нотис, в $_POST нет поля 'number'.Из-за этого в $var тебе пишется null, после чего ты на 33 строке пытаешься сделать echo $array[null], а ключа null в этом массиве очевидно нет. Вот тебе и второй нотис.
>>1524778Посмотри внимательно на свой инпут на 8 строке. Очень внимательно. А лучше возьми инпут мыла из формы ответа двача и сравни со своим
>>1524783В форме двача тип - текстовый, параметр value пуст (тут- то я и проебался, кажется), есть имя.Изменил свой инпут:type="int" value = "3" name="name" (3 для тестов)Так же $post указал name.На странице из строки пропал number, но все так же указывает на две ошибки, только теперь в 19 строке написано:Undefined index: nameЧЯДН, анон?
>>1524822>array (size=1)> 'butt' => string 'Результат' (length=18)Как я понял, он взял последнее, что в него заносили, а первое не успешно забыл нахуй. Я прав? Как тогда сделать два POST запроса, чтоб они не перемешались? Или тут лучше поочередно делать ГЕТ и ПОСТ?
>>1524835Аноны, я уже перепробовал многой хуйни, не знаю, как это выполнить. Я совсем дурак, блять, что ли?
Вопрос по четвёртой симфонии.Шаблон твиг всегда задействуется через метод render?Разбираю чужой код, через поиск по директории не нахожу имена некоторых твиг-шаблонов.
>>1525031Нет, есть еще аннотация @Template в контроллерах.>>1524769Тебе стоит изучить формы в HTML. Набери в гугле "HTML5 формы" и прочитай первые 10-20 результатов. А только потом возвращаться к PHP.У тебя input находится вне формы, и не имеет атрибута name. Потому он не передается при отправке формы.Если ты знаешь английский, то можешь рискнуть почитать информацию про порядок отправки формы в стандарте HTML. Текст сложный, но зато максимально подробный, стоит хотя бы полистать: - https://www.w3.org/TR/html52/sec-forms.html#configuring-a-form-to-communicate-with-a-server- https://www.w3.org/TR/html52/sec-forms.html#forms-form-submissionЕсли ты не побоишься осилить стандарт (пусть даже не с первой попытки), то ты можешь стать грамотным разработчиком. Вот, как ты можешь увидеть, какие данные отправляются на сервер: открой свою страницу в браузере, затем нажми F12 (инструменты разработчика) и открой там вкладку Network, заполни форму, отправь ее и ты увидишь строчку с запросом в инструментах. Нажми на нее и посмотри детали запроса, какие поля с каким содержимым в нем содержатся. Сделай это, чтобы в следующий раз ты мог бы приложить скриншот этих данных, а не гадать, что именно там отправилось. Также, в строке 19 ты делаешь ошибку. Массив POST может быть пуст, и обращение к несуществующему полю выдает ошибку. Так быть не должно, надо проверять наличие элемента в массиве перед тем, как что-то с ним делать.
>>1524835Нет, неправ. POST отражает содержимое тела присланного браузером POST-запроса. Подробно, как именно формируется массив, описано в документации PHP: - https://www.php.net/manual/ru/language.variables.external.php- https://www.php.net/manual/ru/reserved.variables.post.phpСтандарт HTML описывает, как POST-запрос формируется браузером, а эта документация - как его разбирает PHP. Не ленись читать документацию.Если ты плохо знаешь протокол HTTP (почему?), то в помощь мой недописанный урок: https://github.com/codedokode/pasta/blob/master/network/http.md>>1524488Про скобки в мануале описано тут: https://www.php.net/manual/ru/about.prototypes.phpЕсли ты хочешь документировать свои функции, используй стандарт phpDoc: https://ru.wikipedia.org/wiki/PHPDocОн позволяет тебе сгенерировать "мануал" из своего кода. Вот пример мануала из кода Симфони:- мануал https://devdocs.io/symfony~2.8/symfony/component/httpfoundation/request- код https://github.com/symfony/symfony/blob/2.8/src/Symfony/Component/HttpFoundation/Request.phpТакже, можно попробовать использовать IDE с автодополнением (они, кстати, тоже умеют читать phpDoc).
>>1524302 Проще всего на сервере просто игнорировать их. Так как хакер может отправить форму с любым набором полей независимо от того, что ты напишешь в HTML.>>1524327 С файлами надо проверять расширение, чтобы тебе не загрузили index.php или .htaccess, сделать белый список разрешенных расширений. Либо самому выбирать им имена при сохранении. >>1524153 > бы, если бы не знал ноду, поднял бы её рядом с самым обычным php запущенном через php-fpm, чтобы держала сокеты и слала http-запросы в пхпНафига? Уже есть nginx, который это умеет делать. Хотя, если цель именно максимальная производительность, то стоит смотреть на Го или Си++. Нода ведь тоже интерпретируемый язык, и скорость выполнения кода на ней будет одного порядка с PHP. Откуда этот миф, что якобы Нода быстрее? Нода используется там, где есть много малоактивных запросов (уведомления по веб-сокетам). Если надо обрабатывать огромное число запросов в секунду, я не уверен, что у нее есть значительные плюсы перед PHP. Хотя это лучше проверять тестами.Могу сказать, что Си, например, применялся для высокопроизводительных сетевых демонов во Вконтакте. за исходниками можно пройти на Гитхаб: https://github.com/vk-com/kphp-kdb> Нода архитектурно заточена под неблокирующие операции, а php-нет. Потому, что, внезапно, большинство бизнес-логики это последовательные действия в стиле найти пользователя, найти купленные им товары, найти рекомендации к ним итд. И последовательный код писать гораздо проще и удобнее.
>>1524058> операции над большими даннымиОперации над большими данными и "реалтайм" плохо сочетается.>>1523903Логика CMS в том, что если тебе нужен еще один блог или форум, то незачем писать его код с нуля. >>1523788> почему на такую то задачу потратил час вместо 15 наносек?Бегите оттуда, если у вас есть варианты получше, если нет, то развивайтесь, чтобы они появились.>>1523738> кидать (ну или платить 500 рублей, что одно и тоже).Нет, не одно и то же.>>1523306Ты можешь почитать и сравнить с другими курсами.
>>1523127Если ты хочешь что-то делать на вордпресс, то нужно знать верстку, знать PHP, изучить документацию по написанию тем и плагинов под Wordpress, его API, почитать статьи вроде "20 лучших плагинов для вордпресс", чтобы не изобретать уже написанное, почитать статьи вроде "20 лучших тем на вордпресс". >>1523056 Ты не привел пример кода, который вызывает эту ошибку. >>1522954 Решено верно. Если вдруг у тебя ощущение, что ты что-то не понял до конца, можно попросить задачу по теме. Вот, если интересно, полезная задачка на циклы: Простое число - это число, которое делится только на 1 и на само себя. Примеры простых чисел: 2, 3, 5, 7, 11. 4 не является простым, так как делится на 2. 9 не является простым, так как делится на 3. Напиши программу, находящую все простые числа от 1 до N и определи с ее помощью все простые числа меньше 100.Проверить, делится ли x на y, можно оператором взятия остатка от деления %: $rem = $a % $b; Если остаток равен нулю, то a делится на b, а если не нулю, то не делится. Простое число делится только на 1 и само себя и не делится на все остальные числа.Если сразу решить слишком сложно, можешь начать с более простой задачи: дано целое число, определи, простое оно или нет.Также, можешь показать код и попросить подсказку.
>>1522599 Для начала стоило бы что-нибудь написать в README, а то трудно понять, что к чему.>>1522009 Наследуются только однотипные сущности (вроде "Банк наследуется от Организация" или "Танк наследуется от СредствоПередвижения"). Так как Банк - это Организация, то мы можем не создавать класс Банк с нуля, а взять за основу Организацию и расширить ее.Например, у Организации есть поля "директор", "форма собственности", "ИНН". А Банк наследует эти поля и добавляет к ним "номер лицензии".То есть если класс A наследуется от B, то A - это улучшенная, уточненная, доработанная версия B. Банк - это Организация. Поэтому мы можем передать объект Банка в функицю, которая ждет на вход Организацию и поэтому мы можем использовать наследование. У сотрудника и отдела нет ничего общего. Сотрудник это не Отдел, Отдел это не Сотрудник. Следовательно, наследование здесь не применимо. Мы можем уволить Сотрудника, но не можем уволить Отдел. Мы можем добавить Сотрудника в Отдел, но не можем добавить Сотрудника в Сотрудника.>>1522159 В Департамент можно добавлять Сотрудников. В Департамент можно назначить боссом Сотрудника. В Департаменте можно поменять босса. Из Департамента можно уволить.
>>1522336Ты используешь twig? Встроенный шаблонизатор Laravel? Там есть способ выводить контент без экранирования спецсимволов.Только тогда ты должен фильтровать HTML перед вставкой в БД, по белому списку разрешенных тегов и атрибутов, а то тебе добавят на сайт вредоносный скрипт например или редирект на какой-то другой сайт. Для фильтрации можно использовать HTML Purifier.>>1522353 Ты видимо не знаешь. Маркдаун поддерживает вставку произвольного HTML. Конверторы BBCode часто написаны на регулярках и уязвимы к вставке произвольного HTML.Что касается мобильных приложений, то в чем разница между HTML и маркдауном при написании кастомного вью? HTML парсить будет проще, чем маркдаун.>>1522354Красный текст можно сделать и в HTML, и в markdown.>>1522342Уже есть HTML purifier.
>>1525063> Нода ведь тоже интерпретируемый язык, и скорость выполнения кода на ней будет одного порядка с PHP.Удивлю, но нода будет быстрее. V8 под капотом делает дохера всяких оптимизаций.Плюс, на ноду можно воткнуть socket.io, который предоставляет удобную программную обёртку вокруг вебсокетов.
>>1525067Суть в том, что если хранить в бд формат html, то данные можно отображать только на веб-страницах.Если тебе нужен raw-text, если тебе нужно отображать через нативные элменты ифона, а не вебвью, то при попытке конвертировать html в это, ты похеришь всю разметку. Тот же bbcode конвертировать в это куда проще (за счет скромного количества тегов). Проблема не в красной кнопке в целом, а в том, чтобы была возможность ее отображать корректно всегда.Про HTML Purifier:>Если вырезать все эти script, onclick и так далее, то можно так же с веселым гиканьем испортить текст юзверу>никак>HTML Purifier>script, onclickты не прав> >>1522342> Уже есть HTML purifier.я не прав
Привет, котики. Вкатился к вам с вопросиком: если у меня уже есть база и я хочу прикрутить к ней Доктрину, мне генерить энтити генерилкой (чё-то к ней даже документации нет и 1.5 примера 7 летней давности) или так никто не делает и пишут и аннотируют энтити вручную?К слову, хоть база и на mysql, но она в очень не нормальной форме и внешние ключи там отсутствуют, хотя поля для ссылок таблиц на примари ключи других таблиц есть, но они не оформлены как внешние ключи.У меня есть либа для работы с одной старой базой, я хочу сделать новую версию этой либы, в которой будет ОРМ, шоб не писать вручную классы и sql код.
>>1525060>Нет, есть еще аннотация @Template в контроллерах."@Template" тоже нигде не нашлосьКстати, забыл уточнить, что тот шаблон используется для генерации письма, а не страницы. Письма отправляются через некий "soa-mailer" (параметры для генерации передаются через curl).https://symfony.com/doc/current/mailer.htmlНагуглил ссылку выше, но ничего подобного в коде тоже не нашлось.
А это нормальная практика устанавливать права 777 для папки var/www в линуксе, чтобы удобно в IDE работать? Или можно как-то поизящнее сделать? Только поставил линукс, разбираюсь.
ОП, проверь плиз.Вектор Часть 2: https://ideone.com/xKNNMfДумаю кидать старый нет смысла, т.к. там не было удобных методов для манипуляции со штатом сотрудников и была мешанина кода.Вопросы:Например, в классе есть метод, который что-то сортирует и принимает определенный флаг - например, DESC и это константа. Дак вот куда их лучше помещать? В класс или вынести в самый верх и определить через define() ? Я поместил в класс. Например: $collection->sort(Collection::RANK). Не слишком громоздко получается?
Если что, я не ОП.>>1525406Если это компьютер чисто для разработки, то почему бы и нет.>>1525568Не знаю, знаешь ты или нет, но если нет, то тебе нужно изучить вопрос, как в Объектно Ориентированном Программировании ветвления (if-ы, switch-и) заменяются полиморфизмом. Не в смысле что-то сейчас переписать, а просто понять это как идею.
Как вы считаете - стоит ли выносить в сервис один метод из контроллера? Под этот метод подтягивается библиотека. Стоит ли убирать в отдельный класс?
>>1525743Заодно спрошу - есть ли смысол на Актив Рекор делать репозиторий, чтобы работа в БД в том же контроллере не болталась, раз уж такая пьянка с сервисами у меня пошла?
>>1525743Вкратце - да, можно контроллер разбить на маленькие классы-операции, каждая из которых делает что-то своё. Это нужно для того, чтобы гибче управлять зависимостями для каждой такой операции.>>1525748Репозиторий в первую очередь содержит точные методы по работе с базой данных. Например, вместо Find().Where().OrderBy() репозиторий будет содержать метод "FindUsersByArticles" и внутри такого метода можно использовать active record. Это не идеальное решение, но всё равно лучше, чем голые запросы прямо в бизнес-логике.
>>1525748Есть конечно, у тебя все запросы будут в одном месте для каждого кейса. У меня только проблема была с жадной загрузкой, было несколько почти одинаковых кейсов, только нужно было грузить разные отношения. Я потом просто возвращал сам объект квери билдера и явно вызывал get(), чтобы если что, то можно было врезаться и подгрузить что нужно. Не идеально, но работает.
>>1526736>Не идеально, но работает.Где-то читал, что небольшая избыточность кода на рабочем проекте вполне норм и даже благо.
А как сделать постоянно работающий из командной строки скрипт? Через вечный цикл while (true)? Вот я хочу, чтобы раз, допустим, в час он что-то чекал в интернете и меня каким-нибудь образом оповещал.
>>1527787Оповещение тебе нужно писать самому.Например, можешь настроить отправку почты со своего сервака.Настрой ssmtp, а отправлять будешь из php чем-то типа shell_exec("sendmail ....Намана работает, я себе довольно давно сделал такой костыль.Если постоянной работающий - это 1 раз в час, то открываешь файл /etc/crontab и добавляешь подобную строчку. В часу 60 минут (0, 1, 2, .... 58, 59) и ты просто первой цифрой задаешь на какой минуте выполнять скрипт, соответственно, он будет выполняться каждый раз когда на часах будет эта минута (то есть каждый час).
Я в кроне не силен, но если не ошибаюсь, то при правильной настройке почты в Linux, тебе крон сам может отправлять письма, в теле которых будет вывод stderr твоей команды. Типа это задумано чтобы админ напихал всякой лабуды в крон, и если какая-то команда сфейлится и выведет ошибку в stderr, этот вывод автоматом отправится админу на почту.
Я сейчас ебнусь, почему nginx хер настроишь на локалке? Вроде все так же, как и с апачем - но нихуя не работает
Типа, я создаю картинку с колонками большого размера, из-за чего у меня получаются колонки на сайте, которые в %соотношение могут раздвигаться в зависимости от размера окна браузера? >>1528524
>>1528359Потому что не разбираешься. И nginx, и апач - довольно простые штуки, проблемы гуглятся и нормально решаются.И у обоих, кстати, на редкость мерзотный синтаксис конфигов.
>>1528594>на редкость мерзотный синтаксис конфиговВпервые вижу своё мнение высказанное кем-то другим.Как ни начну конфигурить, так жопа горит. Ну неужели нельзя было сделать проще? Это же сраные настройки программы и нефига тут свой ЯП городить с регулярками, которые больше нигде не нужны.
>>1528752Потому что лет 15 обоим (апач даже старше), чем дальше в прошлое - тем больше всё не для людей. Приходилось на работе сталкиваться с программистами "за сорок", это пиздец, чего они пишут. С ужасом представляю, что когда-то кто-то так скажет про мой код за пределами /pr
>>1523056Наверное поздно отвечаю, анон. Во-первых посмотри, есть просто твиг, а есть твиг специально для слима, он называется твиг\слим. Может в этом ошибка. И юзай третью версию слима, четвертая у них в разработке я так понял, она еще сырая
так аноны, сначала писал в питон треде теперь пишу тут. изучал несколько полгода питон и джангу чтобы на джуна вкатиться, в результате нихуя не выходят тк нужны только мидлы и сеньоры, в то время как на пыхе дохуя вакансий в моем зажопье. так вот вопрос что стоит делать то мне сейчас и в каком порядке чтобы освоить пхп и ларавель? пока что начал с официального мануала чтобы понять синтаксис самой пхп
>>1529294>что стоит делать то мне сейчас и в каком порядке чтобы освоить пхпУчить пхп.>и ларавельУчить пхп и ларавель.Очевидно же.
>>1529349Поддвачну, сначала читаешь мануалы и бест практики по пыхе, потом по ларе. Потом делаешь два-три пет-проекта, параллельно перечитывая бест практики. Потом ищешь работу. PROFIT
>>1529353> два-три пет-проектану то есть по классике пилить свой бложик и потом свою имиджборду и идти проситть на собесах на джуна, так?
>>1529419По сути - да, как и везде. На собесах можешь показывать тестовые, рассказывать, что и как делал (советую, как сделаешь, попоказывать эти тестовые знающим людям и поспрашивать фидбек/подопиливать, чтобы по красоте было, заодно и разберёшься лучше)
>>1528850Я не думаю, что дело в возрасте, а скорее в навыках.>>1528752У Апача, может быть, не самая простая документацию, но в нгинксе-то что сложного? Там даже документация на русском. Можно взять в ней пример простого конфига и прочитать описание каждой директивы из него.И что не так с регулярками? Они много где используются и ты должен их знать. >>1528524Первый раз слышу такое слово. Гугление, впрочем, выдает какие-то результаты.>>1528359 В нгинксе, как и в Апаче, есть полезная функция проверки правильности конфига. Можно ей пользоваться. Плюс, если что-то не работает, то можно включить подробные логи и смотреть по ним, что именно не так.>>1527787Если вдруг тебе понадобится именно постоянная работа, а не по расписанию, то пишется скрипт для командной строки, и из него делается сервис - программа, работающая в фоновом режиме. Для этого пишется systemd юнит, который будет запускать твою программу при старте компьютера, собирать ее вывод в логи, а также перезапускать при падениях.
>>1525743Смысл сервиса в том, чтобы вынести в него какую-то бизнес-логику, которую можно будет повторно использовать (вызывать из другого места программы) и которая не связана с обработкой параметров запроса или формированием ответа (это задача контроллера). Ну например, функция простановки лайка комментарию: class LikeService {public function addLike(User $user, Comment $comment) {}}При этом разбор запроса пользователя, копание в GET/POST/COOKIE, формирование ответа - это задача контроллера, который подготавливает данные и вызывает нужные методы сервисов. Сервисы не занимаются взаимодействием с пользователем. Другой пример - методы для проверки правильности комментария и его добавления: class CommentService{public function validateComment(Comment $comment) {}public function insertComment(Post $post, Comment $comment) {}}Если что, у меня это расписано в уроке по MVC: https://github.com/codedokode/pasta/blob/master/arch/mvc.md>>1525748 Считается, что Репозиторий - это объект, который абстрагирует коллекцию записей и содержит методы для работы с ними. Я не очень понимаю, в чем смысл создания Репозитория, если в Active Record методы работы с БД помещаются в модель. Вот опсиание паттерна: https://martinfowler.com/eaaCatalog/repository.html> A system with a complex domain model often benefits from a layer, such as the one provided by Data Mapper (165), that isolates domain objects from details of the database access code. In such systems it can be worthwhile to build another layer of abstraction over the mapping layer where query construction code is concentrated. Тут речь про использование Data Mapper, а не Active Record.
>>1525568> define("MANAGER", "manager");В новых версиях можно и стоит писать const X = 1;> class CollectionExceptionНе очень удачное название, так как оно не отражает суть ошибки. Обычно исключения называют: InvalidArgumentException, IOException, DivideByZeroException, по сути ошибки, а не по месту возникновения. Некоторые полезные исключения уже есть в составе PHP и ты можешь их использовать: https://www.php.net/manual/ru/spl.exceptions.phpВ твоем случае подошли бы InvalidArgumentException, InvalidClassException и тд.> final public function setRank(int $rank):bool {> ...> return false;Тут лучше использовать исключение, так как трудно представить ситуацию, где нужно разрешить передавать неправильный ранг. Для комментариев к функциям стоит осваивать phpDoc: https://ru.wikipedia.org/wiki/PHPDoc> class Collection> private $method;> private $sortFlag;Вот это странно. С какой стати порядок сортировки является свойством коллекции? Она как-то сохраняет этот порядок при любых операциях? Судя по коду, нет. Зачем тогда это сделано свойством объекта? В моем представлении, коллекция это просто набор сотрудников, и единственное ее свойство - массив сотрудников. Или я ошибся? Если тебе надо было передать способ сортировки в коллбек для usort, то логичнее было использовать анонимную функцию (прочитай про них): usort($this->employees, function($a, $b) use ($getter) { return $a->$getter() <=> $b->$getter();});Соответственно, setMethod будет не нужен.> const ASC = 1;//сортировка по возрастаниюСтоит добавлять константам префикс, чтобы разные по назначению константы не смешивались в кучу: const ORDER_ASC = 1;...const FIELD_RATE = 4; (или SORT_BY_RATE)...В других языках для группировки констант есть тип Enum (перечисление), в PHP пока его не завезли, и некоторые делают отдельные классы вроде FieldNames, состоящие только из констант (и есть базовый класс для этого: https://www.php.net/manual/en/class.splenum.php , а также сторонние классы: https://stitcher.io/blog/php-enums). Хотя в большом приложении это приводит к избытку классов и я так не делаю.Также, вместо цифр можно использовать слова, например const FIELD_RATE = 'rate';> public function __construct(Employee ...$employees){Не уверен, что есть смысл так делать, можно упереться в какой-нибудь лимит на количество аргументов. Тут логичнее передавать массив.> public function sort(int $sortProperty, int $sortFlag = self::ASC):Collection Тут по описанию можно подумать, что sort возвращает новый объект, но это не так, она меняет текущий объект. Тогда логичнее указывать тип результата как void, и не ввожить в заблуждение.return ... call_user_func(function(){ throw ...Это какое-то извращение. Тут надо просто использовать if: if (!usort(...)) {throw new LogicException(...);}В функции sort() можно убрать все блоки else и сделать код проще.> public function select(int $property, $value) {По моему, не очень удачно спроектированный метод. Мне кажется, условие отбора удобнее задавать анонимной функцией аналогично array_filter (прочитай про нее). Так будет гибче: $coll = $coll->select(function ($e) { return $e->getRank() < 3; });А благодаря стрелочным функциям ( https://stitcher.io/blog/short-closures-in-php ) в PHP7.4 можно будет писать$coll = $coll->select(fn ($e) => $e->getRank() < 3);> if (empty($selectedEmployees)) {> throw new CollectionException("Элементы не найдены!\n");Не вижу тут повода для исключения, пустой результат поиска это не ошибка, а нормальное состояние.> public function takePercent(int $percent):Collection {Эта функция слишком специфичная, и я не вижу смысла добавлять ее в класс коллекции. Логичнее было бы добавить метод "взять X сотрудников, начиная с Y" и это был бы метод, который был бы более универсальным и пригодился бы в будущем для другий ситуаций. По умолчанию для Y можно поставить значение 0.> extractEmployees(int $number = self::ALL) {> const ALL = 3;//все копииА как тогда извлечь 3 сотрудников? Надо либо ставить значение вроде -1, либо использовать встроенную константу INF (бесконечность: https://www.php.net/manual/en/math.constants.php ), получается красиво, но она имеет тип float, а не int.> public function extractEmployee()Логичнее extractFirst.> public function extractEmployees> } elseif($number == 1) {> return $this->extractEmployee();Это плохая идея, возвращать разные типы данных (массив сотрудников или одного), так как вызывающий код придется усложнять. Нужно всегда возвращать один и тот же тип, например, массив, даже для 0 или 1 сотрудника.> public function fireEmployees(Collection $collection){> if ($realEmployee == $sample) {А вот тут проблема. Сравнение по == сравнивает поля объектов, а по === идентичность (читай мануал). Тебе скорее всего нужно проверять идентичность, но из-за клонирования в extractEmployees это невозможно. В итоге, твоя функция удалит не те объекты, которые требуется. > public function createEmployee(> public function changeEmployees(Collection $collection, int $property, $value){Тут наверно тоже имеет смысл использовать коллбек. Тогда UPRANK/DOWNRANK будут не нужны, а код станет проще.> public function backup(){> public function restore(){Думаю, это не нужно, так как можно просто клонировать компанию целиком оператором clone. В padRight/left логично возвращать не false, а обрезанную строку.> } catch(CollectionException $e){> continue;Ты игнорируешь ошибку и скрываешь информацию о ней, что может затруднить отладку. Это из-за того, что ты выбрасываешь исключения тогда, когда никакой ошибки нету.> } catch(DepartmentException $e){> echo $e->getMessage();> exit();Это не требуется, по умолчанию и так выводится текст исключения и завершается программа.> $department->changeEmployees($highRankAnalyst, Collection::BOSS, true);Логичнее было бы сделать метод replaceBoss(). Который сам найдет и разжалует старого босса.В общем, программа требует доработки, упрощения и улучшения кода.> Например, в классе есть метод, который что-то сортирует и принимает определенный флаг - например, DESC и это константа. Дак вот куда их лучше помещать?Можно в класс как ORDER_DESC. Можно и как глоб. константу, или даже сделать класс-enum, если это используется во многих классах.> Например: $collection->sort(Collection::RANK). Не слишком громоздко получается? Нет.
>>1525406Не особо. Можно было бы поменять права на папку на себя, поставить 755 и запускать веб-сервер от своего имени.>>1525403В крайнем случае можно в шаблон поставить выброс исключения и по стек трейсу посмотреть, откуда оно вызвано. >>1525184 Один из вариантов писать Entity и по ним генерировать миграции, другой - писать миграции руками.>>1525101> Тот же bbcode конвертировать в это куда проще (за счет скромного количества тегов). Для BBCode тебе придется писать свой парсер для преобразования в абстрактное синтаксическое дерево. Для HTML парсеры уже есть (а также есть XSLT для преобразования в BBCode, json или любой другой формат). Если ты не используешь инлайн CSS стили, а только теги и предопределенные классы, то это может быть проще. Причем парсеры HTML, скорее всего, можно запускать прямо на устройстве.>>1525092Но Вконтакте писали свои демоны на Си, а не на ноде, Гугл использует Го, а не ноду.
>>1529503ну видимо так и сделаю. единственное что сейчас пока трудно - представлять как это все реализовывать и переключиться с логики питона и джанго на пхп
>>1529537> Но Вконтакте писали свои демоны на Си, а не на ноде, Гугл использует Го, а не ноду.Ну это такой себе аргумент, на самом деле. Вконтакте может себе позволить нанять взвод сишников, чтобы написать и поддерживать свой протокол поверх сокетов + сервис под это дело.Гугл тем более (и да, до недавнего времени в мире го с вебсокетами всё было слегка грустно - общаться можно, а нормальных библиотек нет).Сокет.ио с нодой же работают максимально просто, воткнул - заработало. Сразу есть подписки, ack/nack'и и прочие радости. Для мелокого и среднего бизнеса максимально удобно.
>>1528986>>1529533В том и проблема что ошибок не вижу. nginx -t показывает ОКsystemctl status nginx показывает ОКНастроил конфиг (Взял с Yii2 доков и поменял рут с доменом). Линканул в site-enables. Выдает 502 gateway. https://ideone.com/H6JCgp Вот конфиг.Fpm работает нормально. Возможно его тоже где то настроить нужно?
>>1529754Если 502 - надо смотреть логи нгинкс и логи php-fpm (так как может быть проблема в последнем). По моему, нгинкс выдает 502 когда fpm превышает таймаут ответа. Скорее всего ответ будет в логах php-fpm или PHP.Конфигурация логов в нгинкс (первая ссылка в гугле) https://docs.nginx.com/nginx/admin-guide/monitoring/logging/
>>1529883https://www.digitalocean.com/community/questions/nginx-error-111-connection-refusedПомогло это. Изменить listen на 127.0.0.1:9000
>>1529535>Смысл сервиса в том, чтобы вынести в него какую-то бизнес-логикуНу так я для этого и спрашивал - делаю хостинг файлов и хочу попробовать на тонких контроллерах.Сделал UploadsManager для содержания логики, который используется в 2х контроллерах: в 1 - сохраняет файл в нужном виде через другой сервис внешней библиотекой генерит или назначает миниатюру, и во 2 - отдаёт полный путь по имени из БД, в своём хранилище. Так норм?>Я не очень понимаю, в чем смысл создания Репозитория, если в Active RecordСмысл в том, чтобы убрать работу с сущностями из контроллера. Можно конечно просто в метод контроллера это всё убрать.
ОП и Компания, проверьте пожалуйста мой "Вектор". Не могу подступиться к антикризисным мерам. Может что то делаю не так и нужно сделать код более универсальным. Я так понимаю чтобы отсортировать всех инженеров нужно юзать usort, а как писать пользовательскую функцию для нее без понятия. Да и после сортировки это нужно потом с помощью slice вырезать 40% инженеров чтобы проводить дальнейшие манипуляции, а как резать то? на какую длину? как посчитать скоклько у меня инженеров работает в департаменте? count считает всех работников без учета профессии. В общем я хз куда плыть =(p.s знаю что нужно еще создать класс компания, клонировать ее и заприватить в классах все что можно. но как резать инженеров ума не приложу.https://3v4l.org/MgNH3
Создан: >div ="extras"в нём лежат: ><a href> линкиСделано так, чтоб НЕ менять все линки на странице, а только вложенные в экстрас. Как мне их выбрать? Пытался:>#extras > a>#extras a Но оно не работает так.Как решить проблему/что делать?
Я знаю, что там ещё много способов вложения всякого говна, не только div, но я их всех забыл, может быть надо что-то другое использовать... >>1530204
>>1530252Если делать нехер, то конечно можно. Есть нормальная книжка по 7пхп для новичков. Но по пастам ОПа быстрее будет
>>1530294Ну, еще плохого и старого нахватаешься. Я бы наоборот старался от легаси говна подальше, особенно в пхп
>>1530252не слушай. Посты ОПа такая себе тема. Оно не для начинающих и не совсем о том, что нужно.Найди универсальную книгу по пхпкссджаве и прочитай её. После чего отдельно новые книги последних годов, актуальные по всё той же пхпкссджаве.
Аноны, захотел тянуть данные с API кладр (улицы-адреса, все это). Понял что нихуя не понимаю как это сделать.Как из серваке из метода обработчика роута отправить запрос на сторонний сайт?Исходящие данные я так пони нужно обернуть в JSON и отправить POST. А чем отправлять то?
Сап двощь, делал кто систему для генерации картинок разных размеров из какого-то источника? Например я загрузил картинку обложку, и мне для приложения нужна эта картинка в определенном уменьшенном размере. Есть два стула как я понял. Первый это при первой загрузке картинки все размеры из какого-то конфига создавать, из плюсов можно сразу в какое-то хранилище выгрузить и не нужно локально хранить файлы. Не уверен правда стоит ли в бд хранить инфу о всех сгенеренных размерах или только одну запись о картинке а дальше по какой-то конвенции имя генерировать, например image255x255.png или может вообще как в бутстрапцсс сделать xs md lg чтобы отвязаться от конкретных размеров. Из минусов, если вдруг в конфиге добавить новый размер то надо как-то или перегенерировать все другие картинки, или просто по умному самую близкую по размеру отдавать, вот тут неясно.Второй стул это генерировать лениво и по запросу, пока что не знаю как это сделать для картинок которые хранятся в облаке, для локальных картинок можно было бы file_exists делать или просто хранить в бд все размеры уже готовые. Еще тут проблема когда два запроса одновременно поступают а картинка миниатюра еще не сгенерена, и нужно придумать какой-то лок механизм чтобы скрипты несколько раз одно и тоже не делали, в общем сложнаа
Аноны, есть свойства. Я хочу чтобы после каждого извлечения свойства выполнялся метод класса. Как это сделать, если не вручную? Что то на подобие __set()
>>1530528А я вообще ни одной не прочитал - вначале лекции смотрел и задания делал, потом местные задачки и статьи всякие читал на хабре. Вроде и без книжек нормально понимаю ООП, паттерны, протокол и jQuery его вообще по документации изучал - изи же.Так что на любителя все эти книги.
В гайде вскрывается тема деревьев, алгоритмов и тд? Есть пастта как лучше это изучать и на сколько оро вообще требуется?ньюфак
двач, выручай - хочу готовый скрипт формы заявки на php, который хранит заявки в базе данных. Гугл мне дает только мусор с отправкой формы на почту.можешь накидать линков или хотя бы как гуглу объяснить что мне не надо формы на почту, мне надо формы с их хранением в базе данных
двач помоги, в гугле нет нихуя.ловлю хуйню когда пытаюсь подключиться в виде: Call to undefined function mysqli_connect()при этом сервак сам пишет: Веб-серверApache PHP расширение: mysqli, curl, mbstringВерсия PHP: 7.1.32в чем проблема блять?
>>1530693качал ласт версию опенсервера под шинду если что. сама дб не пустая и содержит данные. в инете везде ттолько хуита под бубунту
Год назад сделал сайт на laravel 5.7, попутно его освоив процентов на 10. Помню, что учился по ютубу и раздражало, что курсы для старых версий и постоянно что-то не работает. Вроде всё по инструкции - но не работает. И часами выискивать, что же и где нужно поправить под текущую версию.И вот снова предстоит использовать Laravel. А он, собака, уже 6.5. Скажите, сильно он с 5.7 изменился? Уроки для какой версии уже можно использовать?
>>1530725Вместо проверки самого соединения, проверяй ошибки, нихуя не понятно же. А так, лучше используй pdo, потому что mysqli говно мамонта.if (mysqli_connect_errno()) { printf("Не удалось подключиться: %s\n", mysqli_connect_error()); exit();}
Добрый день, господа. На днях пришлось сделать мини-сайт на опен сервере с формой авторизации/регистрации. В инете натыкался на инфу, что стоит проверять роль пользователя по миллиарду значений из бд, я же сделал проверку по 1 значению в 1 таблице и все работает корректно. В чем моя ошибка или в чем смысл создания миллиарда столбцов в нескольких таблицах бд для проверки определенной роли пользователя? Как вы можете понять, я новичок, так что не пиздите ссаными тряпками. Заранее спасибо
>>1530638так-то принцип я понимаю, но... надо полноценный пример а не: "вот вам две строчки, а теперь ебитесь сами со всякими мультибраузерами, кодировками, платформами, проверками, безопасностью, etc"Может все таки кто подскажет - как нагуглить решения для публикации заявок с их хранением в базе данных и привязкой к пользователям. А то что мне гуглпомой предлагает только формы с отправкой на почту и упорно не хочет искать по другому
>>1530726>>1530838Он на semver перешел, удалили может какие-то депрекейтед методы а так ничего не поменялось
>>1530845>"вот вам две строчки, а теперь ебитесь сами со всякими мультибраузерами, кодировками, платформами, проверками, безопасностью, etc"В ответе на so всё написано, если тебе лень разбираться даже в этом то скачай какой-то вордпресс или используй готовые сервисы для форм. Если не лень то можешь про общий алгоритм обработки форм от опа почитать, дальше понятней станет https://github.com/codedokode/pasta/blob/master/forms.md
>>1530845>так-то принцип я понимаюВидать не понимаешь.Универсальных решений для базы данных не существует - она разная бывает, с разными полями - для разных форм. Не считая самих баз данных. Универсальная - только сбрасывать на почту.
Аноны, объясните такую вещь.Есть АПИ "https://kladr-api.ru/api.php". Я делаю формочку, в которой AJAX-ом динамически подгружаются адреса. Столкнулся с такой проблемой - не могу загрузить прямо из странички данные с этого АПИ - пишет ошибка CORS.Я в своем запросе передаю заголовок "origin : "localhost". АПИ "https://kladr-api.ru/api.php" в свою очередь в заголовках ответа мне не возвращает заголовок 'Access-Control-Allow-Origin'. Означает ли это что они отказывают во всех кросс-доменных запросах?У них есть свое джейквери приложения для, я его не смотрел, но логично что это приложение напрямую взаимодействет с сервером АПИ, и значит кроссдоменные запросы они обрабатывают. Но как же заголовок 'Access-Control-Allow-Origin'? Он по идее должен обязательно возвращаться если кроссдоменные запросы разрешены.Если я к этому АПИ отправляю запрос уже с своего сервера - то все АПИ отлично работает и данные возвращает.Или обычная цепочка работы со сторонними апи это когда форма вэб-морды отправляет запрос контроллеру на сервере, контроллер отправляет запрос на стороннее АПИ, получает ответ и возвращает его формочке обратно?
>>1530909UPDСудя по заголовкам - мне ответ приходит:General:Request URL: https://kladr-api.ru/api.php?token=htEEFRH3N7ZHdReQSthZasG&query=%D0%9A%D1%80%D0%B0&contentType=regionRequest Method: GETStatus Code: 200 OKRemote Address: 95.163.215.233:443Referrer Policy: no-referrer-when-downgradeResponseHeaders:Connection: keep-aliveContent-Encoding: gzipContent-Type: application/jsonDate: Wed, 27 Nov 2019 15:34:24 GMTServer: nginx/1.14.0 (Ubuntu)Transfer-Encoding: chunkedRequestHeaders:...Origin: http://localhost...Типа все в порядке, сервак ответил. Но в консоли две ошибки:1."Доступ к данным выборки в 'https://kladr-api.ru/api.php?token=&query=%D0%9A%D1%80%D0%B0&contentType=region' от источника 'http://localhost' был заблокирован политики CORS: нет 'Access-Control-Allow-Origin' заголовка у запрашиваемого ресурса. Если непрозрачный ответ удовлетворяет вашим потребностям, установите режим запроса на "no-cors".2.Cross-Origin Read Blocking (CORB) blocked cross-origin response https://kladr-api.ru/api.php?token=&query=%D0%9A%D1%80%D0%B0&contentType=region with MIME type application/json. See https://www.chromestatus.com/feature/5629709824032768 for more details.Блокирует потому что ответ - application/jsonСтавил "no-cors" - данные приходят - но не читаются, и это поведение стандарта.Короче браузер блочит ответ сервера.Как обойти такое поведение браузера?
>>1530909> АПИ "https://kladr-api.ru/api.php" в свою очередь в заголовках ответа мне не возвращает заголовок 'Access-Control-Allow-Origin'. Означает ли это что они отказывают во всех кросс-доменных запросах?Да.> Или обычная цепочка работы со сторонними апи это когда форма вэб-морды отправляет запрос контроллеру на сервере, контроллер отправляет запрос на стороннее АПИ, получает ответ и возвращает его формочке обратно?Да. таким образом ты не раскрываешь посетителям свой токен (который ты тут уже раскрыл, так что придется его менять).Ты также можешь глянуть исходники их jQuery плагина и увидишь, что они используют jsonp: https://github.com/fias-api/jquery/blob/master/src/js/core.js#L149Погугли, что это такое. Это старая технология кросс-доменных запросов, существовавшая до CORS.
>>1530985Ок, спасибо большое. Возникла трабла - я отправляю аякс на сервак, контроллеру. Но сервер мне возвращает 405 Method Not Allowed. Отправляю методом POST.Севрер - апач.Как поправить?
Посоны, когда с помощью fetch отправляешь post запрос на сервер - то данные которые в секции запроса body - они будут в $_POST находиться?А то я отправляю ajax а в ответ пустота.Юзаю slim 3, и если воспользоваться его методами:$data = $request->getBody();$r = $data->getContents();print_r($r) ;То возвращает то, что я отправил сто странички.
>>1531246Открой инструменты разработчика (F12) на вкладке Network и отправяь запрос. Посмотри вид запроса в инструментах разработчика, обрати внимание на заголовок Content-Type в запросе и на вид тела запроса и по ним определи, какой способ используется.Для справки, "стандартные" способы кодирования данных описаны тут: https://www.w3.org/TR/html52/sec-forms.html#selecting-a-form-submission-encoding но это довольно сложно читать.PHP принимает в _POST только application/x-www-form-urlencoded и multipart/form-data.
>>1530853я ищу готовые решения, в которых бы уже было сделано 90% от данной задачи. например если мне понадобится система логина - я такое найду (и нашел) - где будет все-все, и проверка введеных данных, и управление и т.д. при этом я спокойно могу изменяя код добавлять своеВот также хочу найти по своей задаче чужое решение. а не пример который еще потом долго допиливать.
>>1531293> я ищу готовые решения, в которых бы уже было сделано 90% от данной задачи. например если мне понадобится система логина - я такое найду (и нашел) - где будет все-все, и проверка введеных данных, и управление и т.д. при этом я спокойно могу изменяя код добавлять своеЭто пиздец опасный путь. Во-первых, поставив себе такой комбайн, ты понятия иметь не будешь, что внутри есть и что оно делает. Если там есть какие-то сайд-эффекты или просто НЁХи, словишь ты их сильно потом, когда на этом решении уже будут сидеть реальные пользователи и что-то менять или править будет очень сложно и дорого.Во-вторых, универсальность достигается дорогой ценой. Любой "комбайн" для чего угодно либо заточен под определённый флоу, либо требует мощной конфигурабельности (что выливается в огромную внутреннюю сложность и ещё больше нёхов). Соответственно, вообще не факт, что ты не поставишь себе комбайн А, а потом не окажется, что он должен делать ещё какую-то маааленькую штучку Б, которая его флоу работы просто не предусмотрена. И не факт, что её можно будет впилить.Говорю на собственном опыте, я года 4 работал в компании, где изо всех сил использовали цмс-ки и прочие "уже готово же, просто установить" решения, а потом тратили дохера усилий на то, чтобы натянуть такое "уже готовое" решение на свои потребности. Так что перед установкой чего-то тебе нужно быть на 100% уверенным, что оно делает именно то, что тебе нужно и не делает того, что не нужно, иначе охуеешь.
>>1531277Спасибо.>>PHP принимает в _POST только application/x-www-form-urlencoded и multipart/form-dataЭтого не знал. Тагда куда принимается JSON, blob и прочее? В поток?
>>1531351https://ru.stackoverflow.com/questions/496065/%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC%D1%8B%D1%85-post-%D0%B2-%D0%B2%D0%B8%D0%B4%D0%B5-json
Аноны, если конвертировать видео в гиф файл, то гиф будет весить больше. В чем профит гифок? Почему я не могу выводить видео без звука?
Знаю что вопрос больше по хтмл и ксс, но все же. Есть что почитать лучше посмотреть по созданию подобных интерфейсов пикрилейтед? Интересует разбиение контента на страницы, и сортировка по дате и т.д.
>>1531754Это ни разу не css, разве что сами кнопочки. Разбиение на страницы называется пагинацией, объяснять не буду, там достаточно сложно для новичка, лучше сам почитай. А сортировка это просто строки sort asc/desc в sql запросе.
>>1531342дващаю адеквата. >>1531293 Вся суть@50% КОМПОНЕНТОВ ПОДКЮЧЕНЫ ЧЕРЕЗ КОМПОЗЕР@45% СКАЧАЛ ZIP АРХИВОМ С ГИТХАБОВ И НЕМНОГО ПОДРЕДАКТИРОВАЛ@ЧЕРЕЗ ПОЛ ГОДА ПОЛОВИНА КОМПОНЕНТОВ ТРЕБУЕТ ПХП 8.2.2@ОСТАЛЬНЫЕ НЕ МОГУТ РАБОТАТЬ С ПХП ВЫШЕ 7.0@КАЖДОЕ ДЕЙСТВИЕ ПОЛЬЗОВАТЕЛЯ СЕРВАК ОБРАБАТЫВАЕТ ПО 30СЕКУНД@В БАЗЕ ДАННЫХ 1488 ТАБЛИЦ 228 ИЗ КОТОРЫХ ДЛЯ УПРАВЛЕНИЯ ДОСТУПАМИ ПОЛЬЗОВАТЕЛЙ @МИКРОСЕРВИС НА ГО ПЕРЕСТАЕТ РАБОТАТЬ @СТОП У НАС ЕСТЬ МИКРОСЕРВИС НА ГО?!@ХОСТИНГ ПРИСЫЛАЕТ УВЕДОМЛЕНИЕ О ПОДОЗРИТЕЛЬНОЙ АКТИВНОСТИ @ОПЯТЬ CDN ЖЕЙКВЕРИ НЕДОСТПЕН
Двач это пиздец. У знакомого есть какой-то сайт на одной известной цмс, попросил посмотреть погромиста(меня) "чето долго грузится". Ну я сходу прогнал через pagespeed и остальные подобные инструменты, может там аналитика какая-то блочит рендер, так нет, сервер реально по несколько секунд отвечает при том что трафика особо нет. Зашел я значит в админку туда сюда, нашел как посмотреть какие запросы выполняются..и тут я охуел, для главной страницы выполняется 300 скл запросов, это пиздец. Любые опции и настройки хранятся в бд, и вытаскиваются разумеется не разом в память а по одной за раз. Для каждого продукта в цикле вытаскиваются характеристики, а потом при отрисовке для характеристик в цикле вытаскиваются внимание урлы этих характеристик потому что они как-то по ебанутому настрены у него. А я в своё время парился что у меня на одной странице на сайте 15 запросов исполняется.
>>1532100Ну так и стоимость мартышки с тем же вордпрессом и норм программиста сравни. Это мы тут сидим - миллисекунды считаем и за лишние запросы готовы в руки насрать, а там народ баблос рубит чтобы на дошик вечером хватило. Какая ещё оптимизация? да и архитектура там - мусор
Пасаны, подскажите как работает пользовательская функция в usort. function cmp($a, $b){ if ($a == $b) { return 0; } return ($a < $b) ? -1 : 1;}Она возвращает 0, положительное или отрицательное значение. С нулем все ясно. Но почему в кач-ве положительного и отрицательного используются именно единички, можно использовать другие цифры на что это повлияет? знаки больше- меньше влияют только на то как будет сортироваться массив по возрастанию или убыванию. И вообще вот получает usort свою пользовательскую функцию и че она дальше с ней делает. Например $a=[1,3,2]; usort($a, "cmp");В cmp в качестве $а и $b приходят значения массива 1 и 3 , далее сравниваются (1 < 3) ? -1 : 1. Возвращается -1. И че с этой минус 1 делать, че эт значит? Она сдвигает элемент массива вправо? Сдвигает влево? или ШО? НИПАНЯТНА!
>>1532248>Но почему в кач-ве положительного и отрицательного используются именно единички,На вскидку: 1 и -1 это смещение элементов в результирующем массиве.
Аноны, начинаю делать задачу опа, которая на симфони про тесты. Вопрос - какую версию ставить? Мне бы стабильную какую-нибудь
>>1532335>phpstormОткуда вы её берёте? Она же платная. Или покупаете, не заработав ни копейки ещё?Или вообще мокрые писечки кряк кейген?
>>1532335Это?Many actions in PhpStorm provide more results when you execute them multiple times. For example, when you invoke basic code completion with Ctrl+Space on a part of a field, parameter, or variable declaration, it suggests names depending on the item type within the current scope. If you invoke it again, it will include classes available through module dependencies. When invoked for the third time in a row, the list of suggestions will include the whole project.
Как можно проверить, является ли созданный объект, объектом нужного мне класса? Как это записать на PHP? Какой код должен стоять вместо слов "класс А"?if (класс А){echo "Это объект класса А";} ifelse ...............
>>1512861после else не ставится условное выражение (/Условие/), дургими словами ты пишешь если(if) - какое то услови, иначе если(elseif) - какое то условие, иначе(else) - тут никаких условий и быть не может, даже по человеческой семантики
>>1532362>Она же платная.Гусары денег не берут!>>1532372Нет. Там открывается менюшка, через которую можно перейти к месту расположения указанного метода. А Ctrl+Space - это подстановка элемент из выпавшего списка в документ.
>>1532562>Гусары денег не берут!Мокрые торренты значит.Я такое стараюсь не использовать в этой теме - либо свободное ПО, либо никакое. Благо выбор есть.
>>1532421хостинг файлов? Да.Аноны, почитал немножко про симфони, я так понимаю там надо их двоичный установщик ставить, и через него последняя версия симфони качаться будет? То-есть вопрос про версии не актуален? Хотел для начала какой-нибудь архивчик взять и распаковать, без компосеров/установщиков
Ананасы, есть html таблица пикрелейтед. Она отрисовывается горизонтально. Можно как-то сделать, чтобы каждые ну пусть 7 рядов она переносилась на новую строку?
Нужно ли PHP разработчику знать тонкости настройки nginx, php-fpm, postgresql/MySQL, redis и прочих сервисов или достаточно каких-то базовых знаний (типа знать, как все поднять, связать вместе, чтобы все завелось и работало)? На последних двух собесах (из пяти) завалился именно на вопросах о настройке сервера, хотя в вакансиях про это и слова на было.
>>1533382Хз, зависит от конторы наверное.На уровне пользователя знать обязан, но глубокие настройки - дело сисадмина.
>>1533382Хуй знает, на моей галере тебе дают статью на вики, где максимально доступно объясняют как развернуть окружение через докер и все, сидишь пишешь код. Ты не девопс чтобы разбираться в серверах, хостингах, ci/cd или еще каким дерьмом, для этого есть специально обученные люди.
>>1533330Между tr/td нельзя воткнуть br, я бы не спрашивал будь все так просто.>>1533361Спасибо, но как я уже сказал выше, у меня сложности именно из-за таблицы.
>>1533422Не, сам ищи. Мне 15 минут понадобилось чтобы решить вопрос чисто из любопытства, а ты сидишь и ждёшь решения.Дизреспект таким посонам.
>>1533412Ну так изучи верстку таблиц в HTML. Либо в самоучителе либо в стандарте: https://www.w3.org/TR/html52/tabular-data.html#tabular-dataНапример, там есть возможность объединять ячейки.
Как в php вычислить расхождение массивов ОБЪЕКТОВ? array_diffне работает.Дано:$a = [new Manager(1, 1), new Manager(0, 2)];$b = [new Manager(1, 1)];Нужно получить:$c = [new Manager(0, 2)];
>>1533600А у тебя разные объекты, если судить строго. Проверь: var_dump(new Manager(1, 1) === new Manager(1, 1)); // falseОднако, в мануале написано: https://www.php.net/manual/en/function.array-diff.php> Two elements are considered equal if and only if (string) $elem1 === (string) $elem2. In other words: when the string representation is the same. То есть эта функция работает только со строками. Тебе подойдет такая штука: вычислить для каждого объекта из второго массива его идентификатор (https://www.php.net/manual/en/function.spl-object-id.php или https://www.php.net/manual/en/function.spl-object-hash.php) и сделать из них массив вида [id => true]. Затем пройтись по первому массиву и скопировать элементы, чьих id нет в массиве, в новый массив.Если тебе нужно нестрогое сравнение объектов, то надо вычислять идентификатор самому - например, объединить значения полей в строку с разделителями и сравнивать их.
>>1523893>Если бы у тебя заканчивалась еда и ты или вкатился бы, или умер от голода - не было бы проблем с мотивацией.Прямо как у меня 4 года назад.
>>1533412>Между tr/td нельзя воткнуть br, я бы не спрашивал будь все так просто.ты можешь вставлять пустую строку <tr><td colspan=количество ячеек></td></tr>
анонче помоги. на первом пике подключаю вот этот хидер и код со второго скрина который выводит мне теги. в результате чего он работает какого то хуя не только на теги с хидером, но и распространяется на h3 на первом скрине. в чем может быть трабл и как ево фиксить?
Как лучше ларавель учить - сразу писать без фасадов или можно для начала все-таки их использовать для простоты, а потом все переписать? Буду задачу на сайт с тестами от ОПа делать.
>>1533981не понял, что значит "распространяется"? Если у тебя поехала верстка, то попробуй взять и вставить этот код вместо инклуда, а потом последовательно удаляй маленькие кусочки и смотри, что поломало. А вообще у тебя вроде тег <a> не закрыт. Закрой тег а внутри тега li
>>1534984>Предлагаемые технологии: фреймворк (Symfony 3-4 (сложнее, но интереснее), Yii2, Laravel)Наверное это не приниципиально.
Решаю задачку "На словах ты Лев Толстой" https://phpbooktest2.ga/l1/strings.html , из уроков php для начинающих. Собственно моё решение https://ideone.com/4Iw8Mb . Может, есть где готовые решения ? Саму задачку я решил, но последние две строчки съехали на один пробел, из-за того, что я поставил его в конце своих echo, но если пробелы не ставить , то все мои слова склеятся, нужно как-то решить эту проблемку.
>>1535518можно <br> ставить$words = array($word1, $word2, $word3, ["\n"]);$words2 = array($word4, $word5); foreach ($words as $word) { echo "{$word[array_rand($word)]} ";};echo "<br/>";foreach ($words as $word) { echo "{$word[array_rand($word)]} ";};echo "<br/>";foreach ($words2 as $word) { echo "{$word[array_rand($word)]} ";};а зачем там ["\n"] в конце первого массива?
ананасы, спустя полгода поисков и вкатывания наконец таки позвали на собес на джуна (не ДСы). правда смущает одна вещь - хрюша даже не смотрела резюме а просто кинула заяву на сам собес. среди требований все по классике - знания html, css, MySql, php, javascriptтак вот вопрос - что ожидать на собесе, что могут спросить, как подготовиться лучше?делитесь тем что у вас на джуна спрашивали
>>1535892У меня почти ничего. Сразу дали задание вёрстку натягивать на кмс. Я изначально сайтики клепать пошел.
>>1535892https://www.kobzarev.com/wp-content/uploads/books/php/PHPbook.pdfПочитай вот эту книжку. Она небольшая, ее составлял чел, который включил туда самые часто задаваемые вопросы на собесах.
>>1535958Можешь поискать новую версию, не знаю существует ли она. В этой не затрагиваются вопросы по седьмой версии пыхи, есть спорная глава про джейквери. Но в любом случае, если ты идешь собеседоваться на джуна, тебя ожидают плюс минус похожие вопросы.
>>1535990прочитал пока только половину и вот вопрос -а не пиздежь ли это поехавшего долбоеба?у меня есть друг -мидл с пхп. кинул ему пару вопросов - он не ответил
Нюфаг итт.Закончил css, хочу перейти на scss, как это сделать? Как оно работает? Почитал у них на сайте и ничего ни понiв.Что нужно для того, чтобы мой локальный сайт работал с scss?
Анончики, сейчас разбираюсь со Слимом и делаю задачу про файлообменник. Пока сделал только отображение главной страницы вообще без каких-либо функций, Твиг ещё не добавлял. Посмотрите, пожалуйста, нормально ли написано, чтобы если говно, сразу знать, что говно, и не писать дальше аналогичное говно.В основном интересует ваше мнение о файлах index.php и Main.phphttps://github.com/deadj/uppu
>>1511147>PSR-2: https://github.com/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-2-coding-style-guide.mdОП, может стоит заменить на более новый PSR-12?
Соорудил регулярку которая должна собирать все некорр. знаки, но preg_match собирает в массив только один тип за раз, ЧЯДНТ? Или тут надо отдельные регулярки на каждую ошибку и по очереди прогонять строку через каждую?https://ideone.com/iEw1wEhttps://regex101.com/r/dt3C41/1
есть кто пишет код в VS Code?Как там сделать нормальный редактор?ну чтобы когда я щелкал мышью, оно ставило курсор выровненным а не в начале строки (как в студио)А еще как сделать чтобы было автозакрытие тегов? ну то есть пишу <dl> а оно само пишет ниже </dl> ?
аааа, помогите - мой хостинг был на php 5.3. И я юзал Joomlaно вот решил обновить php до 7 версии (как этого требует и джумла)выбрал в админке хостинга php 7.3 - все прошло. захожу на сайт - и он не работает - выводит всего одно слово error. когда вернул 5.3 он заработал
антуаны и антуанессы, подскажите нюфане где накопать годной инфы про классы и методы в них?inb4: мануал интересует конкретно то чтобы я запросы к бд которые подключаю на странице запихнул в отдельный метод класса и из класса его тупа вызывал
>>1536100Сильно советую создать проект через какой-то шаблон композер create-project, там за тебя ребята уже сделали общую архитектуру папок проекта>>1536330Самый тупой вариант это скачать проект и просканировать в иде с пхп 7.3, там 100% какие-то депрекейтед функции используются
>>1536443>антуаны и антуанессы, подскажите нюфане где накопать годной инфы про классы и методы в них?inb4: мануал интересует конкретно то чтобы я запросы к бд которые подключаю на странице запихнул в отдельный метод класса и из класса его тупа вызывалhttps://phpbooktest2.ga/l1/pasta.html
>>1536330не хотелось бы демотивировать тебя, но я думаю1. обновить приложение (тем более жумловское) с 5.3 на 7.3 может занять и несколько месяцев, и год в зависимости от объема написанного кода и его пиздецовости2. судя по твоему вопросу, у тебя недостаточно опыта, чтобы это делать самостоятельноя бы решал проблему с того, что поднял бы проект локально и врубил бы дев-настройки в php.ini (error_reporting, display_errors и т.д.). на хостинге ты скорее всего сделать это не сможешь, т.к. там редко дают прямой доступ к конфигу. а даже если дают, то врубать вывод ошибок в проде это пиздец какая небезопасная идеяопять же в пыхе начиная с 7.1 (кажется) все внутренние ошибки ЯП выкидывают исклюение, имплементирующее интерфейс \Throwable, то есть для дебага ты можешь обернуть весь код в index.php в try-catch и логировать эти ошибки, а потом разгребать их
>>1536477>в зависимости от объема написанного кода и его пиздецовостиСудя по тому, что у него там выводит error без нормальных пояснений - где, как, и дамп переменных, то код там - та ещё лапша.
Кто хорошо знает SQL, хотите головоломку? Найдите, в чем неочевидная ошибка в SQL запросе ниже. Я использовал MySQL, но это в общем-то часть стандарта SQL и должно везде работать. Пришлось полазить по мануалам, чтобы разобраться.SELECT COUNT(*) FROM user; // 500SELECT COUNT(*) FROM city; // 5000SELECT COUNT(*) FROM user WHERE cityId IS NOT NULL; // 450SELECT COUNT(*) FROM city WHERE id IN (SELECT cityId FROM user); // 50(ошибка тут) SELECT COUNT(*) FROM city WHERE id NOT IN (SELECT cityId FROM user); // 0 !!!SELECT COUNT(*) FROM city ci WHERE NOT EXISTS (SELECT 1 FROM user u WHERE u.cityId = ci.id); // 4950Можете понять, почему запрос с NOT IN дает 0 результатов? В запросах японская звездочка вместо нормальной, чтобы не ломать разметку.
>>1536486Потому что города проставлены только у 50 пользователей. У остальных либо NULL, либо у тебя целостность данных нарушена.cityId NOT IN (NULL) тут ведёт себя похожим образом с cityId = NULL (вместо которого ты пишешь cityId IS NOT NULL).В дополнение к твоим вариантам ещё можно использовать JOIN — тоже сработает.
>>1536507Дополню, хотя ты уже, наверное, сам разобрался.Запрос с ошибкой должен стать рабочим в таком виде: SELECT COUNT(*) FROM city WHERE id NOT IN (SELECT cityId FROM user WHERE cityId IS NOT NULL);
>>1536477> опять же в пыхе начиная с 7.1 (кажется) все внутренние ошибки ЯП выкидывают исклюение, имплементирующее интерфейс \ThrowableНеверно. Это бы сломало совместимость и исключения выкидываются только для новых ошибок вроде ParseError. Однако, ты можешь настроить обработчик ошибок и выкидывать в нем исключение ErrorException, хотя тут это никак не поможет.>>1536330Нужно искать, куда пишется лог ошибок, и в нем искать причину, а не гадать. Есть "стандартный" лог ошибок PHP, он может быть где-то в /var/log, если свой сервер, но на хостинге могут быть другие пути. Также, сайт может использовать свою систему записи ошибок, например в базу данных, тогда их надо искать в админке.Также, не стоит заниматься отладкой на продакшене, стоит поднять локально у себя копию сайта, исправить ошибки и выгрузить на продакшен.
>>1536496Да, это видно по одному из запросов.>>1536507> cityId NOT IN (NULL) тут ведёт себя похожим образом с cityId = NULL (вместо которого ты пишешь cityId IS NOT NULL).Почему ты так думаешь? Пусть там есть NULL в списке и тогда получается условиеWHERE cityId NOT IN (1, 2, 3, 4, 5, 6, NULL,NULL, NULL, NULL)в чем тут проблема? Как эти NULL могут помешать?
>>1536507Ну и заметь, что WHERE cityid IN (...) работает полностью корректно и NULL ему не мешают. Что меняется от добавления NOT?
аноны, почему когда пишу require и указываю путь к другой папке в стиле require "../drugayapapka/hui.php";меня выбивает и пишет что не может найти файл который он ищет сука в той же директории хотя я ему указал что надо искать в другой папке???
>>1536531>>1536534WHERE cityId IN (1, 2, 3, 4, 5, 6, NULL,NULL, NULL, NULL)субд выполняет как набор UNION'ов:SELECT ... WHERE cityId = 1UNIONSELECT ... WHERE cityId = 2...UNIONSELECT ... WHERE cityId = NULL; То есть результат такого запроса — это объединение нескольких множеств (некоторые множества пустые). Объединение пустого множества с исходным даёт нам исходное множество.WHERE cityId NOT IN (1, 2, 3, 4, 5, 6, NULL,NULL, NULL, NULL)субд рассматривает как пересечение результатов запросов:SELECT ... WHERE cityId = 1;SELECT ... WHERE cityId = 2;...SELECT ... WHERE cityId = NULL; -- даёт пустое множествоА мы знаем, что пересечение любого множества с пустым порождает пустое множество.Поэтому NOT IN (1, NULL) и IN (1, NULL) ведут себя по-разному.
>>1536565>субд рассматривает как пересечение результатов запросов:>SELECT ... WHERE cityId = 1;>SELECT ... WHERE cityId = 2;>...>SELECT ... WHERE cityId = NULL; -- даёт пустое множествоТут я ошибся, вместо "=" надо поставить "!=".Ну и получается в итоге пересечение пустых множеств с непустыми, что дает нам пустое множество в результате.
>>1536531>Как эти NULL могут помешать? Легко, логика в SQL небинарная, сравнение с null никогда не возвращает true.
>>1536565Нет, я думаю, ты ошибаешься, и причина гораздо интереснее. Я читал про оптимизацию запросов в MySQL и как она превращает WHERE EXISTS (подзапрос) ... в WHERE .. IN (подзапрос) и там было упомянуто что для NULLABLE колонок преобразование может не производиться. Тогда я пошел читать мануал по IN(), и нашел там такое: https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#operator_in> To comply with the SQL standard, IN() returns NULL not only if the expression on the left hand side is NULL, but also if no match is found in the list and one of the expressions in the list is NULL. Если в списке есть NULL, и значение не найдено, то вернется NULL вместо FALSE:1 IN (2, 3) // FALSE1 IN (2, 3, NULL) // NULLЛогика в этом есть, так как NULL значит "неизвестно" и результат такого IN() тоже неизвестен - может там в списке за NULL спрятана единица, а может нет.Если мы напишем WHERE .. IN .. то это не вызвает проблем, так как NULL также, как и FALSE, исключает записи из выборки. А вот если мы добавим NOT, то все становится интереснее: 1 NOT IN (2, 3) // TRUE1 NOT IN (2, 3, NULL) // NOT (NULL) => NULLПолучается. что если мы пишем WHERE x NOT IN (...) и в списке есть NULL, то мы всегда будем получать ноль результатов.Так-то логика есть (так как NULL значит "неизвестно"), но абсолютно не очевидная, и без чтения мануала о ней не догадаешься. Потому читайте мануалы, не ленитесь!По-хорошему, СУБД могла бы выдавать Warning если выражение в WHERE выдает NULL, так как в этом случае мы можем получить не то, что хотели бы.
>>1536555Посмотри мануал про порядок поиска файла: https://www.php.net/manual/ru/function.include.phpЕсли у тебя все сделано в соответствие с мануалом, то может быть ты ошибся в регистре букв, в имени папки или поставил слишком много или слишком мало точек?
Продолжаю делиться неочевидными тонкостями MySQL. В тестах часто для изоляции теста его "оборачивают" в транзакцию, делая BEGIN TRANSACTION до и ROLLBACK после теста. Но в MySQL есть команды, которые делают "неявный коммит": https://dev.mysql.com/doc/refman/8.0/en/implicit-commit.htmlЕсли вы используете в тесте, например, TRUNCATE, то происходит коммит и это весело ломает следующие тесты, причем причина ошибки с ходу не очевидна.
>>1536577так он выдает мне что типо бля братан не могу найти в такой то директориипишу ему require "../classes/Database.php";при этом находясь в header.phpструктура на пике.>>1536621так там же тоже самое
Подскажите пожалуйста гайдов, как загрузить сайт в инторнеты? Какой-нибудь бесплатный хост для PHP, Mysql существует?
сап программач. делаю такую сущность для обработки sql-запросов. делаю по классике - для бложика. и эта функция используется для вывода тегов и названия статей собсно. и вот столкнулся с такой проблемой: когда к ней обращается запрос вывести теги - о он просто все забирает оттуда и возвращает массив с тегами которые уже потом успешно выводятся. затем когда уже запрос на вывод статей обращается - то там уже пустой массив, из зачего теги выводятся а сами статьи нет. в чем трубл? везде применялся require_once если что
>>1536862алсо, если добавляю $normal_array = mysqli_fetch_assoc($return_of);return $normal_array;то начинается какой то пиздос хайлоада и он все равно статьи выводит. хуй знает че делать
надеюсь тред не мертвыйпередаю такой запрос в свой класс "SELECT * FROM `cocks` WHERE `id` = " . (int) $_GET['id']трабл в том что сама функция в классе принимает только одно значение извне, а из за точки с добавлением GET-запроса он думает что их джва и выдает ошибку. как решить этот вопрос то?
>>1536952Прям классека sql-инъекции.Да и в коде какой-то бред происходит - бёрешь гет-строку, потом превращаешь её в интежер, а потом опять в строку.На выходе вполне может быть:- убитая БД- глюки с выборкой, если туда отличная от числа строка попадётНе пишите так никогда.
>>1536982да в принципе ок и понимаю все. только жаль сами классы не показаны для понимания полноты картины
ладно, признаю чо нихуя не понял по прошествии часа ттк не могу понять как тут блять класс устроен и что в нем происходит>>1536991
>>1536991Это не класс, а пример кода. Суть в том, что бы вставлять "(int) $_GET['id']" напрямую в запрос, использовать bind_param
>>1537060>не могу понять как тут блять класс устроен и что в нем происходитЗначит начинай с азов. Так-то не ты первый, кто думал с середины начать и ничего не понял.
>>1536480чувак - ты понимаешь что там нет никакого моего кода?там joomla 3.9. В которой я накидал в визуальном редакторе пару страниц (ни строчки html)
>>1537264>ты понимаешь что там нет никакого моего кода?И что дальше, чувак? Он лапшой от этого перестал быть?Думаешь там высоколобые мужи пишут?Да половина govnokod.ru забита этой парашей из ваших CMS.
Здравствуйте, можете глянуть задачку по ООП vector company? Может что не так сделал или что-то хромает.Заранее спасибо.https://github.com/Vladrigos/vectorCompany/blob/master/vectorCompany.php
ОП-няш, проверь задачку про список студентовhttps://github.com/j835/student-listНа хостинге - https://studentlist123.000webhostapp.com/
ОП, у меня есть программа на PHP, которая внутри себя содержит бесконечный цикл, и в этом цикле следит за изменениями в БД и при определенных изменениях дергает данные из БД, генерит на основе них отчет и отправляет его по сети. Можно ли переписать её на современный фреймоврк? Современные фреймворки типа Ларавела, Симфонии и Ви позволяют писать такие системные сервисы? Или там всё жестко заточено под веб приложения?
Есть задачка, взятая из уроков в шапке треда(она на картинке), проблема в том, что моя регулярка не находит все номера которые нужны https://regex101.com/r/qF7vT8/230 Нужна помощь в дополнении моей регулярки, варианты с программами которые убирают пробелы, скобки и тире не устраивают . Если, что я в курсе, что моя регулярка будет находить номера даже с присутствием одной из скобок,то есть, например 88122)56(5656 , но это пока пофиг
Ребята, подскажите плиз.Есть массив сотрудников типа:$a = [new Manager(boss 0, rank 1), new Analyst(boss 0, rank 1), new Analyst(boss 0, rank 2), new Analyst(boss 0, rank 3), ...];Как назначить боссом аналитика самого высшего ранга?
Анончики, в вакансии есть обязанность:>Понимание базовых принципов теории сетей (tcp/ip/udp, http, ftp/sftp, ssh);Что они хотят? Это сис админская тема? Зачем php разрабу это?
>>1511146 (OP)Пацаны, как там на пыхе вообще. Мозги ебут, требуют знания алгоритмов и прочих математических штучек дрючек?
Пытаюсь в Ларавел и не понимаю, что за ерунда в нём происходит.Есть модель MainText и ресурсный контроллер MainTextController.Если обратиться к методу indexpublic function index(){$mainTexts = MainText::all();return view('admin.maintexts.index', compact('mainTexts'));}то всё ок, данные из базы забираются и выводятся. Но стоит обратиться через код во вью<a href="{{route('admin.maintext.edit', $mainText)}}">Редакт.</a>(там перед этим идёт перебор через @forelse($mainTexts as $mainText) )к edit public function edit(MainText $mainText){return view('admin.maintexts.edit', ['mainText' => $mainText]);}как содержимое mainText пропадает и на страницу вью admin.maintexts.edit не выводится, переменная пустая. Но! если заменить в коде контроллера udit переменную $mainText на $maintext и данные передаются правильно. WTF? Что это вообще такое, я вообще не понимаю логики. Почему передача данных в переменной прибита гвоздями к её названию? Может ларавел как-то по своему обрабатывает составные названия? У меня рядом модель Price и контроллер с вью для неё, там таких фокусов нет.
>>1537974На ассемблере лучше.>>1537819Обычный крон + простецкий скрипт всё сделают в лучшем виде. Нефиг тут писать, тем более на фреймворках. Это не приложение вообще у тебя.
>>15379901. Ищешь индекс аналитика с самым высоким рангом2. Достаёшь этого аналитика из массива по индексу3. Повышаешь аналитика до босса
>>1538016Нет - математических штучек не требуют, но требуют знание архитектуры, PSR, рабочего протокола, подводных камней веб-приложений, JS, вёрстки, фреймворки и паттерны, не лишние - структуры данных, ну и в алгоритмы лучше уметь.ООП обязателен, если мартыханить вордпресс за 30\мес в пыльной жопе не хочешь.
>>1538016Иногда.У нас в конторе на собеседовании заставляли рассказать, какой тип деревьев используется в СУБД для формирования индексов по числовым полям.А потом окунали в махровое легаси.
>>1538118Лично я тебя неистово двачую, но тут тред или два назад выяснилось, что целая куча говношлёпов колхозят свой код под виндой, так что надо смотреть. Я с некоторых пор на собеседованиях (с обоих сторон) уточняю этот момент, а то бывает, натыкаешься на странности.
>>1538127> колхозят свой код под виндойКолхозят-то да. Но крутится это всё в продакшене всё равно на линуксе.
>>1538133Мне можешь не объяснять (я уже лет 7 как полностью на линукс переключился, и на работе, и дома) , пойди в прошлый тред и почитай. Долбоёбы боятся консоли и неспособны выучить десять волшебных линуксовых команд, в итоге на полном серьёзе приходят работодателю с денвером. Бывало, тестовое задание прилетало не в виде ссылки на репозиторий, а в виде архива с файликами, лол.
>>1538156Ну да, все эти гет, пост, пут, заголовки, статусы ответов.Это фронтендерам знать желательно, а бэкендерам обязательно.
>>1538152Ссылка на гитхаб — это, конечно, замечательно.Но мне кажется, ты фокусируешься не на тех вещах. Если тестовое задание выполнено на приличном уровне — думаю можно пережить архив с файликами у себя на почте/в чате.Зачем отсекать потенциально хороших кандидатов придуманными требованиями? От этого хуже и соискателю, и компании. В конечном итоге, ведь, главное — чтоб человек соображал и мог взаимодействовать с людьми.
>>1538185>Зачем отсекать потенциально хороших кандидатов придуманными требованиями?Лол, в том и дело, что потенциально хороший кандидат не будет отсылать файлики на почту, как баба Срака из бухгалтерии. Программисту такое поведение очень нежелательно и потенциальный джун это должен понимать. Иначе он просто в индустрии не сечёт получается.>чтоб человек соображал и мог взаимодействовать с людьмиОсобенно здорово, если кроме болтовни и доставания старших коллег он ничего толком не умеет.
>>1538194Можно добавить в тестовое пару требований:- предоставить ссылку на гитхаб- в репе должен лежать рабочий конфиг nginx/php, с которым это всё можно запуститьТогда получишь только тех, кто либо уже соответствует твоим требованиям, либо разобрался в консолях и настройке веб-сервера самостоятельно (хотя изначально мог планировать отправить тебе ненавистный архив с файликами).
>>1538209>Можно добавить в тестовое пару требованийТак в требованиях 90% вакух обычно гитхаб указан. Зачем 2 раза писать?
>>1538185Ты неправильно себе это представляешь. Никто кандидата не отсекает сходу, я всё равно скачаю, распакую и запущу этот код.Но отмечу, что в случае, если мы возьмём этого кандидата, мне придётся учить его пользоваться гитом (что как бы стандарт сейчас, ни один человек в здравом уме не пошлёт свой код в архиве, если он хоть раз пользовался гитом и гитхабом/гитлабом/whatever).>>1538209Ты видимо сам никогда не был по ту сторону интервью. Не станешь же ты указывать "называйте переменные по английски, а не $polzovatel" и прочее?Все возможные требования указать во-первых очень сложно (слишком уж много очевидного), а во-вторых этого как раз делать не стоит, потому что оно показывает, что гипотетический кандидат знает об области, в которой собирается работать, что мне и требуется (не забываем, я не хочу обеспечить работой всех джунов России, я хочу нанять того, кому придётся меньше объяснять и кто быстрее вырастет до миддла и слезет наконец с моей шеи).
>>1538241Чтобы получить оффер — не надо соответствовать вакухе на 100%.А git — это навык, не обладать котором для джуна простительно. Но если ты укажешь в тестовом, что надо опубликовать на гитхабе — нормальный джун это тут же освоит.
>>1538246Даже раскрою дополнительно карты, взять джуна на самом деле - это крайне убыточная штука, потому что мало того, что он сам не в состоянии решить свою задачу качественно (а это так), так он ещё и отвлекает более опытных коллег, которые должны его обучать. В итоге любая компания, которая берёт джуна, по сути платит ему зарплату за то, что он сидит у неё в офисе, учится работать и тратит оплаченное компанией (и значительно более дорогое) время старших товарищей.Я на полном серьёзе говорю, большинство джунов не умеют не просто программировать, а даже просто работать: их приходится обучать даже таким далёким от IT вещам, как "ответственность" и "внимательность". С программированием ещё хуже, джуну нельзя сказать "добавь колонку в базу, маппинг в orm и напиши миграцию" (он таких слов часто не знает), ты буквально пишешь код его руками, долго и мучительно и при этом ещё и тратить время на рассказы, что это и зачем нужно.Как правило, компания вкладывает в джуна деньги, в надежде, что он уйдёт из этой компании позже, чем вырастет в миддла и этим хотя бы покроет расходы на своё обучение. При этом расходов там дохера, ещё раз: минимум год обучения * 50к/мес = 600к рублей будут потрачены на джуна ещё до того, как он хотя бы начнёт отбиваться (а он ещё будет просить повысить себе заработную плату и прочее).Поэтому не распространяйте сказки про злых работодателей, которые доёбываются до несчастных "молодых специалистов". После универа выходят почти полные нули (а тех, кто чуть посильнее, быстро разбирают), как это не печально и всему их приходится учить на месте, что охереть как дорого. Нельзя винить компании в том, что они не хотят тратить деньги на ветер.
Котомальчики, только начал изучать симфони (3.4 вер). Про роутинг и контроллеры понятно, спасибо опу и остальным за задачу с файлообменником на слиме. Но я банально не понимаю где писать ДРУГОЙ КОД. Вот нужен мне вспомогательный класс с какими-то статическими функциями. В какой папке его располагать? Есть особая культура программирования на симфони? Шаблоны у меня в /app/Resources/views/defaultКонтроллеры-роутеры у меня в /src/AppBundle/ControllerА куда другой-то код сувать? ЧТобы потом американский заказчик не сказал фи да он файл не туда засунул нафиг его брать
>>1538249>не надо соответствовать вакухе на 100%Ну это понятно. Вообще желательно понимать кто её написал - норм спец или девочка из hr. Тот же ларавель и год опыта в требованиях на джуна меня всегда веселил.Если джун может поднимать на фреймворках то это и не джун уже.
>>1538266Всё дело в табах - гитхаб их не любит. Ну и по ПСР желательно писать, а там тоже вместо табов 4 пробела.
>>15382631) Статические функции зло, избегай их;2) Классы-хелперы - зло, у них слишком много ответственности для одного класса;3) Разделяй свою систему на четыре слоя (к примеру, неймспейса): - предметная область (domain layer): тут должна лежать бизнес-логика, правила той предметной области, которую ты моделируешь в своём коде. Правила расчёта цен, отношений между юзерами, вся важная фигня, абстрагированная от способа её вызова и способа хранения данных (по возможности). Поэтому обычно тут же хранят бизнес-сущности (user, order, *) и интерфейсы репозиториев;- прикладной уровень (или уровень приложения) - тут у тебя лежат ю-кейзы, сценарии того, как работает конкретно твоё приложение. Например "положить продукт в корзину", в котором ты загрузишь продукт, рассчитаешь его цену, создашь корзину и т.п. Тут используется только код из предыдущего слоя;- инфраструктурный уровень - тут лежат реализации интерфейсов из предыдущих слоёв + все возможные специальные модули и т.п;- уровень интерфейса - тут описываются точки входа в приложение, консоль, rest (контроллеры), grpc и прочее. В них ты достаёшь данные, валидируешь их на соответствие типам и вызываешь нужный сценарий из прикладного уровня.Гугли DDD, DDD + symfony и т.п.
>>1538268Почему вы путаете джунов с нулями (стажёрами)? Если у чувака всего год опыта и он умеет тыкать в ларавел, это ещё не делает его состоявшимся разработчиком, которому можно поручить сделать чётко сформулированную техническую задачу и быть увереным в её корректной реализации. По моему опыту, нужно от года до двух, чтобы человек разобрался хотя бы на начальном уровне в инфраструктуре, протоколах, архитектуре, коде, языке, паттернах, фреймворке, продукте и тд и тп и можно было начинать давать ему какие-то задачи.
>>1538285>нужно от года до двух, чтобы человек разобрался хотя бы на начальном уровне в инфраструктуреТ.е. на ларавель ты запрыгнул с первой недели обучения?
>>1538285>которому можно поручить сделать чётко сформулированную техническую задачу и быть увереным в её корректной реализацииА вот это уже организаторские штуки, которые индивидуал знать вообще не обязан. Да и по разному везде бывает.
>>1538288Нет, но даже субъективно первые два года я бы себя миддлом не назвал. Научиться херачить код в нужные места - это одно. Понять принцип работы, экосистему и всё такое - совершенно другое.Это как умение пилить не делает тебя столяром, а умение держать паяльник - электриком.>>1538289Это мой критерий, разделяющий джуна, миддла и сеньора. Джун ничего сам делать не может, потому что не знает, что, как и как правильно. Миддл знает, как правильно делать техническую задачу X, но у него не хватает знаний/опыта, чтобы понять, что нужно сделать Х, а не Y. Сеньор может прочитать бизнес-задание, и декомпозировать его в технические задачи/придумать архитектуру.Лично ты можешь называть джунами тех, кто работает меньше года, миддлами - меньше трёх лет, а прочих сеньорами. Но имхо по выслуге лет мерить людей слишком неточно, лучше это делать по возможностям и навыкам.
>>1538333Тебе надо завести массив с ростом всех школьников$другиеШкольники = array(168, 169, 198);потом завести твой рост$нашКрасавец = 160;А потом перебирать массив и в цикле сравнивать рост каждого школьника с твоим. Если рост ниже - прибавляешь единичку к счетчику
>>1538336>Но имхо по выслуге лет мерить людей слишком неточно, лучше это делать по возможностям и навыкам.Ну я про это примерно и говорил. Да и люди с разным бэкграундом. Перекатывальщик из эникеев\сисадминов за год большего добьётся, чем бывший таксист. И джуны из них разные тоже.Но всё равно не понятно зачем требовать от джуна проектов на ларавель, если там и так ясно, что говно по туториалам будет.
>>1538369Я и не требую. Классическое тестовое - написать веб-приложение, которое перемножает числа или сохраняет/возвращает число по ключу (чуть сложнее). Не поверишь, далеко не все даже с этим справляются.
>>1538266Для таба нет стандарта, скольки пробелам он соответствует и в разных местах он будет отображаться по-разному. Потому стоит использовать пробелы и настроить редактор на вставку пробелов при нажатии Tab.>>1538263Есть класы-сервисы, содержащие бизнес-логику. Ну например, класс-сервис, отвечающий за работу с комментами. Для мелких вспомогательных функций (перевести часы в дни) есть классы-помощники, реализующие паттерн utility class.Сервис - это класс, как правило, без свойств, не представляющий какую-то сущность, а содержащий полезные функции. Как правило, сервис существует в одном экземпляре и создается через DI контейнер. Идея сервисов описана у Мартина Фаулера: https://martinfowler.com/eaaCatalog/serviceLayer.htmlЕсли бы ты посмотрел какой-то туториал по созданию приложения на Симфони, ты там увидишь эти классы.Также, сервисы можно увидеть в моем уроке по MVC: https://github.com/codedokode/pasta/blob/master/arch/mvc.md#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-mvc-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F> Шаблоны у меня в /app/Resources/views/default> Контроллеры-роутеры у меня в /src/AppBundle/ControllerУчти, что в новой Симфони 4 бандлы хотят оставить только для библиотек, а свой код писать без бандлов (инфа: https://symfony.com/doc/current/bundles.html ). Сразу же готовься читать официальную док-ю по Симфони, так как у фреймворка много возможностей и без чтения о них не узнать.
>>1538259 Насчет ответственности, совет всем начинающим: тщательно тестируйте свою задачу перед тем, как сдавать. Перечитайте текст задачи и проверьте, что все требования выполняются. Прокликайте все страницы, которые вы затронули. Если у вас есть подозрение, что что-то может не работать - проверьте. Не ленитесь создавать нужные аккаунты и записи в БД для тестирования. Помните, что ваше время тут самое дешевое и потому тестировать должны именно вы, а не тратить время других людей. >>1538209В репозитории должен быть README с описанием, как запустить проект, это по моему очевидно. Не обязательно nginx, для PHP вполне годится встроенный сервер. Если гитхаба и примеров кода нет - это никогда не проблема, можно самому попросить тестовое задание. И да, архивы это очень неудобно. Я думал над тем, какие должны быть тестовые задания, и придумал только простую задачку на час-два без фреймворков и библиотек. Но этого достаточно, чтобы оценить качество кода, понимание ООП, спросить, почему нет комментариев и почему неправильно используются исключения, например.>>1538152Справедливости ради, PHP к линуксу не привязан, а встроенный в PHP сервер кроссплатформенный.>>1538117 Нужно было объяснить, а потом, сделав хитрое лицо как у Майой Хатикудзи, спросить, а кстати, почему выбраны именно красно-черные двоичные деревья и таким образом проверить собеседующего.
>>1538079 > route('admin.maintext.edit', $mainText)В мануале по Laravel в примере передаются параметры через массив: https://laravel.com/docs/5.7/urlsecho route('post.show', ['post' => $post]);Не может быть в этом проблема? Также, вопрос: ты генерируешь URL с помощью route() - посмотри, какой именно она URL генерирует и по какой ссылке ты переходишь. В методе edit() сдампь, что там содержится в $mainText.>>1538012Веб-приложение обрабатывает HTTP-запросы. Как без этого? >>1537990Найти аналитика с макс. рангом и сделать его боссом, разжаловав предыдущего. Если у тебя есть класс департамента, удобно в нем сделать метод заменитьБосса(новыйБосс), который возьмет эту задачу на себя.
>>1537924 А ты посмотри, что не так с ненайденными номерами и попробуй вручную применить к ним регулярку. Например, номер: _8_(8122)_56-56-56рассмотрим, что происходит после сопоставления с регуляркой цифры 2 и перед символами )_56, пусть текущий символ - это закрывающая скобка:_?-?[(]?[)]?[0-9]- вначале может идти пробел, но у нас закр. скобка и это условие не срабатывает- затем может идти минус или откр. скобка, но у нас их нет- затем может идти закр. скобка - это условие срабатывает- за ней должна идти цифра. Но у нас дальше идет пробел и из-за этого точного совпадения с регуляркой не происходит. Ты заложил, что между цифрами каждый символ может встретиться один раз, и они должны идти в определенном порядке. Возможно, вместо этого лучше было бы записать "может встретиться от X до Y символов из набора: пробел, минус, скобки, в любом порядке". Если непонятно, как это сделать, вот подсказки: - запиши "ровно один любой символ из набора: пробел, минус, скобки- оберни это в скобки и поставь там фигурные скобки с указанием мин. и макс. числа повторений: (...){X,Y}Точно так же пройдись по другим номерам, и разбери, где именно они не совпадают с регуляркой.Также, я увидел, что на сайте есть кнопка "debugger", которая показывает применение твоей регулярки к тексту по шагам: https://regex101.com/r/qF7vT8/230/debuggerОставь там только не совпадающие номера и проверь их отладчиком по шагам, на каком шаге происходит несовпадение. Вот тут примерно на 30-м шаге происходит то, что я описал выше: https://regex101.com/r/AY5inr/2/debugger
>>1537819Смысла особого нету. Проще просто сделать CLI скрипт, при необходимости использующий сторонние библиотеки, например, для работы с БД. В фреймворках есть возможность писать CLI команды и они могут использовать все возможности фреймворка. Вот пример для Симфони: https://symfony.com/doc/current/components/console.html (заметь, что использовать компонент можно и без Симфони).>>1537720 Быстро напишу основные замечания, после их исправления посмотрим дальше: https://github.com/j835/student-list/blob/master/SQLdump.sql#L42> DEFAULT CHARSET=utf8;Самостоятельно нагугли различия между utf8 и utf8mb4 в MySQL. Если кратно, utf8 это сильно урезанная версия настоящей UTF-8, не поддерживающую, например, эмодзи.> studentNameНет особого смысла дублировать название таблицы (students) в имени поля.> `studentGender` varchar(8) NOT NULLСтоит использовать ENUM.> studentCookie` varchar(255) NOT NULLНужен комментарий к полю.В README ничего не написано про конфиг и его настройку.> Registration.php> table.phpНужно называть файлы единообразно.Вместо 3 автозагрузчиков стоит сделать одну функцию, перебирающую пути. А в идеале - освоить композер и сгенерировать автозагрузчик им.> $newUser = !isset($_COOKIE['student']);Логику определения залогиненности надо не размазывать по коду, а оформить в функцию или метод.В таблице стоит сделать индикацию того, какая выбрана сортировка и по какой колонке. Также, желательно при смене сортировки, страницы, параметров поиска менять URL страницы, а при загрузке страницы, наоборот, брать параметры показа из URL. Это позволит делиться ссылкой на конкретный фрагмент таблицы. Поищи HTML5 history и событие popstate, чтобы узнать, как это сделать. И протестируй тщательно обновление страницы, навигацию вперед/назад, закрытие и открытие вкладки обратно, если решишь делать.> href=<?php echo "/css/bootstrap.min.css"?>>Непонятно, зачем тут echohttps://github.com/j835/student-list/blob/master/public/js/mainTableHandler.js#L23Тут ты по сути вынес кусок шаблона в JS. Это затрудняет правку шаблонов. Было бы лучше сделать "шаблон" одной кнопки в коде (тег HTML5 template: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template ), а в JS уже клонировать его нужное число раз.Либо поместить шаблон пагинации в тело страницы, и подключить готовый шаблонизатор в JS коде. > fetch('ajax/view.php', {Нет обработки ошибок, индикатора занятости, почитай урок https://github.com/codedokode/pasta/blob/master/js/ajax.mdТакже, для получения данных логично использовать GET, а не POST. Также, получение данных через fetch() надо вынести в функцию, а не копипастить несколько раз.> body: "query=" + searchInput.value,Данные в application/x-www-form-urlencoded надо экранировать с помощью encodeURIComponent, читай урок https://github.com/codedokode/pasta/blob/master/network/urls.mdТакже, мне кажется, JS файлы удобнее называть точно так же, как контроллер и шаблон. > let headers = document.querySelectorAll('th');Плохой селектор. Что, если на страницу добавят еще одну таблицу? Надо привязываться к ячейкам конкретной, а не любой таблицы.Код в public/ajax логичнее оформить как контроллеры с роутингом и с шаблонами, а то у тебя получается две архитектуры зачем-то сделано.https://github.com/j835/student-list/blob/master/public/ajax/view.php#L11> $orderBy = 0;> $desc = 0;Странные значения по умолчанию.> echo 'Ничего не найдено';Это должно быть в шаблоне.ajax/view.php и ajax/search.php можно объединить в один контроллер, они почти одинаковые.В поиске неправильно работает пагинация и нет сообщения об отсутствии результатов. Нет кнопки отмены поиска.> $qorder = mysqli_real_escape_string($this->connection, $order);В Mysqli есть подготовленные запросы с параметрами, советую использовать их.В mysqli ты не обрабатываешь и не логгируешь ошибки. Надо либо включить использование исключений, либо проверять каждую mysqli функцию на ошибки, как тут: https://www.php.net/manual/ru/mysqli.examples-basic.php> $result = mysqli_fetch_assoc($result);> return $result['COUNT(*)'];есть функция получения одного значения сразу.Поиск можно реализовать на уровне БД. В твоем коде поиска стоит не писать все длинной стеной, а разделять на функции, например, можно выделить функцию match($student, $query): bool В функциях и методах надо использовать тайп-хинты.Стоит разделить отдельно работу с БД и отдельно валидацию. Непонятно, почему они помещены в один класс. Из валидации убрать экранирование данных. Экранирование должно делаться в той же функции, что делает запрос, чтобы было видно что данные экранированы.> $student->setSurname(mb_strtoupper(mb_substr($surname, 0, 1)) . mb_strtolower(mb_substr($surname, 1)));Изменение регистра первой буквы надо вынести в отдельную функцию, а не писать код длинной стеной.Пол надо сделать константами в классе Student (GENDER_MALE).Желательно, чтобы функция валдидации возвращала причину ошибки.HTML-код из класса Printer надо перенести в шаблон. Функция сортировки там, наверно, не нужна.
>>1537689 > function getTotalCountCoffee() : int //Общее колво кофе во всех дп.Лучше писать комментарий сверху, а еще лучше - изучить и использовать комментарии в стиле phpDoc.> protected abstract function setDefaults(); //базовые ставки для каждой из должностейБыло бы красивее сделать абстрактные метод вроде getBaseSalary, getBaseCoffee, так как в этом случае тому, кто наследует твой класс, понятно, что надо прописать. В твоем же варианте это не очевидно и никак не проверяется, что наследующий заполнит нужные поля. Представь, что ты пишешь базовый класс не только для себя, а для всех твоих коллег. Они могут не понять, как его наследовать.> class PeopleCreatorОбычно класс, создающий объекты, называют Factory.> public function showTable(Organisation $org) Если ты используешь HTML, мог бы использовать тег <table>. Если не используешь - то поставь в начале кода заголовок, который позволяет отображать пробелы и переводы строк header("Content-Type: text/plain; charset=utf-8"). Это говорит браузеру, что в ответе сервера содержится текст без HTML-разметки.> private function padRight(string $text, int $col)Если условие не выполняется, функция не вернет ничего.Пока сделано очень неплохо. Посмотрим, справится ли твой код с адаптацией под кризис во второй части задачи.
>>1537274Зачем писать такие комментарии, не содержащие полезной информации? >>1537060Если ты не понимаешь классы и объекты, в ОП-посте есть учебник, а в нем урок про ООП.>>1536952Дело явно не в этом, точка просто склеивает строки.>>1536958Справедливости ради, тут инъекции нету.
>>1538415>Зачем писать такие комментарии, не содержащие полезной информации?Зачем задавать вопросы, не запрашивающие полезной информации?
>>1538409> Справедливости ради, PHP к линуксу не привязан, а встроенный в PHP сервер кроссплатформенный.Так-то оно так, вот только линуксовая экосистема разработчика значительно более богатая и полноценная, чем виндовая. И тебе мейкфайлы сразу, и пайплайны, и баш, и докер безо всяких проблем, и туева хуча утилит консольных под все случаи жизни (новички пиздец как удивляются, когда ты не задумываясь фигачишь в консоль что-нибудь простенькое типа find . -name "*.patch" | xargs rm).Ну и на сервере скорее всего тоже будет линукс, так что лучше сразу разрабатывать на схожем окружении, меньше проблем будет.Неудивительно, что 99 из 100 моих знакомых хороших девелоперов работают на линуксе.
>>1538413> В фреймворках есть возможность писать CLI команды и они могут использовать все возможности фреймворка.Спасибо, понил. Да, я читал что в симфонии и ларавел зеро можно делать консольные приложения. Но меня в этом деле заинтересовало то, могу ли я управлять потоком управления программы или фреймворк позволяет мне только вставить логику в заранее сгенеренные им хендлеры команд.
Всем привет, я ньюфаг, пытаюсь сделать задачу про список студентов, там написано можно юзать table data gateway, в гайде про него в примере в конструктор передается ПДО объект. А в каком месте проекта этот объект должен создаваться? Я думал, что раз у меня всегда будет взаимодействие с одной и той же таблицей, то почему бы не сохранить эту информацию в свойство класса? Зачем оно передается через конструкор? Или типа так нельзя? Нужно сначала создать объект пдо в конструкторе и присвоить его значению свойства?
>>1538775>А в каком месте проекта этот объект должен создаваться?Например в контейнере https://github.com/codedokode/pasta/blob/master/arch/di.md>Зачем оно передается через конструкор?Потому что соблюдая контракт ты можешь передавать не один а разные реализации в зависимости от твоих нужд. Например у тебя есть класс сервис, который в платежную систему что-то отправляет, но для локальной разработки ты настраиваешь среду так чтобы вместо настоящего сервиса был класс болванка, ну это такой, самый тупой пример. Конкретно с пдо, каждый объект пдо это уникальное соединение с бд. Тебе нет никакого смысла делать разные конекшены для одной и той же бд с одним и тем же юзером. Это только замедлит приложение, потому что операция сама по себе дорогая. Имеет смысл, если у тебя используются разные бд, или админ наркоман сделал несколько пользователей с разными правами на запись и на чтение
Анон, накидай идей как сделать правильно чтобы на заебываться.Задача:есть одна программа которая собирает данные приборов. Все эти данные хранятся в базе данных MS Access (mdb).Теперь нужно некоторую часть данных из этой базы выкладывать на сайте ежедневноПервая же мысль - просто тупо открывать эту mdb базу через какое-нибудь php pdo. Я даже пробовал на тестовом. Но нет, там база данных весит 3-5гб. Если эту базу данных каждый день заливать - меня и хостер и провайдер (а потом и начальник) нах пошлюткак я сделал:- написал в другой базе MS Access запросы которые извлекают нужные данные из начальной базы (через связи)- затем этот прогоняю через утилиту которая конвертирует mdb в mysql запрос- потом запускаю этот mysql запрос в phpMyAdmin- долго и нудно тестирую чтобы убедится что все загрузилось.И так каждый день по 1-2 часа уходит... задолбало.И самым проблемным местом является момент где надо mdb конвертировать в mysql - та софтина которую юзает слишком капризная. Можно конечно было бы написать код руками - но я не умею в vba.Короче, подкинь идей как это оптимизировать чтобы оно всё работало самопросто суть:- как быстро и автоматом перегнать таблицы из mdb в mysql (хотя бы вот этот момент улучшить)
>>1538411От души спасибо понял в чем моя ошибка, но не совсем ясно как написать регулярку в которой не будет важен порядок символов.Ну например нужно написать регулярку которая будет находить все трехзначные числа с любым порядком тире между ними , такие числа например как 2-3-4- , 2-3-4 , я конечно могу записать так ^(-?[0-9]-?){3}$ но тут важен порядок символов, а меня интересует - в любом порядке
Анона, шалом.Решил вкатиться. Застрял на последней задаче про массивы (5.6).А именно, не могу понять, как записывать результаты итерации на каждом этапе в массив.Положил в переменную $name=array();Далее по тексту:for ($i = 1; $i <= 4; $i++) { $random = array_rand($letters); $randomText = $letters($random);$name[]=$randomText или $name=implode($randomText) - не работают.}Через .= - уже сделал.Подскажите, намекните, пожалуйста.
Аноны, как писать в файл пошагово, допустми по 100 байт.Вот так я делаю:while(fwrite($fileCursor, $postData, 100 ) !== FALSE) {//получаю смещение $position = ftell($fileCursor);//устанавливаю указатель на смещение fseek($fileCursor, $position); sleep(1);}Однако все равно в файл пишет первые 100 байт, не смещаясь.Где я лох?
>>1538410>Не может быть в этом проблема?Роуты там были правильные.Я так и не понял, в чём конкретно проблема, но ноги росли именно из-за каких-то соглашений о именовании в ларавел. Когда я переименовал таблицу из main_texts в maintexts, и, соответственно переименовал модель, миграции, контроллер - всё заработало нормально.
>>1538951Блядь, где я торможу? Не могу получить смещение. Все время пишу сто первых байт из потока для записи. while($position < 5){ fwrite($fileCursor, $postData, 100 ); //получаю смещение $num = ftell($fileCursor); //или тупо вручную его задаю $offset = $offset + 100; fseek($fileCursor, $offset , SEEK_SET); //если тупо цифру 500 вбить - то на второй итерации цикла курсор перемистится на точку в 500 байт //но блядь если переменную которая в каждом цикле увеличивается на 100 вставляю - пишет каждый раз первые 100 байт fseek($fileCursor, 500,SEEK_SET ); $position++; sleep(1); }
Взяли на джуниора наконец таки и вот спустя неделю ебланства все же дали первое задание. Нужно отредачить карточку в опенкарте (жс-скрипт+саму верстку). Так вот вопрос - как их блять найти нахуй на удаленке через фтп то ?
// Чет я затупил. Задачу я себе похоже криво поставил. //открыл файл $fileCursor =fopen('file.txt', 'w'); //у меня есть JSON $JSON = 'JSON100500bytes'; //тут я хочу сделать цикл while (false) { //я записал в $fileCursor первые 5 байт из $JSON fwrite($fileCursor, $JSON, 5); //моя задача: следующие 5 байт из $JSON записать в $fileCursor но уже не в начало файла где указатель 0, а в место где указатель 5, и так в цикле. //возвращает смещение указателя в $fileCursor $num = ftell($fileCursor); //устанавливает указатель $fileCursor доустим в новую позицию. fseek($fileCursor, $num); //проблема в том что на новую позицию в $fileCursor каждый раз пишется только первые пять байт из $JSON //как мне на каждой итерации цикла писать следующие данные мз $JSON } fclose($fileCursor);Я хочу с помощью fwrite писать в файл 'file.txt' данные $JSON в цикле по пять байт на каждой итераци.Получается каждый раз в цикле вызывая fwrite() я пишу $JSON с начала.Как застваить fwrite запомнить какие данные уже записаны в файл, а какие еще нет?
>>1538812Тебе надо сделать скрипт, который будет запускаться по расписанию в неактивное время, делать небольшую выборку из MS Access, и выгружать ее (выборку) на сайт. Нафига копировать на сайт всю базу? Если MS Access тормозит, надо либо настроить индексы, либо перейти на нормальную БД.> затем этот прогоняю через утилиту которая конвертирует mdb в mysql запросЗачем? Я вообще не понял этот момент. Или ты имел в виду, ты делаешь огромный дамп данных в виде SQL запроса и зачем-то руками его вставляешь в phpMyAdmin?Дамп надо выгружать на сайт через API на сайте, либо на худой конец через ssh и импортировать скриптом в командной строке.Богатая у вас организация, если может позволить себе тратить 2 часа каждый день на то, что можно автоматизировать часов за 10-20.
>>1538933у тебя рандомТекст - это слог? Нейм - это конечное имя. Тебе надо просто к нейму прибавлять рандомТекст типа//цикл //...$name .= $randomText;}//endforecho $name;==============================если ты будешь делать вот так $name[]=$randomText, то у тебя в поле нейм уже будет не строка, а массив. Массив слогов. Так тоже можно решить, только в конце надо будет преобразовать массив в строку, вроде функция есть специальная. Проще представлять наме как строку изначально и конкатинировать туда каждый слог
>>1539009fwrite (как и fread) автоматически сдвигает указатель на текущую позицию в файле, использовать ftell и fseek не требуется. Ты можешь убедиться в этом, сделав вызов ftell() до/после fwrite() и выведя числа на экран (проверь).Нужно проверять возвращаемое функциями fwrite, ftell, fsek значение и сообщать об ошибках при их возникновении, прерывать запись. Ты же не обрабатываешь ошибки. Например, fwrite теоретически может записать меньше байт, чем ты ей дал (на практике, это бывает только при работе с сетевыми сокетами, а не файлами на диске). Эти особенности описаны в мануале PHP по этим функциям, который стоит прочесть.Последовательные вызовы ftell/fseek вообще не имеют смысла. Ты сначала выясняешь текущую позицию в файле, и затем меняешь ее на ту же самую.Далее, запись по 5 байт за раз бессмысленна и неэффективна. Пиши кусками, кратными 4096 (размер страницы памяти в x86), размером в 128-1024 Кб, чтобы уменьшить число системных вызовов.Далее, в твоем случае проще вообще использовать file_put_contents, которая записывает всю строку в файл целиком.
>>1538996Ты выкачиваешь проект к себе локально. Делаешь себе локальную копию базы, с вырезанными приватными данными, либо полностью с фейковыми данными (в идеале тебе такую копию выдает старший программист). Разворачиваешь и убеждаешься, что все работает.Затем ты изучаешь архитектуру, читаешь документацию. Из этого получаешь ответ на свой вопрос. Если ты все прочел, но все равно не понял - то открываешь страницу в браузере, смотришь ее код, находишь какие-то уникальные слова, классы, идентификатоы и ищешь их поиском по коду, заодно учишься этому процессу.Вносишь нужные правки. Тщательно тестируешь свои правки: - под анонимом- под пользователем магазина- под сотрудником и администратором- для обычных товаров- для необычных товаров со скидками и опциями- нажимаешь все затронутые правками кнопки, ссылки, проверяешь весь функционал- смотришь, что в инструментах разработчика (F12 в браузере) не появилось JS-ошибок и предупреждений из-за твоих правок- смотришь, что твой HTML и CSS проходят валидациюПеречитываешь задачу и убеждаешься, что все требования сделаны. Если ты начинаешь ныть, что это тяжело, сложно, скучно и долго, то ты идешь на мороз и тебя заменяют на нормального разработчика.После этого ты выгружаешь изменения на продакшен. Если вы используете систему контроля версий, то коммитишь в нее и просишь старшего программиста отдать это тестировщикам и зарелизить. Если у вас есть код-ревью, то просишь отревьюить, и исправляешь замечания.
>>1539016> рандомТекст - это слог? Да>преобразовать массив в строкуЯ просто решил через .=, мне интересно, как это через массив решить.Через массив решаю так:$name[]=$randomText;$name=implode($randomText) - как раз та функция, которая в строку переводит, но в:echo"советую {$name} - не прогадаешь" - все равно выводит пустую строку
Как сделать по фен-шую вывод данных на страницу сайта, сделанного на Ларавел?По идее, данные должны быть наглухо отделены от кода, так? Значит их нужно хранить в базе. И доставать через модель. Окей. Но на практике? Вот есть страница контактов компании, на которую нужно кинуть штук десять текстовых блоков. Это сопроводительный текст, адрес, телефон и всякое иное, хранящееся в таблице contacts. Получается, нужно сделать 10 запросов к базе, получить 10 переменных и каждую вставить в нужное место? Или всё же можно сделать один запрос, забрать коллекцию, а во вью уже прописывать, в какое место какой элемент коллекции вставлять? Но я не нашёл, как это сделать. Только фигачить каждый раз перебором через foreach всю коллекцию и вставлять элемент, в котором есть нужное совпадение. Но это явно не фен-шуй.
>>1539028>$name=implode($randomText) - как раз та функция, которая в строку переводит, но в:подожди, ты понимаешь что делает функция имплоде? Она берет массив и раскладывает его в строчку. Массив она берет. А ты суешь в нее слог ($randomText). Попробуй $name=implode($name)То-есть логика, я так понимаю, такая:1.Делаешь цикл2.На каждом шаге цикла в переменную рандомТекст суешь случайный слог3.В этом же шаге цикла эту перменную рандомТекст суешь в массив. (можно 2 и 3 объединить)4.Цикл закрывается.5.У тебя есть массив наме со слогами. Тебе надо его разложить в строку функцией имплоде. Функция имплоде принимает на вход массив, а не кусочек слога. Пишешь$name=implode($name)тут ты говоришь - хочу в переменную наме, в которой раньше был массив, записать имплод этого массива.6.Выводишь name
>>1539019Спасибо за ответ.Этотим кодом я только логику fwrite пытался понять. >>автоматически сдвигает указатель на текущую позицию в файлеЭтого как то я сразу не понял. А по итогу получается что в случае нескольких вызовов:fwrite($fileCursor, $JSON, 5);fwrite($fileCursor, $JSON, 5);fwrite($fileCursor, $JSON, 5);указатель будет перемещаться. Но из входящих данных всегда будет браться первые 5 1024 кб. Все выовы выше вернут одни и теже первые 5 байт.И как я понимаю на уровне fwrite() нет механизма что управляет данными которые записываются? И нужно скрамливать fwrite() данные по кусочками?
>>1539026да спасибо антуан, все так и сделал. помогло.только тут таких хуев наворотили с цмской, попутно выпилив из нее все че только можно (например артикул товара, универсальный код товара, номер производителя и тд и тп оставили только зачем то японский код товара куда они выводят зачем то вещи которые должны быть в атрибутахв связи с этим вопрос - где можно узнать про то где эти вещи блять могут находиться в самой цмс в файлах есть ли какой то документ там по этой хуйне? чтобы я хоть мог как то разобраться + сделать поставленную задачу?
>>1539319начинай реверс инжиниринг с верстки и иди вверх по стеку что и кого вызывает, всегда так делаю когда ничего не понятно
>>1539325ну легко сказать, анончик. я вот щас пытался найти откуда идет переменная которая выводится и облазив весь файл так и не нашел никаких признаков что к этому файлу что то подключается извне
>>1539430да я знаю. но увы пока проект через фтп приходится ебаться вот так вот. а из за соображений кококобезопасности качать его нельзя
>>1539319>попутно выпилив из нее все че только можноВ каком смысле? Прямо вообще? Или в админке просто не заполнены поля? У тебя, кстати, вообще есть доступ к админке этого опенкарта?>куда они выводят зачем то вещи которые должны быть в атрибутахКакие именно?
>>1539439Маразм какой-то, ты так больше времени просто потратишь и все. И, кстати, протокол FTP передает все в открытом виде и небезопасен. Можно залогиниться на сервер через ssh и искать переменную по файлам с помощью команды grep.
Аноны, поделитесь плиз ссылочкой на конфу по изучению пхп в телеге. В нашей 4 анона, а кто-то тут писал, что уже есть такие конфы, поэтому будет рациональней перекатиться, чем создавать ещё одну.
>>1539439Кстати, я вот вообще не понял, как ты будешь работать с проектом, если запрещено его скачивать себе? Или запрещено скачивать полностью, а можно только те файлы, с которыми будешь работать?
>>1538431Очень многие люди со скринкастов работают на маке, правда конечно он скорее похож на линукс, нежели на винду, но все равно. А так да, согласен, что чем больше ковыряешься в серверах и устанавливаешь софт для программирования, тем чаще встречаешь какие-то соснольные команды, которые в винде работают только через жопу и смену 5 конфигов
>>1538278> 3) Разделяй свою систему на четыре слояБоб Мартин?Какой ты умный, пхп анон. Хочу с тобой дружить.
>>1539639Мак не просто похож на линукс, это и есть линукс, просто с нескучными обоями и своим набором проприетарных пакетов.
Как можно сделать на css/bootstrap вот такую майнд-карту? Путь даже с жёстко заданными блоками. Пока что придумал только задавать absolute значения для каждого элемента. А вот как сделать связующие линии вообще не представляю.
>>1539996>А вот как сделать связующие линии вообще не представляю.HTML же может чертить линии. А стиль линий используешь аналогичный блокам. И да, фУУнкционал
>>1539996Кривые линии сделать будет сложно. SVG подошел бы гораздо лучше.Bootsttrap тут вообще не при чем, это фреймворк с стилями для текста, меню и кнопочками, а не фреймворк на все случаи жизни.
>>1540003>SVGТочно, для кривых использовать его. Фактически это будет некая "подложка" из SVG и наложенные на неё блоки. Надо будет попробовать сделать. Пойду гуглить, в чём делается SVG.>>1540000Он может чертить линии под углом, а не только горизонтальные? Вот тут https://codepen.io/anon/pen/vxPwpd пример с вертикальной, но именно под произвольным углом?
>>1540005Сам нашёл. https://ru.stackoverflow.com/questions/98664/%D0%9B%D0%B8%D0%BD%D0%B8%D1%8F-%D0%BF%D0%BE%D0%B4-%D1%83%D0%B3%D0%BB%D0%BE%D0%BC-30-%D0%B3%D1%80%D0%B0%D0%B4%D1%83%D1%81%D0%BE%D0%B2
Изучаю Пых по вашим гайдам. Решаю задачку по функциям. Чекните, пожалуйста, чтобы это не было говнокодом? А то задачу вроде решаю, но жепой занятой сербами чую что это какой то код индуса. Вот ссыл_очка https://ideone.com/IWnVEt . Спасибо!
Не понимаю как строить всякие модели для каких-то утилит.Например, взять утилиту cat из Unix.Какие там классы должны быть?class Readerclass Writerclass CatServiceТакие что ли?r = new Reader(stdin, "\n")w = new Writer(stdout)s = new CatService(r, w)s.run()Так что ли?
>>1540237Одного класса хватит. Ты создаешь новые классы для какой-то цели, по какой-то причине. Если причины нет - пиши все одним классом. Хотя тут логичнее вообще обойтись без классов, просто сделать кучку функций и основной скрипт, который разбирает параметры командной строки и вызывает нужные функции.Не делай классы ради классов. Не делай бесполезные обертки.
Двоч, я в жизни ничего не писал на PHP, но тут горит дедлайн по проекту в универе, поэтому прошу помощи.Вот есть данный АПИ - https://github.com/ddsky/spoonacular-api-clients/tree/master/phpМне нужно посылать туда реквесты, получать какие-то ответы, но я не могу разобраться с этим Composer. Я по разным туториалам понял, как добавлять dependencies с сайта packagist.org, но вот этот апи там какой-то то ли неофициальный, то ли ещё какая-то хуйня, в общем, я не смог заставить его работать, поэтому решил пойти по инструкции самого апи на гитхабе. Там пикрелейтед-1. Но я не понимаю, что туда писать вместо GIT_USER_ID и GIT_REPO_ID. Я пробовал писать ник пользователя гитхаба и название самого репозитория (пик-2, в общем), но получал ошибку.
>>1540814случайно отправил, недописав.В общем, вопрос следующий: как добавить эту блядскую зависимость ? Что писать в composer.json ? Ну и выглядит ли вообще инструкция с гитхаба правильной, потому что этот АПИ даёт ключи для использования, а на гитхабе даже не показано, где его вводить.
Пикрелейтед 1 - данные, которые отправляет ажакс на сервер.Пикрелейтед 2 - где эти данные ловятся в контроллере.Вопрос:какого лешего file_id проходит, а count теряется где-то по пути?
>>1540186я не ОП, но попробую объяснить0)Говнокод - это код, который работает правильно, при этом являясь нечитаемым/неподдерживаемым. Твой код не попадает под этот критерий, т.к он не только нечитаемый, но и неправильно работающий. 1)Кредит это цикл, итерирующийся по месяцам. В данном случае нужно просто проверять в нем положительность кредита. У тебя же какая-то непонятная хрень(тем не менее в теории она может работать). 2) Ошибка - в цикле ты сначала отнимаешь деньги, а потом проверяешь $credit < 5000, и в случае успеха делаешь платеж ( второй за месяц)3)называй функцию нормально а не fcredit, и пиши задание комментом перед кодом
>>1541011Поменял порядок параметров в запросе - теперь не приходит file_idУ меня щас стул замироточит от этих чудес.
Первая пикча как звучит задача, вторая как она должна решаться. Cсобственно мое решение: https://ideone.com/qJGuoo Мое решение работает только для слов, где встречается латинская буква всего раз, если же латинские буквы встречается несколько раз, то регулярка находит и выводит это слово по частям. Тут проблема в регулярном выражении, которую я не могу решить. Была еще подсказка в задаче: "Подсказки для глупеньких: слова с опечатками найти легко: это слово, которое начинается с одной или нескольких русских букв, за которыми идет латинская. Ну или начинается с латинской, за которой идет русская. Достаточно минимальных знаний регулярных выражений, чтобы написать решение." Но я либо глупый, либо не было предусмотрено, что будут такие слова с несколько раз встречающимися латинскими буквами. Также буду очень рад выслушать любую критику о мое написании кода
>>1541081Разобрался - метод getQueryParams не выдаёт данные по ключам, а сразу всей пачкой вываливает.Держу в курсе.Вот и слушай петухов со стаковерфлоу - проще самому исходники глянуть.
Работяги, как вы начинали писать на фреймворке? Просто когда начинаю писать - хочется закрыть и сижу афк. Не важно какой фреймворк. Без него почему-то и желание есть.
>>1541367Советую взять какую-нибудь нормальную книгу, а не просто статейку.Я несколько лет назад изучал Yii по этой книге (покупал) https://larry.pub/ Сейчас, смотрю, автор уже пилит книгу по Yii2. Там насколько просто и подробно всё разжевано, что я не знаю кем надо быть чтобы не понять как это всё работает.Если найдешь такое по Ларавелу и Симфонии (я не искал, сорян) то можешь учиться по ним.
>>1541382Если ты можешь читать на английском, так чтобы не по странице в полчаса, то читай на английском.
Смотрю ваки на хх и не догоняю чёто - в каждой требуют знание пары фронтенд фреймворков, даже если требуется пхп-разраб. Это работодатели такие охуевшие и хотят одного человека сразу на всё или я такое говно, которое по бэку в основном, а фронт - чисто для того, чтобы накидать интерфейс и прикрутить какой-то минимум эффектов?Этак они через год ещё и дизайн на программистов сбросят.
>>1541574Ну смотри, на проекте фронтент на каком-нибудь условном Вью тебе дали голую вёрстку календаря и сказали связать это все с бэкендом, при необходимости что-то допилить. Как ты будешь это делать не зная фреймворков? Или даже просто внести правки в работу вью скрипта. Эйчар не ищет фуллстак девелопера в команду, без знания фреймворков ты банально не сможешь полноценно работать.
>>1541578>Вью тебе дали голую вёрстку календаря и сказали связать это все с бэкендом, при необходимости что-то допилить. Как ты будешь это делать не зная фреймворков?Нахуй надо тогда бэк учить? На фронте не кидают подправлять код ларавель со словами - "как же ты будешь фронт писать не зная фреймворков?"
>>1541578Ни в одной ваке на js-кодера не встречал требований знания Laravel и Symphony или Yii, а вот на пхп через одного - по паре фронтенд фреймворков, не считая нативного.И самого бэка со всеми вытекающими - БД, линуксов, хттп и тд.
Или это только в моей мухосрани так? Счас по ДС чекнул - всё вполне пристойно - бэк на серверсайд, фронт на клиента. Без пачки перекрывающих технологий из другой сферы, вроде Vue, React, и по какой-то хер, jQuery на позицию пхп-кодера лол.Походу, не мытьём так катаньем берут - за 25к никого не найдёшь, так хоть за 60к пущай всего побольше знает.
>>1541367Возможны две причины.Первая - тебе интересно всё писать самому. В этом случае, сорян, большая часть кода уже написана, тебе нужно просто её использовать. Разработчики сейчас не пишут всё с нуля - они связывают готовые компоненты между собой.Второе - тебя пугает сложность. Что сказать, какой-нибудь симфони писала компания очень умных людей в течение десяти лет, что бы ты ни делал - ты скорее всего не сможешь построить что-то продуманнее или качественнее, просто ресурсов не хватит. Поэтому проще разобраться с текущим набором инструментов, чем выдумывать свои.>>1541372Блять, прекратите даже вспоминать про это говно. Yii2 был сомнительного качества ещё когда только появился на свет, а сейчас это ещё и заплесневевшее говно сомнительного качества. Лучше симфони/ларавела в мире php ещё не придумали, смиритесь уже.
есть такой то кусок кода для опенкарта https://ideone.com/jxYJN1 здесь он отвечает за вывод названия атрибута и само его содержание. так вот такая то проблема - какого хуя он выводит только последнее добавленное значение если у меня стоит foreach???
>>1541578Поэтому я вкатился в разработку для мобилок. Фронта нет, спокойно пилю свои апишки не забивая голову жсом.
>>1541633<?if($attrib['attribute_id'] == 10):?> <?=$attrib['name'].': '.$attrib['text'];?> <?endif;?>Зачем эта хуйня? Выводишь только элемент с attribute_id 10.
На деях приступаю к переписыванию самодельного веб приложения типа круд с плюшками на фреймворк. Какой выбрать: симфонию или лару?
Так, если у меня в чтения двачерского учебника по пхп что-то не получается с первого раза и приходится посидеть подумать какое-то время (иногда длительно), то это ок?
>>1541822Я, помню, когда проходил задачку на кредит, вообще охуел с того какой я тупой и минут 30 дрочился. Ну а сейчас вкатился и поворачиваю деревья шлепаю круды
аноны, переключение по тегам реализовано при помощи ajax и пагинация соответственно. в какую сторону копать чтобы отладить? в том плане что там если больше товаров чем на одну страницу то вообще ничего не отображается, а если умещается на странице то все ок
>>1539319Анон с опенкартом, ты так и не ответил на вопросы. Мне реально интересно, как тебе дали доступ по фтп, но запретили выкачивать. И как ты узнал про японский артикул, не залезая в контроллер или админку. А если залез, то почему возникли вопросы по вью.
>>1541855не заходил в тред, поэтому и не отвечал. ну вот так вот и дали. в связи с этим сказали работай через вс код (хотя мне через тот же пхп шторм удобнее) и сиди через фтп пиши на тестовом домене допиливай то и то. админку дали, про японский артикул узнал так же через админку когда залез и вижу что японский артикул выводится, а все остальное нет. так же еще атрибуты были вырезаны нахуй благо только во вьюхе и пришлось их самостоятельно пилить. такие то дела.алсо, есть несколько страниц в магазе которые редиректятся сами на себя. где примерно найти то, что за эту проблему отвечает? в обработчике сео или где еще? просто интересует каковы причины того что все ссылки нормально работают а некоторые сами на себя почему то редиректятся
>>1541848Так какая же у тебя пагинация, если выводится больше чем на одну страницу?Делается это довольно просто - ажаксом берёшь с бэка фиксированное количество записей со смещением. Это и есть постраничный вывод. И ничего ломаться не должно.
>>1541924>ЗашкварноЗашкварно использовать такой зашкварный подход. Попенсервер это просто инструмент.Тебя всё равно найдут за что обоссать на двочах. Поэтому просто используй то, до чего ручонки дотянутся.
>>1541933проблема в том что он выводит его через жопу. когда жму на кнопку след страницы он листает на самую первую страницу, когда жму на кнопку пред страницы то он кидает на самую первую страницу>Делается это довольно просто уверен? тут висит пагинация которая была стандартная в опенкарте + прикрутили еще ту что была с модулем. в итоге хуй пойми что именно за что отвечает. нашел два жс файла где в коммитах написано что пагинация и карусель - закомитил оба полностью нахуй - - пагинация все равно работает ))
>>1541911>>1541911>в обработчике сео или где еще?Могли SeoPro подключить. Или с ЧПУ-ссылками запутаться. Или в роутере запутать. Или настройки редиректра сервера конфликтуют с .htaccess. С редиректами любая фигня может быть.У тебя родной Опенкарт, или ocStore? И 2 или 3?
>>1542015SeoPro тут нет. я сразу же пошел первым делом проверять>Или с ЧПУ-ссылками запутаться. >Или в роутере запутать. >Или настройки редиректра сервера конфликтуют с .htaccess.а как это блять поточнее узнать? и вообще - разве я должен это фиксить? сидеть в настройках htaccess перебирать параметры которые смогут помочь мне нормально работать на моем окружении
Анончики пожалуйста почаще упоминайте про Yii2 тут. Я просто с этого додика проигрываю постоянно >>1541624>Блять, прекратите даже вспоминать про это говно. Yii2 был сомнительного качества ещё когда только появился на свет, а сейчас это ещё и заплесневевшее говно сомнительного качества. Лучше симфони/ларавела в мире php ещё не придумали, смиритесь уже.
>>1542076Да, очень, именно поэтому он так популярен. Считаю, что это лучший вариант для новичка, который поможет ему не только изучить правильные подходы к разработке и архитектуре, но и быстрее найти достойную работу.
>>1542080Симфони архитектурно более правильный и даёт тебе больше возможностей, но при этом никак не ограничивает тебя от написания чего-то ужасного. Ларавел архитектурно похуже, но зато он проще для вката и есть куча мануалов на тему "это делай так-то", каких-то готовых рецептов и решений. Я бы начал с ларавела, если бы вкатывался прямо сейчас.
Вопрос по js.Я перебираю dom по классам А, для найденных результатов снова перебираю по классам Б, и уже для найденных там нужно определить, не является ли их ближайшим next соседом, див с классом А. В консоль валятся ошибки, что браузер не может получить свойство ундефинед. Как я только не изгалялся, пытаясь взять этот некст и проверить его класс через classList.containsТри часа сидел и бился в какую-то ерунду, которая ДОЛЖНА работать. Там же просто - берёшь некст и смотришь класс. ВСЁ. Но нет.Может вы подскажете, как это сделать?https://jsfiddle.net/9outzahp/
>>1542203Сорян, но ты хочешь чего-то странно и непонятного, а значит с большой долей вероятности ты сам себе сформулировал неправильную задачу и теперь тщетно пытаешься её решить. Скажи нормально что нужно, а не то как ты решил это решать, тебе скажут нормальное решение.
>>1542229Вызывается статической метод create класса Schema и в него передается два параметра: первый параметр - строка 'dogs', второй параметр - функция, которая принимает в качестве аргумента объект класса Blueprint, внутри этой функции этот объект будет доступен в переменной $table.Всего скорей статический метод create - это фабричный метод, который будет тебе создавать разные схемы, в зависимости от того, какие ты параметры в него передашь. В паттернах профан, поэтому поправьте, если ошибаюсь. Судя по тому, что ты передаешь в create строку 'dogs' и функцию, которая принимает какой-то Blueprint (чертеж), create тебе вернет какую-то схему собак. Надо смотреть код или читать документацию или комментарий.
>>1542203У тебя с вёрсткой проблемы - ты её не понимаешь.Никто не делает вложенные друг в друга классы с одним и тем же названием. Зачем это надо?Отсюда и проблемы твои.
>>1542252она создает таблицу в БД.там ниже в коде все элементарно.Но вот эту строчку я не до конца понял
>>1542229СхемаБД::создать('собаки', коллбек для создания таблицы(сама таблица под именем $table)Что тут сложного? Это даже проще чем ручками через пхпмайадмин делать.
>>1542258ну тебе проще,а я только вкатился.интуитивно я все понял,но вот с точной расшифровкой не совсем вкурил
>>1542258Круто, что ты написал, что это речь о БД, по названию классов и методов это вообще не очевидно.
>>1542284Это то что надо?https://stackoverflow.com/questions/10753024/how-to-access-the-command-line-for-xampp-on-windows
>>1542286>по названию классов и методов это вообще не очевидноПотому, что документацию надо читать перед использованием.
Пачаны, я создал одну реп на гитхабе и коммичу туда уже пятый коммит, а оно всё не отображается на этой зелёной плитке активности. Только первый коммит висит, когда заливал.Сам реп публичный.Это глюк такой или я чего-то не знаю?
>>1542236>>1542253Да я всё пытаюсь вот такую картинку нарисовать через svg: >>1539996Нашёл неплохой пример http://jsfiddle.net/5g9z7t0o/2/Но у меня немного другая схема должна быть, поэтому нужно как-то разруливать ветки. Я подумал, что логично каждую ветку выносить в отдельный блок, а подветки лепить уже там. Получается, что если под блоком blockBubble есть блок divBranch, то в этом бранче находится его ветка.
>>1542298А, так ты в таком ключе про вёрстку. Тогда да - вложенность возможна.Я бы перед работой вспомнил у гугла что там по деревьям - для понимания сути процесса.
>>1542314https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_(%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)Ты же дерево описываешь своим js кодом.
>>1542327Это не про дом, а про то, что ты пытаешься сделать и не знаешь как разруливать ветки. А разруливаются они именно через деревья т.к. по сути твои линии это графы.А код, который ты нашёл, он немного про другое.
Друзья, добрый вечер.Есть строка: $text = "Текст Текст Текст [photo]Photo.jpg[photo]Текст Текст Текст [photo]Photo2.jpg[photo]";необходимо найти, то что находится между тегов [photo].Пробовал explode('[photo]', $text);Но это не совсем подходим. Так как explode('[photo]', $text)[0]; выведет => "Текст Текст Текст ", а мне нужно что бы выводились только названия фоток. Кто нибудь может помочь с решением данной проблемы ?
>>1542351Строковой.Если не можешь сам решить свою проблему - не ищи халяву тут, а ищи исполнителя за деньги.
сам програмача снова. так в чем может быть проблема редиректа ссылок на самих себя? в магазе есть типо блог со статейками, и вот есть ссылки на статьи которые сами на себя редиректятся. перекопал всю базу данных - таких статей и кейвордов для этих ссылок там тупо нет. что или кто могло их зарезервировать и в каком направлении копать то?>>1541911 - кун
>>1542561Проще всего пойти на хх.ру или другой портал с поиском работы. Забей туда программиста и посмотри что стоит в требованиях. Это и будут самые актуальные фреймворки, которые надо учить. Там везде симфони, ларавель и уи. Ну еще битрикс для эстетов
>>1542615То есть к статическим классам это отношения не имеет? Слово static просто так?И в чём тут полиморфизм?
>>1542715>>1542615>>1542714Мда.. нуфагов полон тред... Загуглили сами не поняв что и строите из себя знатоков. Я уже сам разобрался, что static используется только потому, что self занят. И они оба вызываются из статических функций, потому и static.
Я правильно понял, что PHP FastCGI работает только с Apache с помощью mod_fastcgi, а для Nginx есть только реализация FastCGI в виде PHP-FPM?
Что я делаю не так?юзаю fpdf. нужно вывести русский текст. Здесь сгенерировал шрифт http://www.fpdf.org/makefont/make.phpДалее пишу$pdf->AddFont('TimesNewRoman', 'B', 'TimesNewRoman.php');$pdf->AddFont('TimesNewRoman', 'I', 'TimesNewRoman.php');$pdf->AddFont('TimesNewRoman', '', 'TimesNewRoman.php');$pdf->SetFont('TimesNewRomanB','B', 12);Какого фига у меня выводит просто текст без Bord выделения? тоже и с курсивом - не форматирует.. То есть тупо кладет болт и весь текст выводит без какого-либо форматирования (на дефолтных шрифтах все норм, кроме того что русского нет)
Пытаюсь в задачу W2 из гайдаНе получается перемножить переменные в echo, хотя в гугле сказано, что переменные нормально умножаются через звездочку.
аноны, подскажите как получить лицензию на пхпшторм легально ? пришел на галеру, а тут заявляют что вот мол сам решай с этим братка, мы нашим сотрудникам не покупаем. а пиратить нельзя а то пиздос сам понимаешь ))есть какой то легал способ?
>>1543446>мы нашим сотрудникам не покупаемстул хоть дают или свой приносить?Раньше за фотку с зачеткой вроде давали "студенческую" лицензию. Погугли может еще дают.Можно триал ресетить скриптом в линуксе. Но это такое.
>>1543446>пришел на галеру, а тут заявляют что вот мол сам решай с этим братка, мы нашим сотрудникам не покупаемЯ бы нахуй послал таких обнаглевших.Работодатель обязан обеспечить работника инструментом и рабочим местом. Это даже где-то в кодексе написано.Рили, дропай их. Пока тебя не дропнули на зарплату или ещё чего.
>>1543538С одной стороны да, с другой почти все конторы среднего уровня и ниже предлагают пиратить это всё дело.Если всё прочее на этой галере норм, то я б остался.
Я потратил ЕЩЁ ОДИН день на то, чтобы понять, почему я не могу взять класс элемента соседа в dom. И я так и не понял.Всё что нужно - это выбрать соседа и проверить, какого он класса. Сосед выбирается, окей. Я могу посмотреть его .text() - это будет ПРАВИЛЬНЫЙ текст. А вот класс посмотреть не могу. Нет у него свойства "contains" в .classList.contains('divBranch').Я перепробовал все варианты. ВСЕ. Возможно, проблема в разнице между this и $(this), но все возможные их комбинации я тоже перепробовал. Я прочитал всё, что мог прочитать. Я не понимаю, где я проёбываюсь? Серьёзно, я потратил на одно это уже часов 10 времени. https://jsfiddle.net/h6ntuajw/1/
>>1543564>другой почти все конторы среднего уровня и ниже предлагают пиратить это всё делоХз, у моего знакомого даже фотошоп купили для сервиса делания фоток и прочего распечатывания\ксерокопий.В любом случае я бы дропал их при первом же случае. Прост отношение к своему бизнесу как к говну не воодушевляет как-то.
>>1543677Не как к говну, а просто это стоит денег, которые можно сильно не платить (потому что ну а кто и что сделает? На пиратство всем наплевать в России). На эти деньги проще уж 13-ю зарплату выплатить дополнительно, чтобы люди не разбежались.Понятно, что это не самый лучший звоночек, но и не шоустоппер, каким ты пытаешься это преподнести. Просто нужно делать выводы. Можно прямо на собеседовании спросить, есть ли лицензия.
>>1543694>которые можно сильно не платитьСтранный оборот. Ты не из этих кабанчиков с палёным софтом?Это актуально было в начале 2010х, но никак не в 2020.>На эти деньги проще уж 13-ю зарплату выплатить дополнительноДа конечно. А ещё на них шлюх можно нанять для работников. Но на деле ни 13ю ни лицензию никто не получит - сказки не рассказывай.Как минимум могли бы ломаным софтом обеспечить, если бы заботились о сотрудниках.>каким ты пытаешься это преподнестиДа обычная полуподвальная галера-однодневка, где джунов как синьоров продают. Как только жареным запахнет - все разбегутся, а через пару месяцев всплывёт под новым именем.>Просто нужно делать выводыЯ и сделал.
>>1543446Никакой воин не служит на собственном обеспечении. Ты похоже выбрал не очень удачное место работы. Но сливаться сразу необязательно. Зачем тебе именно PhpStorm? Тяжеловесная штука, не дающая никаких особых преимуществ. Заюзай VS Code, или что-то другое. Или можешь юзать триал. Можно целый месяц пользоваться, а потом переустановить. Еще можно не переустанавливать. Просто она будет каждые 30 минут вырубаться.
Аноны, здравствуйте. Я вот ларавел немного подучил, осталось пару разных сайтов на нем забахать и идти пытаться на Джуниора? Или продолжить обучение тестирование, апи,докер и т.д?
Привет. Сразу скажу что нихера не учил пока, но срочно встал вопрос добавить в сайт вот такую вещь.Нужно фастом реализовать вот что: есть 10 (условно) стобцов, в каждом столбце 10 предложений. Как через что реализовать механизм который каждый раз будет из каждого столбца по очереди брать рандомное предложение и выдавать пользователю? То есть по нажатию нужно выдать 10 предложений, и каждый раз система должна брать из каждого столбца 1но рандомное предложение. Бля, надеюсь понятно объяснил.
>>1543779А что с ними, куда пихать? Ругается. Зато с одной фигуристой скобкой не ругается, хотя нигде раньше ее не писал.
Не понимаю как должен работать класс аутентификации Auth. И гугл ничего толкового не выдаёт, кроме документации к ларавель и чего-то древнего. Должен ли он отвечать только за сессии, устанавливая и возвращая токен пользователя и ещё что-то такое минимальное? Или, как у кого-то на гитхабе, содержать кучу доп.логики: регистрация, логин, логаут, восстановление пароля и тд? Во втором случае, мне кажется, лучше это всё в AuthController какой вынести, а не в сервис.Что он вообще должен уметь делать как сервис?
Что я делаю не так?юзаю fpdf. Нужно вывести русский текст. Сгенерировал шрифт http://www.fpdf.org/makefont/make.phpДалее пишу$pdf->AddFont('TimesNewRoman', 'B', 'TimesNewRoman.php');$pdf->AddFont('TimesNewRoman', 'I', 'TimesNewRoman.php');$pdf->AddFont('TimesNewRoman', '', 'TimesNewRoman.php');$pdf->SetFont('TimesNewRoman','B', 12);Какого фига у меня выводит просто текст без Bold выделения? тоже и с курсивом - не форматирует.. То есть тупо кладет болт и весь текст выводит без какого-либо форматирования (на дефолтных шрифтах все норм, кроме того что русского нет)
>>1543972Ты уверен, что правильно сгенерировал шрифт? Попробуй заюзать его где-то ещё, болдом или курсивом. Я сталкивался с подобными симптомами с рядом шрифтов, которые не умели в болд.
>>1544026вроде нашел - оказалось все убого - нужно было найти эти же шрифты но с болдом и курсивом и их сгенерировать (то есть три разных шрифта)
Аноны, хочу попердолиться с консольными приложениями. Системные потоки, все это. Но нихуя вообще не понимаю.Подскажите что почитать в общем. И конкретно для ПХП можно и для Node.js, по очевидным причинам идти в JS тред смысла не особо вижу пока что
Котомальчики, подскажите кто в симфони (3.4) разбираетсяДелаю задачу опа про систему тестов. Только начал, решил для простоты попробовать отправку почты через систему... и ничего не получается. Сайт развернут на хостинге бегета. Использую стандартный свифт-мейлер, встроенный. Прописал пароли в parameters.yml.Пытаюсь отправить по-всякому - не получается. В логах мне пишут:app.ERROR: Exception occurred while flushing email queue: Connection could not be established with host smtp.beget.comВопрос первый: почему у меня соединение не подтверждено? Я пароль/логин от хостера ввел, сам в свою почту зайти могу, надо в parameters.yml дополнительные параметры добавлять?Вопрос второй: а я могу тупо вместо смтп.бегет.ком вставить свою яндексовскую почту с логином и паролем? Так может прокатить?Вопрос третий: кого мне вообще тормошить? Провайдера/хостера? Просто если я обычную библиотеку типа PHPMailer вручную подключаю контроллеру, то так все отправляется. А системной почтой симфони 3.4 не отправляется. Куда копать-то?
Возможно, тебе надо зайти в свой ящик и дать разрешение системе безопасности, что это ты к нему коннектишься, а не кто-то другой.Например, если пытаешься отправить письмо из php со своего гугл ящика, то подключение к нему будет заблокировано гуглом и тебе на ящик придет письмо с требованием подтвердить что это ты. И пока ты там все галочки не прожмешь - ты к нему не подключишься.
>>1544423спасибо, анон, попробую. А вообще я могу вместо хостинговского яндексовский указать сервер? Или обязательно тот адрес, где сайт лежит?
ajax-пагинация кун снова в треде. при пагинации через аякс дублируется контент который выводится. при том что дубликация почему то происходит не больше двух раз (?) самого блока с классом row. в чем может быть проблема и что именно то фиксить? сам пхп код или жс код то ?
>>1544737ну вот что то типа того https://ideone.com/hE6Q8U странно что почему то показыввает это только джва раза, а не при каждом новом клике добавляет это
Задача на таблицу умножения решена правильно или нет? в Иде не запускается код, хотя ошибок нет, погуглил интернеты - а там таблицы умножения вообще огромные какие-то. https://ideone.com/Z32XSi
>>1545194Неправильно. $n+1 * $n вот это явный косяк, почитай внимательнее, что должно находиться в этом месте в for. Ну и даже если бы это работало, то тебе бы выводило "2 на 2 будет равно 2".
>>1545224Попытка 2 https://ideone.com/cTvsfkЕще непонятным остается следующее - почему первые фигуристые скобки указывают на вторые в конце, а вторые - наоборот?
>>1543610Я хз что ты пытаешься сделать, но ты хоть консолькой пользоваться умеешь?nextDiv - содержит найденный сиблинг, если есть, имеет размер (не знаю зачем, возможно это просто массив), плюс содержит ссылку на предыдущую ноду. Поэтому:if (nextDiv.length){ nextDivClass = nextDiv[0].classList.contains('divBranch'); }Алсо, какая же хуёвая документация у жквери, брр!
>>1543610Блять, макак не дает ответить!nextDiv = div.next();console.log(nextDiv); //<--- твой броif (nextDiv.length){ //<---ты же ленивая собака посмотреть свойства, да?nextDivClass = nextDiv[0].classList.contains('divBranch'); //<--- опять же не посмотрел, да?}Консоль, Люк!
Собираюсь сделать решение тестов на время в задаче про тестхаб следующим образом: как только юзер начинает делать тест, высчитывается дедлайн и записывается в базу. При отправке каждого ответа от юзера, проверяется не истекло ли время. Это адекватное решение, или можно как-то по-другому?
>>1545390Зачем тебе две переменных с одинаковым значением? И умножение стоит перенести в тело цикла, в условии оно не нужно.
>>1545546Придётся каждый раз открывать соединение с базой данных. Не проще создать объект, который имеет свойства с timestamp?
>>1545546Нормально, только зачем ответ на каждый вопрос отправлять? Отдавай сразу все вопросы на клиент и получай сразу все ответы. Меньше мозгоебки с сессиями и вот этим всем. Я бы вообще какой-то try/attempt сделал бы, тогда можно считать сколько попыток и вот это всё
>>1545583 Как-то не подумал, что можно саму на себя умножать переменную, зато до этого и умножил, и прибавил. Умножение перенес в тело цикла, иду дальше.
такой вопрос,вот допустим есть сайт на пхп и кнему надо прикрутить чат.Ставим сокет на ноду.но для сохранения сообщений,нужно подкл драйвер для бд к той же БД,что и использует пхп,через который ты создаешь свой акк с необходмым полем под сообщения там?
>>1545603>Отдавай сразу все вопросы на клиент и получай сразу все ответы. А что если юзер, допустим, получит вопросы. Сделает несколько заданий в тесте, но не до конца и закроет браузер. Как тогда его ответы получить?
Аноны, вдруг кто шарит - каким нативным модулем в node js можно скрапить разметку сайта.В инете сотни примеров со сторонними библиотеками.А я хочу сам заморочиться. Начал немного изучать ноду, и хочу сказать что для "обычных" целей она не нужно. Но очень быстра, очень.Отправлял одинаковый запрос на стороннее АПИ, 1000 запросов, с одинаковым набором действий и финальной записью в файл. Нода была чет запредельно быстрее.Но видимо сказалось что пхп у меня полноценное приложение на slim было, с контроллерами и прочей бородой.А на ноде - тупо консольное приложение.Щас небольшие консольные приложения пилю.
>>1545842>Отправлял одинаковый запрос на стороннее АПИ, 1000 запросов, с одинаковым набором действий и финальной записью в файл. Нода была чет запредельно быстрее.На пхп ты наверное просто в цикле запросы выполнял, да?
>>1545891Да, так и есть.Но и на ноде я тоже самое делал.Хотя логично 0 нода асинхронно отправляет кучу запросов, запросы очень легкие.А пхп в одном потоке по очереди каждый запрос отправляет.Видимо от этого и разница.
>>1545842Нативных модулей нет. Есть клевый cheerio, который позволяет тебе работать с DOM в стиле JQuery - с CSS селекторами и некоторыми дополнительными удобными функциями.
>>1546203Понятно что прям модуля "скрапинг" нет.Но к примеру cheerio - он же реализован на node? Значит и я свой велосипед могу накатать. Значит есть в node какой то поток, которым можно сдирать html разметку
>>1546235Или вот банальная тема - хочу залить файл на сервер из формы. В пхп это делается элементарно нативным способом.В ноде нужно как то распарсить объект request и вытащить бинарник картинки. Мне хочется сделать это из интреса - но нихуя гайда найти не могу никакого.
>>1546237п.с. это даже как то раздражает. Шел фреймворк через фреймворк. Фреймворк что бы сопли вытереть, что бы жопу помыть. Сотня бородатых пидорасов на красочных страничках расскажут тебе как сделать че угодно. Ты только установи двадцать пять фреймворков.И хоть бы где найти инфу, как нативно работает загрузка файлов/картинок от клиента к тебе на сервер. Какой поток, каокй буфер, типа.Сраные смузиебы
Сап, друзяшки, помогите с курсовой. Есть вот такая вот таблица, напротив каждой строки есть кнопка редактировать. И вот мне нужно передать значение ячейки 'Id_Ser', той строки на которой была нажата кнопка редактировать, в другой пхп файл. Как такое делается?
>>1546392Не понял, но скорее всего тебе надо:-каждую кнопку делать не кнопкой, а ссылкой вида<a href="/другой_пщп_файл_куда_отправлять.php?Id_Ser=<?php echo $f["Id_Der"]; ?>">отправить</a>То-есть у каждой ссылки есть сама ссылка на нужный тебе скрипт, а после знака вопроса идет перечисление параметра, который ты методом Get туда хочешь передать:<a href="ссылка на скрипт?параметр=значение">нажать</a>и уже в том скрипте, куда послал, проверяешь массив $_GET, в нем должна лежать твоя переменная $_GET["id_der"]
>>1546439Большое спасибо. Но возникла другая проблема. Если я пытаюсь изменить значение Cost в таблице через переменную $num значение которой я получаю из файла на 2 пике, она всегда приравнивается нулю 0. Если же я в sql запросе просто поменяю переменную $num на обычное число, или даже на переменную $ids, то всё нормально поменяется. Что за бред?
>>1546616Тут надо тестировать. Для начала сделай var_dump($_GET);на первом скрипте, после инклудов.так ты посмотришь что приходит в массиве, откуда берешь переменные. Какие вообще переменные приходят? Тебе выйдет много-много информации, ты поиском найди название своих переменных ($_GET["Id_Ser"]). Не пустые ли они у тебя вообще.И анон, у тебя вторая форма вообще закрывается? Та, у которой акшн = упдейт?
>>1546616Так аношка подожди. У тебя первый рисунок это что? Это файл update.php? Ты туда из второй картинки по клику на кнопку "получить результат" второй формы пересылаешь две переменные айди-сер и сум? А где на второй картинке переменная айди-сер? Там только сумм. Как ты айди-сер то передаешь?Если у тебя есть форма, в ней есть поле инпут со значением, которое ты хочешь передать, ниже есть кнопка "отправить", а ниже есть таблица с сылками типа <a href="ссылка на скрипт?параметр=значение">нажать</a>, то это скорее всего не сработает. Ты передаешь переменные либо через поля формы, либо через урл ссылки.
>>1546638>Тебе выйдет много-много информацииМне вышло только вот это (пик1) после ввода суммы. До ввода вместо summ было id_ser. Значение в обоих случаях были верны>И анон, у тебя вторая форма вообще закрывается? Та, у которой акшн = упдейт?Вроде да>>1546652>Это файл update.php?Да, первый рисунок это он.>Ты туда из второй картинки по клику на кнопку "получить результат" второй формы пересылаешь две переменные айди-сер и сум?Нет, только сум.>Как ты айди-сер то передаешь?Пик2>то это скорее всего не сработает. Тогда почему если я echo $sum в файле update.php напишу, то он мне выведет ее правильное значение?
>>1546687Подожди, я запутался. Поправь меня, у тебя есть страничка. На ней есть сначала форма с кнопкой отправить. Форма ведет на скрипт аптейд.пшп. В самой форме есть поле инпут со значением сумм = величина.Одновременно с этим у тебя ниже формы есть еще таблица, у которой есть ссылки вида <a href="апдейт.пшп?Id_Ser=значение">нажать</a>Правильно? Если так, то, по-факту, у тебя на странички есть ДВЕ точки входа в скрипт. Они не знают друг о друге. Верхняя точка реализована через форму и она отправляет только сум, а нижняя точка реализована через ссылку с параметрами, и она отправляет только ид-сер. Если ты нажмешь на кнопку формы, форма не заберет значения из ссылок, она не обучена. Если ты нажмешь на ссылку - то ссылка не передаст значение поля сум, только ид-сер.Если хочешь передавать обе переменные в скрипт, тебе надо:1.Реализация через форму - добавляешь перед кнопкой еще поле <input type="hidden" name="id_ser" value="<?php echo $Id_ser;?>" >это скрытое поле. Тогда форма скажет ага, у меня есть два поля, их я и передам.2.Реализация через ссылки - добавляешь в ссылки еще один параметр сум, то-есть будет что-то вида<a href="update.php?id_ser=величина&summ=величина">ссыдка</a>переменные после знака вопроса отделяются амперсандом - это "И"
>>1546720Есть 3 файла. update.php пик1. update.html пик2. new7.php пик3.> На ней есть сначала форма с кнопкой отправить.Кнопка отправить есть только на new7.php, В ней инпута нет. Инпут есть в update.html.>1.Реализация через форму - добавляешь перед кнопкойНе понял перед какой кнопкой именно, поэтому вставил туда update.html , где после этого хоть что-то поменялось пик4. До ввода суммы id_ser был верен, после ввода стал равен этому пик4
>>1546768ну конечно я обосрался. пик1 это - update.html . пик2 - update.php.хотя там в заголовке итак написаннобыстрофикс
>>1546768Анон, у тебя сам интерфейс не очень удачно выбран. Получается, что значение sum существует только на странице update.html, а значение Id_Ser существует только в области видимости страницы new7.php. Оба они отправляют данные на апдейт.пшп, но делают это независимо друг от друга. Поэтому в одном случае один параметр не передается, во втором случае второй параметр не передается. Если ты даже добавишь на страницу апдейт.штмл скрытое поле с переменной id_Ser, то там будет лежать ноль, потому что значение туда никак из другого скрипта не попадает. Тебе желательно совместить эти две логики в одну, потому что они друг о друге не знают, или предварительно передавать в каждую из страниц неизвестный для нее параметр.Ты можешь избавиться от одной из промежуточных страниц?Можно все вывести на одной странице?
>>1546795>Ты можешь избавиться от одной из промежуточных страниц?Я вставил update.html внутрь update.php. Я всё правильно сделал? Так или иначе, результат всё тот же
>>1546837Тебе надо объединять апдейт.штмл и нью7.пшп на одну страницу, чтобы у них была общая область видимости.Или тебе надо сначала показывать пользователю нью7.пшп, потом из нее вести на апдейт.штмл, передав туда айди-сер, а потом из апдейт.штмл вести на апдейт.пшп, передав туда айди-сер плюс сум.Илитебе надо сначала показывать пользователю апдейт.штмл, из нее вести на нью7.пшп, передав туда сум, и потом с нью7.пшп вести на апдейт.пшп, передав туда сум плюс айди-сер.Какая у тебя логика приложения вообще? Как связаны отчет за 2017 год и форма "введите сумму"?
>>1546850>Какая у тебя логика приложения вообще? Как связаны отчет за 2017 год и форма "введите сумму"?вот так вот сценарий
>>1546850>тебе надо сначала показывать пользователю апдейт.штмл, из нее вести на нью7.пшп, передав туда сум, и потом с нью7.пшп вести на апдейт.пшп, передав туда сум плюс айди-сер.>Тебе надо объединять апдейт.штмл и нью7.пшп на одну страницу, чтобы у них была общая область видимости.Нельзя, не по сценарию сверху.> передав туда айди-сер, а потом из апдейт.штмл вести на апдейт.пшп, передав туда айди-сер плюс сум.Как? Поменял ссылку на update.html, дальше что?
>Что почитать>- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл>- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программированияа есть что то из этого десятилетия?
поскольку дедлайн горит и один из разрабов оч вовремя перед нг слег с воспалением легких меня резко перекинули на проект на опенкарте да я знаю что ебанутая галера и поставили задачу где надо допилить модификатор - собсно как это сделать то? где откопать эти файлы? с чем работать то? гугол говорит что при установке модификатора он меняет там ядро и поэтому его надо перепиливать или что?
>Где прочесть официальный мануал на русском по PHP?>http://php.net/manual/ru/langref.php без смс и регистрацииА русский мануал медленнее правят по сравнению с английским? Просто я читал всякие википедии и арчвики, там всегда на английском инфа новейшая, в то время как инфа на русском языке всегда старая на хотя бы месяц.
Вопрос немного филосовского характера.Делаю сайт на Ларавеле. И понадобилось выводить на страницу контакты: мыло, телефон, ссылки на всякие страницы. Понятно, что в админке человек просто заводит нужный контакт и выбирает из выпадающего списка что это за контакт, url/email/skype. И в базе хранится именно так: в одном поле условный "email@email.com", а в соседнем тип контакта "email". А посетитель видит на странице уже подготовленную ссылку <a href="email@email.com">Почта</a>Так вот, где правильно (с точки зрения MVC) собирать из данных в базе, ссылку во вью?а) Прямо во вью. Из контроллера получать контакт и тип контакта, и в зависимости от типа делать нужную обёртку.б) В контроллере. Получать из модели контакт и его тип и делать обёртку, отдавать во вью строку.в) Прямо в модели и отдавать контроллеру уже подготовленную строку, которую тот просто отдаст во вью.
>>1548142в модели не должно быть никакой логикиво вью ты просто выводишь результатыследовательно все это ты должен обрабатывать в контроллере
>>1548177Глупости. Контроллер - это по сути просто хендлер для роутов, там должен быть минимум логики. Подгрузка данных должна происходить в модели, а стилизация, темизация и форматирование - во вью.
>>1548263>>1548177Оба врут и не краснеют. Тупо делаешь страничку index.htmlТам на таблицах верстаешь шаблон.В середину шаблона вставляешь без тегов "связаться со мной: мыло такое-то".Все. Голый html. Остальное лишнее и только усложняет интерфейс.
>>1548177>в модели не должно быть никакой логикиЯ читал разные описания MVC, например вот такое, претендующее на истину от её создателя: https://habr.com/ru/post/321050/И там говорится, что в модели нужно обрабатывать ВСЮ логику работы с данными. Другое дело, что обработка вида отображаемого контакта - это уже не бизнес логика, а логика отображения. Поэтому думаю, что в модели это обрабатывать не стоит.>>1548283Согласен. Но на дворе почти 2020 год и если ты не делаешь сайты на фреймворках, то они тебе перезвонят.>>1548263>стилизация, темизация и форматирование - во вью.Ну ок. Не знаю, почему все так бугуртят с "уродливого толстого контроллера", но ладно. Пусть это будет делать вью.Кстати, а давно у двача изменились шрифты в поле ответа? Сегодня почистил систему, скинул настройки браузера на дефолтные, и сразу заметил, что стало как-то не так. Шрифт слишком жирный, раньше был тоньше.
>>1548283Пока не окажется, что мыло для связи выводится ещё на 100500 страницах, формах и так далее.Никогда нельзя хардкодить данные в шаблонах. Потому что всегда потом все про них забывают и сайт начинает показывать устаревшую информацию, в лучшем случае.В крайнем случае, можно вынести почту в конфиг и читать её оттуда.>>1548313> Ну ок. Не знаю, почему все так бугуртят с "уродливого толстого контроллера", но ладно. Пусть это будет делать вью.Потому что это разные вещи. Ты не совершай типичной ошибки, не путай модель предметной области с моделью базы данных.Контроллер принимает запрос, извлекает из него необходимые данные и передаёт их необходимому обработчику из модели предметной области (где уже будет и база, и сервисы, и прочие ништяки), потом получает данные из этого обработчика и передаёт их нужной системе вывода.Понимаешь, да?Предметная область оперирует данными, ей должно быть похуй, была ли она вызвана через апи, форму, по крону или как-то ещё.Ей просто нужен шлюз, который поймёт, что нужно вызвать именно этот сценарий, а не какой-то другой.А ты зачем-то начинаешь в код вызова сценария предметной области писать сам предметный код. Странно, как будто у тебя часть мыслительного процесса происходила в глазных яблоках, не доходя до мозга.
>>1548354Перечитал последнее предложение и понял, что это звучит, как оскорбление. Имелось ввиду, что логика в контроллере - это как мыслительный процесс в глазных яблоках. Глаза считывают свет, преобразовывают его в сигналы и посылают в мозг, больше ничего.
>>1548354Сделал разбор во вью. Получил 4 участка дублирующего кода.Зелёным выделил те элементы, которые изменяются. Если сделать разбор в контроллере, то получится более лаконичный блок case, а во вью не останется дубликатов вообще. Разве это не логичнее? Может быть в blaid можно создавать собственные переменные? Я не нашёл, как это сделать.
>>1548142 По поводу контактов. Если не требуется редактировать их в админке, то проще всего прописать где-то в конфиге и выводить в нужных местах из конфига. Если они выводятся только в одном месте, то можно просто их туда руками прописать. Если же ты хранишь их в БД, то получается такая схема: - в контроллере запрашиваем из модели нужные данные и передаем во вью. Скорее всего, это будет набор объектов (сущностей), где один объект соответствует одному контакту.- во вью разбираем их и выводим. Ты можешь сделать это в отдельном шаблоне, если хочешь, чтобы выводить контакты можно было и в других местах сайта. Я чуть ниже напишу про эту идею.> Так вот, где правильно (с точки зрения MVC) собирать из данных в базе, ссылку во вью?> б) В контроллере. Получать из модели контакт и его тип и делать обёртку, отдавать во вью строку.> в) Прямо в модели и отдавать контроллеру уже подготовленную строку, которую тот просто отдаст во вью.Неправильно, так как представление данных в нужном формате (HTML) это задача вью. Хотя бывают ситуации, когда вью вызывается из сервисов или контроллеров. Например, если мы хотим отправить письмо, мы вызываем вью, чтобы сформировать текст письма по шаблону, а затем это письмо отправляем. Теперь про "виджеты" или "компоненты". Если у тебя есть какие-то блоки, которые могут встретиться на нескольких страницах (например: блок комментариев или блок со слайдером картинок или карточка товара в магазине), имеет смысл делать их в виде отдельного шаблона, у которого определен набор входных данных. Тогда ты сможешь их легко подключать на любую страницу. Стоит также делать их верстку независимой от оркружения, и выносить CSS/JS для них в отдельные файлы. Так ты получишь отдельный компонент, который можно тестировать отдельно на пустой странице и подключать куда угодно. Хотя, тут тебе это не требуется, но в будущем может пригодиться.
>>1548354Мне кажется, ты только запутываешь всех термином "предметная область" (domain). Вот ее определение: https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BD%D0%B0%D1%8F_%D0%BE%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D1%8C> Предметная область — множество всех предметов, свойства которых и отношения между которыми рассматриваются в научной теории> Предметная область — часть реального мира, рассматриваемая в пределах данного контекста. Ты наверно, что-то другое имел в виду. Может быть, "модель предметной области" (domain model) - это набор объектов, которые имитируют/представляют нужные нам объекты из реального мира. >>1548396Хорошее решение. Если хочется сократить код, можно сделать получение имени класса (contactLogoEmail) в переменную и вынести общие части наружу за switch.Также, ты можешь сделать получение ссылки (вида ) в объекте contact, методом $contact->getUrl().И молодец, что пытаешься разобраться, как лучше.
>>1548283 Ты не учел вариант, когда контакты надо вывести в нескольких разных местах сайта.>>1548139 Есть задержка, но ты можешь стать бесплатным переводчиком и помочь (взамен будешь лучше знать PHP): https://www.php.net/manual/help-translate.php>>1548042 Понятия не имею. Начни с чтения про архитектуру CMS и что такое этот "модификатор" и дальше уже смотри на код проекта. >>1546616У тебя может быть SQL-инъекция в коде, так как ты вставляешь переменные напрямую в SQL-запрос. Прочти урок про безопасную работу с SQL-запросами и исправь ошибку, пока ей не воспользовался злоумышленник: https://github.com/codedokode/pasta/blob/master/security/sql-injection.mdТакже, на всякий случай прочти и про XSS: https://github.com/codedokode/pasta/blob/master/security/xss.md>>1545842Разметку обычно "скрейпят" с помощью библиотек, которые позволяют искать элементы в дереве DOM или с помощью XPath (язык запросов для поиска узлов в XML-дереве), или с помощью CSS-селекторов. Что ты хочешь вместо этого? Вручную разбирать HTML-разметку? Разбирать дерево DOM?
>>1545995 В PHP в Guzzle точно так же можно параллельно 1000 запросов отправить.>>1546235> Значит есть в node какой то поток, которым можно сдирать html разметкуТы не понимаешь смысл слова "поток". Поток исполнения (thread) - это некая абстрактная сущность ОС, которая выполняет код последовательно. В каждом процессе есть минимум один поток, и можно создавать дополнительные, чтобы какие-то функции выполнялись в отдельных потоках параллельно с основным кодом. При чем тут HTML разметка? Если ты хочешь работать на низком уровне, тебе надо начать с протокола HTTP. Ты отправляешь HTTP-запрос к серверу и получаешь HTTP-ответ, в теле которого содержится HTML-разметка страницы в виде строки. Это и есть тот низкий уровень без лишних библиотек. Вот статья про HTTP: https://github.com/codedokode/pasta/blob/master/network/http.mdЕсли хочется изучить HTTP глубже, к твоим услугам стандарты HTTP на английском, максимум деталей, но тебе понадобится делать записи, а то в голову не поместится, но если ты это прочтешь, то станешь умным: - https://tools.ietf.org/html/rfc7230- https://tools.ietf.org/html/rfc7231- https://tools.ietf.org/html/rfc7232- https://tools.ietf.org/html/rfc7233- https://tools.ietf.org/html/rfc7234- https://tools.ietf.org/html/rfc7235 Чтобы отправить HTTP-запрос, надо либо взять какую-то библиотеку HTTP-клиент, например: https://nodejs.org/api/http.htmlЕй ты отправляешь запрос, получаешь ответ и делаешь с ним что хочешь без ненавистных тебе библиотек. Дальше стоит его распарсить в дерево DOM, так как напрямую с HTML-кодом работать очень неудобно. Для этого, увы, нужна библиотека для DOM.
>>1546237Тебе нужно изучить сначала протокол HTTP. А потом HTTP-клиент, на который я давал ссылку выше. При отправке формы браузер форматирует данные формы и содержимое файла в формате multipart/form-data. Эти данные помещаются в тело POST-запроса HTTP, который отправляется на сервер. Тебе надо: принять запрос, извлечь тело, декодировать данные из кодировки multipart/form-data и получишь содержимое, имя и тип файла. multipart/form-data официально описан в RFC: https://tools.ietf.org/html/rfc7578А также в стандарте HTML: https://www.w3.org/TR/html52/sec-forms.html#multipart-form-data>>1546264Я тебе дал ссылки. Читай и задавай вопросы, я дам еще ссылок и помогу найти ответы. Просто ты читаешь всякую херню вместо документации или стандартов, а потом жалуешься на фреймворки, хотя они рассчитаны на тех, кто низкоуровневые вещи уже изучил. И не уходи из нашего треда, нигде больше тебе не дадут столько полезных ссылок и советов.>>1545546 Адекватное. >>1545603 На случай проблем со связью или перезагрузки компьютера. Ну и можно мерять, сколько времени он решал тот или иной вопрос.
>>1545634Не очень понял вопрос но да, нужно будеть подключаться к БД, чтобы в нее что-то сохранять.>>1545390Тут хватит одной переменной. Также, у тебя есть ошибки. Вот устройство оператора for:for (действие до; условие; действие после шага) {тело;}В "действиях" можно писать несколько выражений через запятую, но в "условии" - нельзя. В "условии" можно объединять условия с помощью операторов && (и) и || (или). Например: for (...; $a < 10 && $b < 10; ...)Выполнять цикл, пока a меньше 10 И b меньше 10. Если хоть одно условие нарушено - выйти из цикла. Также, переменная $f создается у тебя только после выполнения первого шага и недоступна на первом шаге, о чем тебе пишут. Правильнее создавать ее в теле: for (...) {$f = ...;echo ....;}
>>1543610 Давай я подскажу, где искать правильный ответ в таком случае. Твоя проблема в том, что ты путаешь объекты из дерева DOM, которые используются в браузере, и объекты jQuery. JQuery - это сторонняя библиотека, и она создает свои объекты-обертки, содержащие внутри объекты DOM. Вот тебе пример: var x = document.querySelector('.x'); // x - это null или объект DOMvar y = document.createElement('div'); // y - элемент DOMvar a = $(x); // a - объект jQuery, содержащий внутри xvar b = $('.y'); // объект jQueryvar z = a[0]; // z - объект DOMС помощью console.log(z) ты можешь увидеть тип объекта.Свойства и методы объектов jQuery описаны в мануале jQuery: https://learn.jquery.com/Свойства и методы объектов DOM описаны в: - документации MDN, например: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement- отличном учебнике: https://learn.javascript.ru/dom-nodes- официальном стандарте DOM: https://dom.spec.whatwg.org/#interface-element В нем описаны общие свойтсва узлов DOM, а в стандарте HTML описаны дополнительные поля и свойства уже для конкретных тегов: https://www.w3.org/TR/html52/textlevel-semantics.html#the-a-elementЕсли ты вместо изучения будешь наугад что-то переставлять, у тебя всегда будут такие проблемы. Надо разбираться, а не переставлять команды наугад. В твоем случае, div.next() возвращает объект jQuery, а ты пытаешь обратиться к свойству classList, которое есть только у объектов DOM. Об этом написано в документации тут: https://api.jquery.com/next/ , видишь, там написано: > Returns: jQueryЧитай документацию, не ленись. И задавай вопросы, я тебе подкину еще ссылок, если надо.
>>1545336И ты тоже читай документацию. jQuery-объект имитирует массив, содержащий элементы DOM, и потому у него есть свойство length и свойства вроде 0, 1, 2 ... итд. В твоем случае, незачем извлекать DOM объект, так как у jQuery есть метод hasClass(). Документация у jQuery имхо нормальная, если ты понял принцип его работы.
>>1548588Я пришёл к таким же выводам и вместо того,чтобы изучать jQuery просто дропнул весь этот пример и написал с нуля на чистом js. Будет время - вернусь к изучению. Твой пост сохранил в файл, когда понадобится, буду изучать.
Написал простейший Хэллоу ворлд - в яндекс браузере работает а в опере показывает сам код, из-за чего такое?
>>1548783Если ты просто сделаешь файл index.php и откроешь его браузером, то ничего не гарантировано. Твой файлик это как грам-пластинка. А тебе надо проигрыватель, чтобы его проиграть. Тоесть надо открывать твой файл сервером, который умеет в php. Апач например. Но проще взять опенсервер - он бесплатный, установить себе на компьютер (просто папку указываешь), потом запустить опенсервер, и тогда он уже откроет твой файлик. Если не хочешь мороки и у тебя простой хеловорд - попробуй онлайн компиляторы аля https://rextester.com/l/phpЭто тоже самое, только сервер удаленно работает. Почитай шапку, там оп все написал
>>1549188https://habr.com/post/150267/Реализация MVC паттерна на примере создания сайта-визитки на PHP
Аноны, делаю задачу про создание сайта с тестами. Вопрос: можно пне по-умолчанию считать, что у пользователя включен джаваскрипт? Потому что половина функционала типа перетаскивание вопросов, визуальные редакторы работают на джаве. В крупных конторах предъявляют требования из разряда "САЙТ ОБЯЗАТЕЛЬНО ДОЛЖЕН РАБОТАТЬ БЕЗ ДЖАВЫ И ОТОБРАЖАТЬСЯ В ИЕ 6 !!" >>1549188А чем тебе слим не подходит?
>>1549391А у тебя есть какая-то градация выполнимости?Крупные проекты ты с движками и паттернами делаешь, а еслипланочка ниже опустилась - хоп и каменным топором на коленке точишь? Чмо ты лицемерное. Зарепортил за двойныестандарты
>>1549406Градация есть, называется "не страдаю хернёй". Если мне нужен сайт-визитка то это статика, какой у тебя там экшон будет в контроллере? "Отдай страницу"? "Отдай контактные данные"?Если у тебя на сайте нет динамических элементов, то тебе будет достаточно генератора статических сайтов, то есть шаблонизатора и простенького конфига. Один раз сгенерил html и потом отдаёшь его.
>>1548584>В "условии" можно объединять условия с помощью операторов && (и) и || (или)А где такие тонкости узнать можно?
>>1549629Феррейра Фило Владстон - Теоретический минимум по Computer Science. Все, что нужно программисту и разработчику подойдет? CS50 навряд ли осилю, люблю текст, а не видосы.
здорово клуб, кто-нибудь знает, как на хероку с приложением на ларавел получить npm? У меня там во время развертывания вылетает ошибка `npm: command not found`
>>1549690>>1549660аношка, я новичок, мало что понимаю. Но вот на других хостингах типа бегета есть терминал. Если ты туда что-то добавить в проект, просто в командной строке пишешь композер рекьюре пакет.Может у тебя на хероку тоже есть терминальная команда, которая сама автоматом добавляет пакет в проект, а потом обновляет композертипа чего-нибудь такогоhttps://devcenter.heroku.com/articles/nodejs-support
У меня эффект Манделлы.Был Бутстрап-3 и у него было так:xs – экраны до 768pxsm – экраны от 768px до 992pxmd – экраны от 992px до 1200pxlg – экраны более 1200pxПотом вышел Бутстрап-4 и у него всё было то же самое. Я вроде как даже верстал на 4, используя те же <div class="col-lg-2 col-md-3 col-sm-6 col-xs-12"></div> И тут внезапно замечаю, что новый сайт (который делаю) ведёт себя неправильно. Залезаю в бутстрап и вижу --breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;WTF, думаю я и лезу в документацию к 4. А там указано уже совсем другое:xs: 0 // Extra small screen / phonesm: 576px // Small screen / phonemd: 768px // Medium screen / tabletlg: 992px // Large screen / desktopxl: 1200px // Extra large screen / wide desktopИ код должен быть таким: <div class="col-xl-11 col-lg-9 col-md-6 col-sm-3 col-3 q">1</div>То есть, для xs вообще нужно указывать без размера, просто col-. Это когда такое произошло? Они что, реально сместили все размеры? Почему я это проспал?
Да, и ещё, а давно двач сменил шрифты? В поле ответа был тонкий шрифт. И в постах он был не таким жирным. Вот даже на тредшотах другой шрифт.
>>1550181У меня для тебя плохие новости>>1550177>Это когда такое произошло? Они что, реально сместили все размеры? Почему я это проспал?Это вроде в 3 был col-xs а в 4 просто col-, ты не сошел с ума, расслабься
Аноны, а существует на пхп какое то решение, что позволяет создавать учетный записи гугл? Либа какая нибудь.Или это невозможно?
Товарищи программисты, подскажите, могу ли я зайти в консоль приложения с компонентом symfony/console по аналогии с консолью Rails для тех же целей (апдейтить модельки в базе из REPL). Если да, что для этого нужно? Гугл шлёт меня в PsySH, но хотелось бы использовать иcкоробочное решение.
>>1550557Уже почитал, PsySH в PHP это как Pry в Ruby, маст хэв. Но непонятно, откуда его запустить, чтобы работало.
>>1550561Непонятно, нахуя.`php -a` и вперёд. Если что-то сложное - выноси в отдельный файл и запускай через `php script.php`, всё равно удобнее будет через IDEшку писать.
>>1550561А, тебе нужны консольные команды.. Как правило, фреймворк предоставляет свою консоль, где можно это делать, какой-нибудь `symfony console` к примеру. Делаешь `php bin/console your:command:with:args a b c d` и вперёд.
Ребят, привет. Это снова я.Долго решал задачу про палиндром.Решил двумя способами: через массивы, так как строки в начале не осилил и через строки.Это вариант решения через строки: https://ideone.com/sEG2AhЯ правильно решил или x[], y[] нарушают задумку автора?
КлассА наследуется от КлассБ: Метод1: возвращает результат КлассБ->Метод2КлассБ наследуется от КлассВ: Метод1: возвращает результат КлассВ->Метод2Классы А и Б идеологически одинаковыеМетод2 в классах Б и В возвращают одинаковую стркутуруЯ чувствую что можно написать один класс Х вместо двух А и Б, но не знаю как это сделать, потому что ноль в ООП. Как ООП может выручить меня?
>>1550835Чет велосипедно, можно же вторую подстроку реверсно пустить в том же цикле.https://ideone.com/8cCMlL
>>1551071Напиши псевдокодом, потому что такое описание практически нечитаемо.(я это воспринял как-то так: https://ideone.com/K15m2w , к слову)И да, лучше объясни, что ты хочешь сделать, скорее всего эти три класса тебе вообще нет смысла наследовать.
Аноны, а что такое неофициальный API?Родилась мысль попердолиться в сторону ватсап-бота, но оказалось что доступ к оффициальному API платный.НАчал гуглить - пишут что доступ можно получит через не офф. АПИ, но с вероятностью бана, что мне не нужно.Так как же работает неоффициальное апи?
>>1550772>>1550775Нет, ты первый раз более правильно понял. Мне нужен REPL в приложение, как pry в rails, как shell_plus в django, только в приложение на symfony. Не нужно менять код приложения более того он зашифрован, нужно только использовать классы и методы. Ну, должно же быть что-то для `post = Post.find_by(created_at: '19/12/19 Чтв 11:46:55'.to_datetime); post.update(text: post.text.reverse)` в PHP?
Господа. Нужен совет по архитектуре. Суть такова:На работе есть задача написать приложение, которое будет отправлять запросы в нашу базу и получать ответ. Типа сервис отчетов. Все банально.Морочит меня то, что запросов таких может быть дохуя, потенциально к соточке. Причем запросы могут быть относительно разными. 100 шаблонов и 100 методов контроллера обработки для каждого отдельного запроса я не перенесу.Т.е. генерация html и минимальное возможное количество методов в контроллере моя цель.Как у меня сейчас -каждый sql запрос храню строкой в отдельном файлезапрос может быть легко вылезать из а4 листа. Так же придумал некий массив- в котором определенная инфа , а так же данные для генерации разметки(количество и тип инпутов, разметка, атрибут name(это важно, он должен совпадать именем параметра подстановки PDO) ) .В контроллере это все загружается, сопоставляется - и отрисовывается результат. После пост запрос.Просто из за обилия разных файлов,я путаюсь нахуй.Как бы вы поступили? Может просто пихнуть все мои запросы и массивы строкой тупо в базу? И уже оттуда все это дело тащить?
>>1551317Да, очевидно 100 разных шаблонов должны быть в базе, а не файлами в папке templates. Теперь мне подскажи плиз: >>1551305
>>1551305https://github.com/theofidry/PsyshBundleТолько учти что на симфони скорее всего стоит доктрина которая нифига не Post.find_by, там придеться попотеть, но в принципе всё делается как на скринах в репе.Устанавливаешь пакет, запускаешь через php bin/console psysh, в шелле через ls будут доступные переменные, через контейнер получаешь нужные объекты, в принципе всё понятно я думаю
>>1551369Спасибо, что стараешься помочь, только у меня более сложный случай.Внутри проекта обе команды> find . -type d -name app> find . -type f -name consoleничего не находят. Есть vendor/autoload.php и vendor/symfony/console/ (там лежит компонент). Если просто так попробовать запустить psysh, валится с ошибкой Failed opening required 'bin/check-requirements.php' как в https://github.com/bobthecow/psysh/issues/524Я не особо понимаю, как проверить, целиком приложение на symfony или только отдельные компоненты заюзаны.
>>1551450Разобрался, как запустить, оно мне говорит> PHP Fatal error: Uncaught Symfony\Component\Debug\Exception\ClassNotFoundException: Attempted to load class "AppKernel" from namespace "Fidry\PsyshBundle\Functional".> Did you forget a "use" statement for another namespace? in /home/anonymous/PsyshBundle/bin/console:29> Stack trace:> #0 {main}> thrown in /home/anonymous/PsyshBundle/bin/console on line 29Всё, соснул? Не будет симфонии?
>>1551465>Не нужно менять код приложения более того он зашифрованЭто каким образом? Обфусцирован как-то? В пхп классы обычно линкуются по соглашениям имя класса -> путь к нему в файловой системе, так что да, можно сказать что соснул
На фрилансе всегда так много говнокода и боли?4 ебаных часа искал строку в кучах каких-то ненужных жаваскрипт говен от вкатывальщика 70процентов кода легко под нож пустить можно. Я вроде тоже вкатывальщик, но хоть хабр читал, а тут ъуъ какой-то совсем. Такое ощущение, что его 30 человек дописывало и каждый свою нотку поносного аромата добавлял.Я тоже добавил.
>>1551480>Обфусцирован как-то?Да, ionCube Loader, потому что это лицензионная параша, но доки и поддержка про консольный доступ ничего не говорят. Господи, как же хочется на рельсы, какие же рельсы охуенные, всю бы жизнь сидел на рельсах. мамо чому я этим занимаюсь
>>1551494>Такое ощущение, что его 30 человек дописывало и каждый свою нотку поносного аромата добавлял.Это не только на фрилансе бывает, а вообще в любом месте, где JS дописывают случайные люди вместо программистов. Рыночек порешал, что заказывать фичи программистам дорого, проще вставить костыль на jQuery из stackoverflow (в лучшем случае).
>>1551450Ты уверен, что не напутал ничего? PsySH - это REPL-оболочка, которая позволяет вызывать функции PHP-приложения.PsyshBundle - это бандл для приложения на Симфони, который позволяет интегрировать приложение на Симфони с PsySH для более удобного взаимодействия.Ты установил бандл как положено (добавил строчку в composer.json, сделал composer update, добавил вызов бандла в код приложения)? Как описано тут: https://github.com/theofidry/PsyshBundle#installУ меня ощущение, что ты то ли этот бандл просто скачал, не интегрировал и пытаешься запустить, то ли забыл композер вызвать, то ли еще что-то. Опиши, как ты его устанавливал и интегрировал с приложением.Если твое приложение не использует фреймворк Симфони, а только компонент symfony/console, то интегрировать в него бандл не получится. Бандл только для приложения на фреймворке Симфони.Если у тебя не Симфони-приложение, то используй просто PsySH без бандла. В нем подключи autoload.php для автозагрузки классов. Что делать дальше, зависит от приложения, если оно использует Di Container и Doctrine, то получи их так же, как это делает приложение, если не использует - то значит, ищи другие способы.PsySH тебе не добавит функции для работы с БД. Ты должен либо использовать функции из приложения, либо писать свои.
>>1551317 Не надо бояться сделать 100 классов-генераторов и 100 файлов-шаблонов. Просто вынеси какие-то общие моменты в функции, например, если у тебя в большинстве случаев просто данные из массива выводятся как HTML-таблица, ну сделай функцию для этого.Чем плох твой подход: - ты заложил ограничение, что любой отчет строится одним SQL-запросом, но это не обязательно так, может, надо как-то дополнительно обработать данные, может нужны дополнительные запросыВ твоем случае, можно сделать "генератор" отчета функцией, которая получает на вход параметры и возвращает какие-то данные. Или классом, унаследованным от абстрактного класса.Зачем делать 100 методов контроллера, я не понял. Сделай один, в который передается имя отчета и в котором есть массив вида имя => функция/класс для генерации. Удобно сделать имя отчета совпадающим с именем класса.Чем удобны функции или классы - тем, что в IDE к ним можно просто перейти по имени. А вот в твоей схеме в один клик, наверно, к запросу не перейти. Чем удобны классы - тем, что в нем можно сделать базовый класс с методами по умолчанию и переопределять только нужные: class BaseReport{public function getTableData() { .. }public function getTitle() { ... }public function getInputNames() { ... }}Имеет смысл хранить запросы в БД если у тебя есть админка для их редактирования и их будут редактировать какие-нибудь менеджеры. Если их пишет программист, то ты бессмысленно усложнишь код вынесением их в базу, и в твоем коде сложнее будет разобраться.>>1551320 Это только усложнит код и его понимание.
>>1551502>У меня ощущение, что ты то ли этот бандл просто скачалДа, я делал так, потому что приложение, к которому надо подключиться, ставится без composer'а, composer.json там есть только в сторонних компонентах.>Если твое приложение не использует фреймворк Симфони, а только компонент symfony/console, то интегрировать в него бандл не получится.Видимо, ты прав. Значит "зайти в консоль" как в рельсах, где всё подгружается само, а мне остаётся пинать методы, тут в принципе не получится. Хреново. Спасибо.
>>1551193 Это значит, что ты его используешь без ведома и разрешения разработчиков, оно может меняться в любой момент, тебя могут банить итд. >>1551071 Не надо ничего делать. Единственно, наследование применимо только к отношениям вида "X это улучшенный/расширенный Y". Например, ты можешь унаследовать Банк от класса Организация, или Танк от СредствоПередвижения, но ты не можешь наследовать Работник от ОтделаБухгалтерии. То есть нельзя наследовать что попало от чего попало. Если X наследует Y, то значит X - это Y, объект X можно передавать туда же, куда и объект Y итд. Так что лучше проверь, применимо ли вообще наследование в твоем случае.>>1550835> for($i=200;Зачем тут писать число? Используй длину строки (mb_strlen(...)).Ну и твое решение немного переусложненное получилось. Без дополнительных массивов вышло бы проше, если писать цикл так: цикл (i идет 1 до середины строки) { пусть позиция символа слева = i пусть позиция симметричного ему символа справа = j = (длина строки минус i минус 1) если символы в позициях i и j разные, то это точно не палиндром, иначе продолжаем проверять}Код надо лучше форматировать. Убери лишние отступы, например перед $y = implode(..);В решении со строками https://ideone.com/8cCMlL примерно так и получается. Вместо $i умножить на -1 можно писать просто -$i. Минус это еще и унарный оператор (ставится перед выражением).
>>1550561 Ты запускаешь его, подключаешь vendor/autoload.php для автозагрузки классов и можешь после этого их создавать. >>1550177 Если есть различия, надо сравнивать по документации, а не гадать. Также, там эти размеры как-то наследуются, то есть ты можешь задать только один размер и он распространится на все размеры больше (или меньше, не помню).>>1549660Нужно установить nodejs, для этого могут понадобиться права администратора, или надо читать мануалы, может у них на хостинге это как-то особенно делается. Через composer его не установить. Через composer можно ставить только PHP-библиотеки, а не нативные программы.
>>1551511Спасибо за ответ!Я правильно понял твою логику:У меня на роут /reports/report№(от 1 до 100 к примеру) приходит запрос.По этому роуту я вызываю класс-контроллер ReportsController.Я хотел избежать варианта когда на каждый из report№... в классе ReportsController приходилось бы создавать отдельный метод обрабатывающий соответствующий роут.Ты же предлагаешь в общем для всех запросов /reports/report№... методе класса-контроллера ReportsController вызывать некий класс ClassGenerator, который возвращает уже результат запроса.Но разве это просто не отодвигает проблему того что запросы могут быть разными просто в более глубокий уровень вложенность?Я не создам сто методов в ReportsController. Я создам сто методов в ClassGenerator. Ну или как то опишу один метод ClassGenerator максимально под общий случай запроса.Или я тебя не понял по итогу?Мне нужно некое само себе противоречащее архитектурное решение. Хочется кучу отчетов, но каждый отчет может менять свой текст sql, у каждого отчета свой html (пусть и похожий, но разное количество полей ввода и их типов. Для этого существует объект свзязанный с sql запросам - из этого объекта генерится htnm, а так же в формах атрибут name иидентичен переменным подстановки в PDO. Все это сделано что бы в одном методе и рисовался html, и отправлялся запрос и возвращались данные.В принципе это работает, в массе своей. Но логика запутанная, я забросил этот сервис на недели три, и охуел вспоминать что к чему и как там привязано.И проблемы с отдельными отчетами, которые не вписываются в общую логику.Было бы интреесно генерить в общем методе обработки роута какой то класс, который удовлетворят требованиям конкретного sql запроса, но я не заню как это сделать.
>>1551498>дописывают случайные люди вместо программистовОбщался с такими тут - ни лучших практик не знают, ни теории. Вместо аргументации какой-то СММ-выпендрёж для лохов и обвинения в догматизме.Да все таких встречали наверняка - они не ООП не признают, ни фреймворков, часто у них всё самописное и хреновое. Т.е. это тот случай, когда человек не понимает чужого кода.
>>1551518>>1551086Спасибо, понял.($noSpaces, $i - 1, 1);($noSpaces, $i * (-1), 1);Что можно в срез вставлять выражение, вообще, не знал.
Помогите совладать с обезумевшим композером. Пытаюсь установить зависимости пикрелейтед (composer install), но он ругается и всячески скромничает, стеснясь взять из озу ~68мб с лимитом в 512мб в .ini. PHP Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 67108864 bytes) in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/DependencyResolver/Solver.php on line 223
>>1551763Судя по цифрам, он сам считает лимитом 1,5 Гб ии превзошел его. Сделай своп побольше, закрой все остальные программы, попробуй взять другую версию композера. Это известная проблема, потребление памяти композером при update. Если здесь есть добровольцы желающие ее исправить, я могу подкинуть идеи, что можно попробовать сделать. Самому мне некогда.
есть где нибудь годная инфа по битриксу то типо как с ним ваще работать то, и как делать все из админки? интересует как раз структура и создание страниц. а то в оф документации нихуя непонятно.
>>1551815Года 3-4 назад сталкивался с битрикс 24. Там есть академия битрикс и ещё где-то можно скачать мануал, страниц на 250, где описывается архитектура и как вообще что работает. Если ты серьёзно решил этим заняться, то думаю тебе стоит как минимум ознакомиться с этими мануалами.
Сап двощь, такие абстракции вообще нормально делать или можно как-то лучше? https://pastebin.com/4i0YJ2C3
двач, не обоссы а лучше подскажи. вот я сейчас работаю с битриксом. создал раздел, в нем страниц нужных мне накидал. и вот вопрос как мне создавать ксс стили то только для этого раздела и этих страниц? в оф доках хуита какая то
>>1552424хуячишь в шаблон условие, по которому для этого раздела подключаешь стиль. битрикс этим не испортишь
>>1552283Не понимаю, почему LazyBookInterface может наследоваться от BookInterface. Я бы понял, если был BookInterface отдельно, а, какой-нибудь BookLoaderInterface отдельно и от него наследовался LazyBookLoaderInterface. А как это у нас есть интерфейс Книга и от него наследуется ЛениваяКнига. Ленивая книга - это что значит? Нипанятна. Ниясна. Нипанятна. Книга сама себя загружает и может загружать не лениво (сразу) а может при обращении? Зачем книга сама себя загружает? Ниясна. Нипанятна.
У кого-нибудь есть данная книга? Как оцениваете? Можете вообще посоветовать какую-то конкретную книгу по PHP?
>>1552436в какой именно шаблон то? в глобальный или локальный? или ты имеешь в виду подкключение через админку битрикса ?
>>1552499Да в жопу книги по программированию. Есть смысл брать разве что по общей теории - как справочник и вообще почитать. Но тебе такое рано ещё, скорее всего.Учись на задачах, смотри лекции, читай статьи, участвуй в срачах пили-пили-пили. Ну как обычно вобщем-то.
>>1552489>Ленивая книга - это что значит? Нипанятна. Ниясна. Нипанятна. Книга сама себя загружает и может загружать не лениво (сразу) а может при обращении? Зачем книга сама себя загружает? Ниясна. Нипанятна.Книга уже загружена. Но у книги может быть миллион страниц, которые не нужно жадно загружать. Я в конструктор ленивой книги передаю сам загрузчик, и по getPages например у меня хттп запрос будет или еще что, в итоге можно делать что-то вроде $book->getChapters()->filter(...)->getPages()->find(...) и сохранить в локальную бд.
Пожалуйста, переходите в новый тред >>1552970 (OP)Если вам не ответили, напомните о себе в новом треде.Тут, может быть, еще будут ответы на старые вопросы, но новые вопросы лучше писать в новый тред, тут их никто не увидит.
>>1552934> $book->getChapters()->filter(...)->getPages()->find(как называется эта хрень с кучей стрелочек и методов