Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#2 Re: Прочее » Блокировка за почтовую рассылку уведомлений в каталоге. » 25.10.2018 17:21:04

Можно как-то отправить с сервера запрос и получить ответ.

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

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

Так что 100% гарантии дать невозможно.

#3 Re: Прочее » Блокировка за почтовую рассылку уведомлений в каталоге. » 06.10.2018 19:59:22

Во время активации каждой организации уходило уведомление.

Кому? Каждой из 2 млн предприятий? Так это натуральный спам, естественно за него и хостер будет блокировать, и в спам такие письма попадать будут.

#4 Re: Веб-разработка » Как найти дублирующиеся подряд записи по признаку? » 30.09.2018 22:20:12

Есть такая структура таблицы orders

Довольно странная структура, "заказ" обычно это набор товаров, а здесь получается, что "заказов" нет, но есть запись "id товара" на каждого пользователя (а не на каждый заказ!).

Нужно, чтобы заселектились записи только те, в которых предыдущие записи с такими же user_id имеют эквивалентный product_id.

В СУБД как такового нет порядка строк, и уж тем более нельзя производить операции над строками в зависимости от их порядка (т.е. "выбрать если предыдущая строка ..."). Для этого вводится новое поле и используется GROUP BY.

То есть если бы в orders, как это обычно бывает, был бы id заказа (order_id), то задача решается простым SELECT ... GROUP BY order_id, без подзапросов и прочих трюков.

#5 Re: Веб-разработка » FileUpload » 17.09.2018 21:00:14

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

Никак. В формах не предусмотрено стандартных механизмов для оповещения браузера о максимальном размере загружаемого файла (на самом деле - размере передаваемых данных в форме, например, если ты вставишь в textarea N мегабайт текста, результат будет тот же). Соответственно, ошибка произойдет только тогда, когда пользователь отправил форму и браузер переслал на сервер max+1 байт.

Мораль такова: для мелких файлов (пара мегабайт) можно использовать традиционный способ загрузки (через форму с POST) - здесь потеря данных и времени не так критична; для больших файлов - только JavaScript, с предварительной проверкой на клиенте до отправки формы. Из минусов - некоторые очень старые браузеры идут лесом.

#6 Re: Веб-разработка » Тестирование в sqlite » 12.09.2018 19:56:17

1) для строковых полей размер поля не указан. в sqlite у строк нет размера ?

Да, и более того, в SQLite даже нет строгих типов полей - тип поля можно вообще не указывать, в строковом поле можно хранить числа и т.д.

2) Могут ли быть какие проблемы если при разработке использовал mysql, а для тестирования взять sqlite ?

У них разный синтаксис (" вместо ` для колонок, и пр.), у MySQL больше функций и других расширений стандарта (GROUP_CONCAT, AUTO_INCREMENT, работа с кодировками) и т.д.

Если в проекте ничего из этого не используется, то проблем не будет, но редко встретишь проект, который можно просто взять и запустить на любой другой СУБД - в обычном случае под СУБД понимается именно и только MySQL, и люди используют ее нестандартные функции, даже не зная, что они нестандартные (в этом нет ничего плохого, т.к. 90% проектов с MySQL никогда не уходят).

Я вычитал что для тестирования sqlite как раз и хорош - так как он однопользовательский ...

Он не однопользовательский, SQLite может работать в многопользовательском режиме. По всей видимости, там где ты это читал имелось в виду, что он не умеет писать в базу одновременно двумя клиентами (т.е. если выполнить UPDATE в двух одновременных запросах, то первый запрос начнет выполнение UPDATE, второй заморозится и будет ждать, когда первый закончит, после чего выполнит свой UPDATE). То есть операции записи идут последовательно, даже если они друг друга не затрагивают (например, UPDATE разных таблиц).

Это влияет только на производительность. SQLite не упадет из-за того, что приходят одновременные запросы на запись, он просто будет работать медленнее MySQL. Для локальной разработки это не критично.

3) А для каких приложений(кроме тестирования) sqlite может быть удобен ?

Там, где нагрузка на БД не большая. SQLite лучше MySQL и других мощных СУБД в том, что его не нужно устанавливать и что-либо настраивать на сервере. Больше того, он может даже работать с БД в памяти, т.е. даже прав на запись на диск у него может не быть.

Для решений, где главное - простая установка (а лучше вообще отсутствие установки) - это самое то. Извлек скрипты и тут же начал работать.

SQLite используют очень много крупных проектов - Firefox, Android и т.д. Это проверенное решение.

#7 Re: Прочее » Вики-разметка и доступность редактирования » 31.08.2018 21:42:47

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

post-17566.png

#8 Re: Прочее » Как создавая командой 7z архив пропустить подкаталоги? » 31.08.2018 21:37:34

Как я понимаю в результатн будет файл arch.tar.xz ?

Да. Расширение можно сделать короче - вместо .tar.xz просто .txz.

tar cJf arch.txz ...

.

1) Что это за формат ?

Обычный формат, тот же tar, только сжатый. Стандартно на Windows открывается теми же 7-Zip и WinRAR.

