Laravel по-русски

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

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

#1 Re: Laravel 5.x » JSON без backslash » 01.09.2018 23:04:28

Вероятно вместо JSON_UNESCAPED_UNICODE нужно поставить JSON_UNESCAPED_SLASHES.

#3 Re: Прочее » Вики-разметка и доступность редактирования » 30.08.2018 07:07:19

На мобилках негде тапать. Там стандартная менюшка браузера появляется при выделении, типа скопировать/поделиться/веб-поиск/etc.
https://ibb.co/d5TsiU

#4 Re: Прочее » Вики-разметка и доступность редактирования » 24.08.2018 00:23:35

Есть еще issue. Тег quote. Работает с выделением текста из textarea, который набирает сейчас пользователь. А хотелось бы выделить часть чужого сообщения, нажать на кнопку quote и чтобы выделенная часть чужого сообщения была внутри тега. Сейчас там будет пустота. И приходится копипастить... Это особенно актуально для мобильных девайсов, где невозможно выделить текст и нажать Q, т.к. клава виртуальная.

#6 Re: Веб-разработка » Ajax » 23.08.2018 22:17:45

Как минимум ошибка синтаксиса в js.
Было
$('#contactform'), on('submit', function(e){
Надо
$('#contactform').on('submit', function(e){

ЗЫ. Не проверял, но неужели в консоли браузера это не светилось красным?
ЗЫ2. Alert это не консоль.
https://learn.javascript.ru/devtools

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

Может не в тему, но тег СODE не работает по кнопке. Только если вводить ручками по аналогии с B

#8 Re: Laravel » Ошибка TokenMismatchException in VerifyCsrfToken.php line 67: » 23.08.2018 21:38:36

1. Удалено.
2. Сейчас у вас проблемы с маршрутом. Не токеном.

#9 Re: Laravel 5.x » Правильная архитектура при большом кол-ве вводных данных » 01.07.2018 17:14:22

Я бы не переживал насчет "полноты/толстоты" контроллера. Это только в примерах все выглядит идеально, но реальность другая. Просто смотрите, сможет ли этот код использоваться где-то еще. Если да, то просто создайте вспомогательный класс/метод.
Имхо, события тут не подойдут. Это только запутает код. Гораздо лучше в этом случае иметь хоть и толстый, но достаточно комментированный и структурированный метод в контроллере. Бритва Оккама, короче.

#10 Re: Laravel 5.x » Публичные вебинары с участием как гостей, так и юзеров » 01.07.2018 01:20:55

$500 предоплаты, потом поговорим. А то вы интересные, вам целую систему спроэктируй, под видом ответов на вопросы на форуме, ага.

#11 Re: Laravel 5.x » Помещение запроса в очередь и отправка ответа из очереди » 30.06.2018 03:29:04

У вас неправильное понимание, что такое очереди задач вообще. Они не предназначены для того

чтобы предотвратить лежачее положение сервера в особо "жаркие" моменты

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

Рассмотрим простой пример:

Route::get('/job', function () {
  // текущее время
  $start = date('h:i:s');

  // ожидание в течениe 10 секунд
  sleep(10);

  // время на момент завершения ожидания
  $end = date('h:i:s');

  return $start . ' - ' . $end;
});

При переходе на /job выведет что-то типа: "04:40:21- 04:40:31". Как видим, десять секунд на выполнение.


Теперь, если мы вынесем sleep(10) в задачу (я не буду приводить код самой задачи, там в handle просто вызывается sleep(10))

Route::get('/job', function () {
  // текущее время
  $start = date('h:i:s');

  // ожидание в течениe 10 секунд поставится как задача в очередь
  dispatch(new App\Jobs\SleepTask);

  // время на момент завершения работы этого кода
  $end = date('h:i:s');

  return $start . ' - ' . $end;
});

Теперь при переходе на /job будет выведено что-то типа: "04:50:12- 04:50:12". Как видим, меньше секунды на выполнение. Хотя sleep(10) будет выполнен, просто это будет сделано на фоне, вы этого не увидите.

Надеюсь понятно описал.


Возвращаясь к тому, что же делать для того

чтобы предотвратить лежачее положение сервера в особо "жаркие" моменты

1) Я бы изучил ваш метод getJSON. Оптимизировал бы код, использовал "жадную" загрузку там, где это необходимо. Банально добавил бы пагинацию. Пусть клиент учитывает это (хотя задумываться об этом надо было раньше, ладно если у вас 1 клиент... А если 100? 10000?).
2) Ограничил бы количество запросов одним в несколько секунд/минуту (throttle) для этого маршрута.
3) Проверил бы индексы в БД.
4) Проверил бы настройки MySQL.
5) Да кучу всего еще можно придумать. Вплоть до репликации бд и работы в методе getJSON с отдельной базой на отдельном сервере...

#12 Re: Laravel 5.x » Магия модели » 28.06.2018 15:42:20

$post - обычный объект класса. Во view он передается также. Естественно, что методы тоже доступны. Вы же не приводите его к массиву: $post->toArray();

#13 Re: Веб-разработка » Сравнение массивов в контроллере и передача во view » 28.06.2018 15:20:04

