Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Здравствуйте!
Пишу правили для кастомных типов валидации и хотел бы вывести ошибку не как текст, а как массив.
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return ['text' => "Номер введен не верно! Введите номер в правильном формате.", 'code' => 2];
}
Но ларавел мне все преобразует в массив с числовыми индексами. Возможно ли такое реализовать не сильно отходя от стандартов?
Системный таймер ноута работает от собственной батарейки, если что.JS таймены, да, останавливаются, но js тут и не пахнет.
Не дочитали, у меня в виртуалке поднят как ларавел так и мемкэш. При переходе ноута в спящий режим виртуалка замораживается, а потом уже отмораживается с новым временем и по этой причине мемкэш не сбрасывает таймеры, ибо они уже давно прошли...
Спасибо за ответы. Мое предположение такое, я работаю на ноуте, все запущено в виртуалке. Когда закрываю крышку ноута, все процессы приостанавливаются. А потом возобновляются с новыми таймингами и походу из за этого мемкэш не сбрасывает кэш в нужное время ...
Вот прошли сутки, а меня таки посылают куда подальше the server responded with a status of 429 (Too Many Requests) . Наверное повод на 5.8 перейти, вдруг баг какой
Здравствуйте!
Есть запись
Route::middleware('throttle:600,1')->group( function () {
Route::post('/cities', '\App\Http\Controllers\CitiesController@search');
});
Но при истечении минуты счетчик не сбрасывается, не пойму почему, приходится все больше и больше увеличивать таймаут, что бы хоть как тестировать...
Версия laravel 5.7
Вообщем обошелся редиректом после авторизации . Хотел что бы без них совсем было, но какие то моменты все равно надо с ними, так как там еще токены всякие...
Добрый день!
Хочется добавить миниатюрку в модель авторизованного пользователя. Но дело в том что, я модель передаю в фронтенд, как при авторизрации, так и при обновлении страницы. Не хотелось бы дублировать код. Может какой метод, где можно перегрузить, что бы добавить нужную опцию?
А все сделал стандартным путем . Спасибо!
Здравствуйте!
Что то совсем засиделся никак не могу решить.
Есть у меня функция, она обрабатывает валидацию форм и это не метод в контроллере, где можно вернуть через return, эта функция возвращает массив с данными формы. Нужно просто вернуть ошибку например 422, мой массив и завершить приложение. abort отлично подходит но не хочет кушать массив (...
Решение таки найдено на просторах инета . Нужно в конце вызвать код $this->view([], []); Тогда функция $message->setBody() начнет работать. Не знаю насколько это вообще где то документировано и не поломают ли разработчики в дальнейшем этот код, но пока работает
Напрашивается парсинг весь делать во вьюхе, но это ведь не совсем правильно с точки зрения кода...
Вообщем поглядел код ларавела mailer, там $message->setBody($msg); отрабатывает после вызова withSwiftMessage в итоге перетирает значение, что я ставлю ... Есть ли какие идеи как корректно реализовать данную мне задачу? Может как то работать напрямую со Swift ?
С embed разобрался. Доки надо в другом месте читать .
$fName = $message->embed(
new \Swift_Image(
Storage::disk($imgObj->disk)->get($imgObj->path.$imgObj['sizes'][$sizes]['path'].$imgObj['sizes'][$sizes]['file']),
$imgObj['orig_name']
)
);
Вот теперь не понятно как боди подменить, метод setBody ничего не меняет. Может тут нужно от шаблона отказаться и через код задавать боди? Просто убрать View не прокатывает...
Нашел вот такое решение
$this->withSwiftMessage(function($swift) {
$cid = $swift->embed(
\Swift_Image::fromPath(public_path('/images/logo.png'))
);
$body = $swift->getBody();
$body = str_replace('LOGO-REPLACEMENT', $cid, $body);
$swift->setBody($body);
});
Но тут не почему то метода embedData. А так же getBody выдает null. Может я что не так еще сделал, не пойму
Вот мой кусок кода в методе build
$this->withSwiftMessage(function($message)
use ($msg)
{
// print_r($message);
// dd($message->getBody());
$message->setBody ( preg_replace_callback("|<img.*?data-id=[\'\"]{1}(\d+)[\'\"]{1}.*?>|", function($matches)
use ($message)
{
// dd('23');
$img = $matches[0];
$imgId = $matches[1];
if( ($imgObj = \Backend\Root\Upload\Models\MediaFile::find($imgId)) ){
$sizes = 'orig';
if(preg_match('/width=[\'\"]{1}(\d+)[\'\"]{1}/', $img, $width) && preg_match('/height=[\'\"]{1}(\d+)[\'\"]{1}/', $img, $height)){
$sizes = \Backend\Root\Upload\Services\Uploads::sizesToStr([ $width[1], $height[1] ]);
}
if(isset($imgObj['sizes'][$sizes])) {
//dd($message);
$fName = $message->embedData(
Storage::disk($imgObj->disk)->get($imgObj->path.$imgObj['sizes'][$sizes]['path'].$imgObj['sizes'][$sizes]['file']),
$imgObj['orig_name']
);
//dd($fName);
$img = preg_replace("/src=[\'\"]{1}.*?[\'\"]{1}/", "src=\"".$fName."\"", $img);
}
}
return $img;
}, $message->getBody() ) );
});
Да и в правду косяк был, не заметил сразу. Но вот трабл появился другой. У меня шаблон письма задается через админку(система рассылок). Далее я в методе build хочу проверить все картинки и заменить их на инлайн.
В конце метода вызвать код
return $this->view('MailList::mail-send', ['data' => $msg]);
Где и обрисую шаблон. Но трабл в том, что я совсем не могу понять как теперь получить доступ к embedData...
Добрый день!
Снова пытаюсь довести до ума отправляемые письма через laravel Mail. Нужно вставить картинку в теле письма, как inline.
Делаю так
$fName = $mail->embedData(
Storage::disk($imgObj->disk)->get($imgObj->path.$imgObj['sizes'][$sizes]['path'].$imgObj['sizes'][$sizes]['file']),
$imgObj['orig_name']
);
И потом уже подменяю src у img на $fName.
Письмо приходит и почтовик показывает, как в коде картинку, так и в конце письма. А вот если через Яндекс веб интерфейс смотреть, то там совсем не показывает картинку(судя по коду яндекс пытается ее уменьшить...). Но вот другие письма из тех же рассылок приходят хорошо...
Или пользовать другую либу для работы с почтой?
P.S. Слово UTF-8 кагбе намекает, что далее идет строка в UTF-8. Если внезапно™ там другая кодировка, то будет плохо, конечно. Не мешает проверить этот момент один раз чтобы знать наверняка.
Да проблема в том, что на маке почтовик сам себе отправляя получает корявую кодировку. А если например с того же яндекса то все классно получает, но там по другому выглядит сама строка кодирования. я так понял что бы это применить надо писать свой функционал вместо того, что есть в Ларавеле. В итоге в рамках этого проекта решили писать в транслите имена файлов, тогда все хорошо.
Но в идеале сделать что было все хорошо, а вот как не сильно мучаясь это реализовать...
Это делается через base64_encode:
Все круто, да я тут потестировал чуток, даже письма отравленные с самого мака на себя же приходят с корявой кодировкой. В Том же яндексе сделано вот так filename="=?UTF-8?B?0JLQvdGD0YLRgNC10L3QvdGP0Y8uanBn?=" и на мак и на планшет приходит все классно.
Теперь вопрос, как я могу подменить метод attach и сделать свой функционал, для того что бы по другому формировать заголовки?
Причем время от времени система тупо показывает нормальные имена, а потом у тех же писем вновь кракозябры. явно какой то косяк есть. На планшете всегда кракозябры. Так же поступили сведения, что и gmail так же криво. Уже всю голову сломал, незнаю как решить...
Смотрю другие письма, где с аттачем все хорошо, там имя файла по другому кодируется filename="=?UTF-8?B?0JLQvdGD0YLRgNC10L3QvdGP0Y8uanBn?=" . А так же сам текст сообщения тоже закодирован, а у меня чистый хтмл идет
Добрый день!
Пытаюсь отправлять файлы в письме, а вот приходят они ко мне (на мак) с именами из кракозябров...
А вот что получается в письме utf-8''%D0%BF%D1%80%D0%B5%D0%B7%D0%B8%D0%B4%D0%B5%D0%BD%D1%82.pdf
Mail::html($msg, function($mail)
use($msg, $title, $email, $mailList, $message)
{
foreach(Content::uFile()->get($message, 'files')->files() as $file) {
$mail->attach(Storage::disk($file->disk)->getAdapter()->getPathPrefix().'/'.$file->path.$file->file, [
'as' => $file->orig_name,
]);
}
$mail->to($email)->subject($title);
$mail->from(Helpers::dataIsSetValue($mailList, 'email_from'), Helpers::dataIsSetValue($mailList, 'from_name'));
});
Вообщем решил обновить таки не сложно . Все заработало, вопрос снимается...
Добрый день!
Начал мутить новый проект на laravel 5.6 . У меня виртуала на vagrant php v7.1.7 . Вообщем то при любой ошибке в php коде, php-fpm просто помирает, а nginx выдает ошибку Bad Gateway. Соответственно ошибку я не вижу и приходиться методом тыка искать, но это совсем изврат .
Так же из той же темы перестал сбрасываться весь кэш при выполнении команды cache:clear.
Выручайте, косяк какой то . Вагрант не охота обновлять, я там уже внутри и ключи авторизации и деплойер понастроил...
Вообщем то работает, спасибо огромное AlexeyMezenin ! Удалил выше описаный роутинг. Единственный минус надо 2 раза набирать команду route:cache что бы сработало, странно ну да ладно, не страшно
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
Вот на такую штуку ругается, я что то врубиться не могу если закоминчу, будут ли какие проблеммы?