Под *nix tar'ом бекапы лучше делать, чем zip/7z, так как он сохраняет специфичные вещи типа флагов доступа, владельцев, символических ссылок и т.д. Единственный минус - если надо из большого архива вытащить один файл, то это будет долго (в худшем случае по времени равно извлечению всего архива).

и может быть не только рабочий linux...

tar можно даже на Android распаковать, правда, из-за высокого сжатия смартфон может сам себя поджарить.

2) А на тома tar распаковывать умеет?

Нет, для этого используют отдельную команду split через связку команд (pipe):

tar zc --exclude foo /_wwwroot ... | split -b100M - arch.txz.
tar c --exclude foo /_wwwroot ... | pixz | split -b100M - arch.txz.

В результате получим файлы максимум по 100 Мб, с именами arch.txz.aa, arch.txz.ab (.ac ... .ba .bb ... .zz). Можно переключить с буквенных суффиксов на числовые:

... | split -d -b100M arch.txz.

Получим arch.txz.00, .01, ...

Собрать тома обратно можно банально через cat (tar tv = вывод содержимого архива и его проверка):

cat arch.txz.* | tar ztv
cat arch.txz.* | pixz -d | tar tv

Можно и recovery record добавить, как в WinRAR, только это делается отдельной командой (запускать уже после того как все тома заархивируются):

par2 c -n1 -r5 arch.txz.*

-r5 = максимум 5% томов может быть битыми, потом их нельзя будет восстановить.

В итоге имеем тома arch.txz.aa .ab ... и файл с recovery record arch.vol... (файл .par2 можно удалять).

Посмотри эту тему, там тоже про бекапы говорилось, в частности, как их можно в одну команду перекидывать на другой хост через ssh.

#9 Re: Прочее » Вики-разметка и доступность редактирования » 29.08.2018 22:47:09

А хотелось бы выделить часть чужого сообщения, нажать на кнопку quote и чтобы выделенная часть чужого сообщения была внутри тега.

Не знаю, как это на мобильных, но на десктопе при выделении любого текста на странице появляется окошко "нажми Q...", и на него можно кликнуть/тапнуть, а можно нажать Q на клавиатуре. Первый вариант должен и на телефонах быть удобен.

При тапе что происходит с textarea ответа?

#10 Re: Прочее » Как создавая командой 7z архив пропустить подкаталоги? » 29.08.2018 22:44:34

7-zip и rar под *nix неадекватны, в сравнении с zip или тем более с tar. Какой смысл использовать его? (В твоем примере, кстати, ошибка - расширение не .zip, а .7z.)

Я советую tar + xz, а если система многоядерная, то tar + pixz.

# gz
tar czf arch.tar.xz --exclude node_modules --exclude vendor /_wwwroot
# xz
tar cJf arch.tar.xz --exclude node_modules --exclude vendor /_wwwroot
# pixz
tar -Ipixz -cf arch.tar.xz --exclude node_modules --exclude vendor /_wwwroot

#11 Re: Прочее » Вики-разметка и доступность редактирования » 23.08.2018 23:51:41

Может не в тему, но тег СODE не работает по кнопке.

В Chrome и правда не работал. Исправил, работает?

#12 Re: Прочее » Вики-разметка и доступность редактирования » 23.08.2018 20:09:40

и правом на правку своего комментария?!

В смысле поста на форуме? Ты не писал комментариев.

Баг точно есть? Не могу выявить, на редактирование дается час во всех случаях.

#13 Re: Laravel 5 » Тестирование: как проверить значения переменных в методе контроллера » 04.08.2018 17:07:44

С точки зрения PHP это нереалезуемо: в общем случае поля $this->utm_source и $this->utm_term не обязаны быть открытыми, потому в методе exampleTest() доступа к ним быть не должно.

PHPUnit позволяет тестировать поля вне зависимости от области видимости с помощью функций вида assertAttribute..., например: assertAttributeSame('somestr', 'strProp', $obj);

Степень кошерности сего подхода может быть разной в зависимости от ситуации и может быть вполне приемлемой, если все остальные способы протестировать нечто ведут к велосипедам и усложнению тестов и/или тестируемого кода (класса).

#14 Re: Laravel 5 » Вопросы по установке Laravel 5.4 (версия sql драйвера 11, php 5.6.36) » 19.05.2018 10:53:27

"4" меньше, чем "36".

echo version_compare('5.6.36', '5.6.4', '>=');
//= 1
// version_compare() returns ... 1 if the second is lower. 

#15 Re: Laravel 5 » Видео уроки на русском языке! » 29.04.2018 11:25:43

П.С, Админы: почему я свои сообщения редактировать не могу? яб понял еслиб 2 дня прошло, но не 5 же минут, ребят..

15 минут таймаут, не работает?

АДмины, важуж девизию! верните права на редактирование! правки в инструкцию внести надо

Вернул, пробуй.

#16 Re: Прочее » Как из-рабочего проекта сделать архив » 07.04.2018 15:39:35

Composer/npm - это одно, а "копии проекта копируя только необходимое" (бекапы?) - это другое. Я так понял, речь о первом.