$arr_res = array();
    foreach($arr_int as $post){
        $o = new ExchangeController();     
        $o->ProdID=$post; // Внимание на эту строку, тут у вас была ошибка
        $arr_res[]=$o;
    };
dd($arr_res);

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

#14 Re: Веб-разработка » Сравнение массивов в контроллере и передача во view » 27.06.2018 21:23:41

В доках все написано же про array_diff...

Два элемента считаются одинаковыми тогда и только тогда, если (string) $elem1 === (string) $elem2. Другими словами, когда их строковое представление идентично.

У вас же: $elem1 и $elem2 - объекты. А объекты не могут быть преобразованы в строку.

---

Вам нужно использовать array_udiff. Что-то типа этого должно получиться:

$arr1 = (array)$systemCentr;
$arr2 = (array)$mySystemCentr;

$total = array_udiff($arr1, $arr2,
  function ($obj_a, $obj_b) {
    return strcmp($obj_a->ProdID0, $obj_b->product_id); //У вас текстовые значения, потому используем strcmp
  }
);

P.S. Я не проверял результат, возможно вам придется поискать примеры именно для вашего случая, или сравнивать несколько значений, или поменять аргументы местами smile.
Также strcmp учитывает регистр символов, будьте внимательны.

#15 Re: Laravel 5.x » Не заходит в callback Liqpay Laravel » 26.06.2018 06:02:45

Надеюсь автор уже разобрался, но проблема скорее всего была бы в CSRF защите. Liqpay ведь шлет post запрос по адресу из server_url, а вашего токена он не знает.

Надо добавить в VerifyCsrfToken middleware

protected $except = [
    'stripe/*', //тут ваш server_url для исключения из CSRF защиты, сейчас указан stripe из документации.
];

Ну и маршрут в routes.php должен быть правильно прописан, естественно.

---

Есть и второй вариант: изначально определить этот маршрут за пределами web middleware групппы.

#16 Re: Хорошие практики (FAQ) » Связь формы с маршрутом » 22.06.2018 12:20:00

если я в самой форме не буду делать метод "action" вообще, каким образом laravel "узнаёт", что данные для обработки вызываемого метода в маршруте с post нужно взять из маршрута с get?

Это не Laravel определяет, а браузер. Если маршрут в action не задан, то отправка производится по адресу страницы. Get это или Post определяет атрибут method. Если и method не задан, то используется Get.

...ведь в методе обработки формы никаких указателей на саму форму нет. И в самой форме на роут с методом обработки тоже...

Auth\LoginController использует трейт Illuminate\Foundation\Auth\AuthenticatesUsers:

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers; //<----------------------------------Trait

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers; //<----------------------------------------------------------Trait

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
}

Код трейта можете посмотреть тут:
/vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php

В нем и определены методы showLoginForm, login, etc.

#17 Re: Хорошие практики (FAQ) » Связь формы с маршрутом » 22.06.2018 10:54:28

Когда вы вызываете route('aaa') происходит преобразование вашего обращения в урл. На выходе это тоже самое, что и если в форме вы напишите action='/my'

Когда приходит внешний запрос, то наоборот, происходит преобразование урл в ваше действие контроллера. И тут понятно, что url должен быть воспринят однозначно.

И там и там есть промежуточное звено, которое проверяет уникальность url, при необходимости перезаписывает, кидает ошибки типа Route [имя роута] not defined, чтобы предостеречь вас и дать вам понять, что выполнится на самом деле метод bbb. И вы не искали ошибку в aaa. Маршрута aaa, как бы теперь вообще не существует.

#18 Re: Хорошие практики (FAQ) » Связь формы с маршрутом » 22.06.2018 10:07:13

Имя маршрута это лишь помощь для вас, чтобы вы могли писать route('aaa'), вместо например action('MyController@aaa'). Итоговая ссылка (действие формы, action) у вас будет именно /my и ничего больше.

#19 Re: Хорошие практики (FAQ) » Связь формы с маршрутом » 22.06.2018 09:44:27

Если отбросить подробности, у вас ссылка (адрес в форме) в итоге будет /my. Как по вашему, после отпраки данных, Laravel должен будет понять к какому контроллеру вы хотите обратиться? К aaa или bbb? Это явный конфликт и в Laravel это решается перезаписью маршрута на последний.

#20 Re: Laravel 5.x » Подскажите с уведомлениями » 18.06.2018 13:15:00

Сделайте по старинке: setInterval и ajax запрос на какой то маршрут.

#21 Re: Laravel 5.x » Auth::user() возвращает левого пользователя (последнего по БД) » 17.04.2018 14:52:58

Проверяйте внимательнее blade шаблон тогда. Может где-нибудь выше есть что-то типа:
foreach ($users as $user)
Что естественно перезапишет ваш $user из composer на последнего из списка foreach.

#22 Re: Laravel 5.x » Auth::user() возвращает левого пользователя (последнего по БД) » 15.04.2018 19:43:16

С версии 5.3, по умолчанию, у вас нет доступа к сессиям в конструкторе.
Есть два пути решения проблемы:
1. https://laravel.com/docs/5.3/upgrade#5. … nstructors
2. https://stackoverflow.com/questions/415 … onstructor

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