Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Вероятно вместо JSON_UNESCAPED_UNICODE нужно поставить JSON_UNESCAPED_SLASHES.
На ПК все ок.
На мобилках негде тапать. Там стандартная менюшка браузера появляется при выделении, типа скопировать/поделиться/веб-поиск/etc.
https://ibb.co/d5TsiU
Есть еще issue. Тег quote. Работает с выделением текста из textarea, который набирает сейчас пользователь. А хотелось бы выделить часть чужого сообщения, нажать на кнопку quote и чтобы выделенная часть чужого сообщения была внутри тега. Сейчас там будет пустота. И приходится копипастить... Это особенно актуально для мобильных девайсов, где невозможно выделить текст и нажать Q, т.к. клава виртуальная.
test press button
test selected
Исправил, работает?
Да, спс.
Как минимум ошибка синтаксиса в js.
Было
$('#contactform'), on('submit', function(e){
Надо
$('#contactform').on('submit', function(e){
ЗЫ. Не проверял, но неужели в консоли браузера это не светилось красным?
ЗЫ2. Alert это не консоль.
https://learn.javascript.ru/devtools
Может не в тему, но тег СODE не работает по кнопке. Только если вводить ручками по аналогии с B
1. Удалено.
2. Сейчас у вас проблемы с маршрутом. Не токеном.
Я бы не переживал насчет "полноты/толстоты" контроллера. Это только в примерах все выглядит идеально, но реальность другая. Просто смотрите, сможет ли этот код использоваться где-то еще. Если да, то просто создайте вспомогательный класс/метод.
Имхо, события тут не подойдут. Это только запутает код. Гораздо лучше в этом случае иметь хоть и толстый, но достаточно комментированный и структурированный метод в контроллере. Бритва Оккама, короче.
$500 предоплаты, потом поговорим. А то вы интересные, вам целую систему спроэктируй, под видом ответов на вопросы на форуме, ага.
У вас неправильное понимание, что такое очереди задач вообще. Они не предназначены для того
чтобы предотвратить лежачее положение сервера в особо "жаркие" моменты
А они служат лишь для того, чтобы ускорить время отклика для запроса, вынося какие-то действия в отдельный процесс.
Рассмотрим простой пример:
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 с отдельной базой на отдельном сервере...
$post - обычный объект класса. Во view он передается также. Естественно, что методы тоже доступны. Вы же не приводите его к массиву: $post->toArray();
$arr_res = array();
foreach($arr_int as $post){
$o = new ExchangeController();
$o->ProdID=$post; // Внимание на эту строку, тут у вас была ошибка
$arr_res[]=$o;
};
dd($arr_res);
А так, не совсем понятно, для чего вам это вообще. Похоже на косяк в архитектуре. Потому совет что с этим вам делать дальше я не дам.
В доках все написано же про 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. Я не проверял результат, возможно вам придется поискать примеры именно для вашего случая, или сравнивать несколько значений, или поменять аргументы местами .
Также strcmp учитывает регистр символов, будьте внимательны.
Надеюсь автор уже разобрался, но проблема скорее всего была бы в CSRF защите. Liqpay ведь шлет post запрос по адресу из server_url, а вашего токена он не знает.
Надо добавить в VerifyCsrfToken middleware
protected $except = [
'stripe/*', //тут ваш server_url для исключения из CSRF защиты, сейчас указан stripe из документации.
];
Ну и маршрут в routes.php должен быть правильно прописан, естественно.
---
Есть и второй вариант: изначально определить этот маршрут за пределами web middleware групппы.
если я в самой форме не буду делать метод "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.
Когда вы вызываете route('aaa') происходит преобразование вашего обращения в урл. На выходе это тоже самое, что и если в форме вы напишите action='/my'
Когда приходит внешний запрос, то наоборот, происходит преобразование урл в ваше действие контроллера. И тут понятно, что url должен быть воспринят однозначно.
И там и там есть промежуточное звено, которое проверяет уникальность url, при необходимости перезаписывает, кидает ошибки типа Route [имя роута] not defined, чтобы предостеречь вас и дать вам понять, что выполнится на самом деле метод bbb. И вы не искали ошибку в aaa. Маршрута aaa, как бы теперь вообще не существует.
Имя маршрута это лишь помощь для вас, чтобы вы могли писать route('aaa'), вместо например action('MyController@aaa'). Итоговая ссылка (действие формы, action) у вас будет именно /my и ничего больше.
Если отбросить подробности, у вас ссылка (адрес в форме) в итоге будет /my. Как по вашему, после отпраки данных, Laravel должен будет понять к какому контроллеру вы хотите обратиться? К aaa или bbb? Это явный конфликт и в Laravel это решается перезаписью маршрута на последний.
Сделайте по старинке: setInterval и ajax запрос на какой то маршрут.
Проверяйте внимательнее blade шаблон тогда. Может где-нибудь выше есть что-то типа:
foreach ($users as $user)
Что естественно перезапишет ваш $user из composer на последнего из списка foreach.
С версии 5.3, по умолчанию, у вас нет доступа к сессиям в конструкторе.
Есть два пути решения проблемы:
1. https://laravel.com/docs/5.3/upgrade#5. … nstructors
2. https://stackoverflow.com/questions/415 … onstructor