Composer (npm и прочие подобные) позволяет ставить пакеты (библиотеки с кодом) и следить за их зависимостями. То есть если один пакет для работы требует другой, то Composer поставит оба. Чтобы работало "composer install", нужно пакет опубликовать. Как это сделать описано на сайте проекта; Composer - https://getcomposer.org, npm - https://www.npmjs.com/

https://packagist.org/?q=laravel&p=0
https://www.npmjs.com/search?q=laravel

#17 Re: Прочее » Как из-рабочего проекта сделать архив » 06.04.2018 21:26:00

Не вижу никакого архива по ссылке.

Подскажите, пожалуйста, многие примеры в нете имеют вид небольшого архива

Можно конкретные ссылки на архивы из таких примеров?

#18 Re: Laravel 4 » Whoops! There was an error. » 06.04.2018 21:24:08

Что в файле, на который он ругается?

#19 Re: Laravel 5 » Безопасность кода » 30.03.2018 22:35:46

Выходит то решение не универсальное. Верно?

Верно. Я выразился слишком категорично.

А специфично для интернет-магазинов, маленького и среднего оборота.

...то есть для 9 из 10 от общего числа таких сайтов. Согласен, это не 100% универсальное решение, но я это говорил в ответ на "Решение проблемы - индивидуальное для каждого проекта", то есть для 90% условных интернет-магазинов это решение работает. Как минимум, я хотел донести, что в большинстве случаев не нужно изобретать велосипед.

Впредь буду выражаться точнее.

#20 Re: Laravel 5 » Безопасность кода » 30.03.2018 21:54:48

Как минимум - вы показали вариант для SQL баз данных. Существуют ведь и другие?

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

(у меня 41k rps, в основном апдейты баланса на небольшой набор кортежей).

Сколько дублирующихся строк (пользователей) из этих 41к? У вас биржа, где пользователи постоянно проводят транзакции? В этой теме речь идет об интернет-магазине, и я не представляю, какой из них может выдать хотя бы с десяток транзакций (покупок и пополнений) на одного и того же пользователя одновременно. Большая часть приложений именно такие.

тем самым жестко нарушаете баланс "правило последнего впечатления" (остается негативное впечатления о всех предыдущих комментаторов).

Серьезно, все обсуждения на форуме следует вести только в строго политкорректном, положительном ключе?

Если вы считаете, что кто-то выразился слишком категорично - так поправляйте, восстанавливайте "правило последнего впечатления". Критика - это нормально. В споре рождается истина, и пока нет перехода на личности - это тоже нормально.

#21 Re: Прочее » Куда должны приходить ответы в личку » 30.03.2018 20:18:25

Верно. Форма для отправки почты (но не сама почта) видна любому зарегистрированному пользователю, по ссылке "Сообщение" под ником.

#22 Re: Laravel 5 » Laravel стал практически бесполезен из-за слишком высоких требований? » 30.03.2018 20:17:12

Если на шаред-хостинге есть крон, то можно и очереди обслуживать.

Встречал ситуации, когда cron-задачам давали выполняться не больше N секунд. Shared очень непредсказуемый, мне кажется, его кроме как для CMS (всякие Wordpress) использовать нельзя. Laravel это не CMS.

#23 Re: Laravel 5 » Безопасность кода » 30.03.2018 20:14:51

Решение проблемы - индивидуальное для каждого проекта.

Решение вполне универсальное, только детали запроса несколько зависят от ситуации. Об этом на форуме уже не раз поднимали темы. Пример, адаптированный отсюда:

UPDATE users
   SET money = @money := money - :money
 WHERE id = :id AND money >= :money

Однако само по себе списание с денег с баланса смысла обычно не имеет, то все это дело (списание, создание заказа и прочее) заворачивается в транзакцию. Если UPDATE выше вернул 0 затронутых строк - значит, баланс пользователя недостаточен. И это 100% потокобезопасно, т.к. БД не даст выполнить запрос (или транзакцию), который затрагивает значение, которое уже меняется кем-то параллельно.

SELECT @money; после запроса позволит получить актуальный баланс, тоже потокобезопасно.

А может быть подскажите как я могу (через какие инструменты) отправить сразу 10 запросов и купить 10 предметов по цене 1?

#!/bin/bash
for i in `seq 1 1000`; do
  curl localhost/buy/... &
done

Можно сделать HTML-страницу на том же домене и вставить туда сотню iframe, или сделать сотню запросов через XHR.

#24 Re: Вакансии » Нужен web-разработчик небольшого полезного сервиса с нуля » 30.03.2018 20:03:35

Личку на форуме не нашел. Ищите в Telegram по нику.

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

#25 Re: Laravel 5 » Вывод utf8 из BD не коректно » 25.03.2018 14:06:16

[{"id":1,"sportname":"\u0424\u0443\u0442\u0431\u043e\u043b"

Это корректная JSON-строка, просто символы Юникода (не латиница) здесь записаны в такой форме.

echo json_encode('абц');
  // "\u0430\u0431\u0446"
echo json_encode('абц', JSON_UNESCAPED_UNICODE);
  // "абц"
JSON.parse('"\u0430\u0431\u0446"')
  // "абц"

Подвал раздела