Laravel по-русски

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

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

#1 Laravel 5.x » Валидация и вывод ошибок как массив. » 23.08.2019 22:34:46

Kiran
Ответов: 1

Здравствуйте!

Пишу правили для кастомных типов валидации и хотел бы вывести ошибку не как текст, а как массив.

/**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return ['text' => "Номер введен не верно! Введите номер в правильном формате.", 'code' => 2];
    }

Но ларавел мне все преобразует в массив с числовыми индексами. Возможно ли такое реализовать не сильно отходя от стандартов?

#2 Re: Laravel 5.x » Непонятки с throttle... » 16.08.2019 20:12:50

Системный таймер ноута работает от собственной батарейки, если что.JS таймены, да, останавливаются, но js тут и не пахнет.

Не дочитали, у меня в виртуалке поднят как ларавел так и мемкэш. При переходе ноута в спящий режим виртуалка замораживается, а потом уже отмораживается с новым временем и по этой причине мемкэш не сбрасывает таймеры, ибо они уже давно прошли...

#3 Re: Laravel 5.x » Непонятки с throttle... » 07.08.2019 14:19:31

Спасибо за ответы. Мое предположение такое, я работаю на ноуте, все запущено в виртуалке. Когда закрываю крышку ноута, все процессы приостанавливаются. А потом возобновляются с новыми таймингами и походу из за этого мемкэш не сбрасывает кэш в нужное время smile...

#4 Re: Laravel 5.x » Непонятки с throttle... » 05.08.2019 20:12:37

Вот прошли сутки, а меня таки посылают куда подальше the server responded with a status of 429 (Too Many Requests) . Наверное повод на 5.8 перейти, вдруг баг какой smile

#5 Laravel 5.x » Непонятки с throttle... » 04.08.2019 20:30:48

Kiran
Ответов: 6

Здравствуйте!

Есть запись

Route::middleware('throttle:600,1')->group( function () {
	Route::post('/cities', '\App\Http\Controllers\CitiesController@search');
});

Но при истечении минуты счетчик не сбрасывается, не пойму почему, приходится все больше и больше увеличивать таймаут, что бы хоть как тестировать...

Версия laravel 5.7

#6 Re: Laravel 5.x » Добавить параметр к модели авторизованного пользователя. » 04.01.2019 18:32:11

Вообщем обошелся редиректом после авторизации smile. Хотел что бы без них совсем было, но какие то моменты все равно надо с ними, так как там еще токены всякие...

#7 Laravel 5.x » Добавить параметр к модели авторизованного пользователя. » 04.01.2019 17:23:15

Kiran
Ответов: 1

Добрый день!

Хочется добавить миниатюрку в модель авторизованного пользователя. Но дело в том что, я модель передаю в фронтенд, как при авторизрации, так и при обновлении страницы. Не хотелось бы дублировать код. Может какой метод, где можно перегрузить, что бы добавить нужную опцию?

#8 Re: Laravel 5.x » abort и json » 12.12.2018 16:06:49

А все сделал стандартным путем smile. Спасибо!

#9 Laravel 5.x » abort и json » 26.11.2018 20:23:31

Kiran
Ответов: 2

Здравствуйте!

Что то совсем засиделся никак не могу решить.

Есть у меня функция, она обрабатывает валидацию форм и это не метод в контроллере, где можно вернуть через return, эта функция возвращает массив с данными формы. Нужно просто вернуть ошибку например 422, мой массив и завершить приложение. abort отлично подходит но не хочет кушать массив (...

#10 Re: Laravel 5.x » Mail тонкости » 25.08.2018 19:22:31

Решение таки найдено на просторах инета smile . Нужно в конце вызвать код $this->view([], []); Тогда функция $message->setBody() начнет работать. Не знаю насколько это вообще где то документировано и не поломают ли разработчики в дальнейшем этот код, но пока работает smile

#11 Re: Laravel 5.x » Mail тонкости » 23.08.2018 07:24:12

Напрашивается парсинг весь делать во вьюхе, но это ведь не совсем правильно с точки зрения кода... sad

#12 Re: Laravel 5.x » Mail тонкости » 23.08.2018 07:10:22

Вообщем поглядел код ларавела mailer, там $message->setBody($msg); отрабатывает после вызова withSwiftMessage в итоге перетирает значение, что я ставлю sad... Есть ли какие идеи как корректно реализовать данную мне задачу? Может как то работать напрямую со Swift ?

#13 Re: Laravel 5.x » Mail тонкости » 19.08.2018 06:09:09

С embed разобрался. Доки надо в другом месте читать smile.

		                	 $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 не прокатывает...

#14 Re: Laravel 5.x » Mail тонкости » 18.08.2018 19:43:30

Нашел вот такое решение

$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() ) );
			});

#15 Re: Laravel 5.x » Mail тонкости » 18.08.2018 19:28:44

Да и в правду косяк был, не заметил сразу. Но вот трабл появился другой. У меня шаблон письма задается через админку(система рассылок). Далее я в методе build хочу проверить все картинки и заменить их на инлайн.
В конце метода вызвать код

return $this->view('MailList::mail-send', ['data' => $msg]); 

Где и обрисую шаблон. Но трабл в том, что я совсем не могу понять как теперь получить доступ к embedData...

#16 Laravel 5.x » Mail тонкости » 16.08.2018 12:28:28

Kiran
Ответов: 7

Добрый день!

Снова пытаюсь довести до ума отправляемые письма через 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.

Письмо приходит и почтовик показывает, как в коде картинку, так и в конце письма. А вот если через Яндекс веб интерфейс смотреть, то там совсем не показывает картинку(судя по коду яндекс пытается ее уменьшить...). Но вот другие письма из тех же рассылок приходят хорошо...

Или пользовать другую либу для работы с почтой?

#17 Re: Laravel 5.x » Mail attach и русские имена файлов » 22.03.2018 12:18:45

P.S. Слово UTF-8 кагбе намекает, что далее идет строка в UTF-8. Если внезапно™ там другая кодировка, то будет плохо, конечно. Не мешает проверить этот момент один раз чтобы знать наверняка.

Да проблема в том, что на маке почтовик сам себе отправляя получает корявую кодировку. А если например с того же яндекса то все классно получает, но там по другому выглядит сама строка кодирования. я так понял что бы это применить надо писать свой функционал вместо того, что есть в Ларавеле. В итоге в рамках этого проекта решили писать в транслите имена файлов, тогда все хорошо.
Но в идеале сделать что было все хорошо, а вот как не сильно мучаясь это реализовать...

#18 Re: Laravel 5.x » Mail attach и русские имена файлов » 17.03.2018 15:08:06

Это делается через base64_encode:

Все круто, да я тут потестировал чуток, даже письма отравленные с самого мака на себя же приходят с корявой кодировкой. В Том же яндексе сделано вот так filename="=?UTF-8?B?0JLQvdGD0YLRgNC10L3QvdGP0Y8uanBn?=" и на мак и на планшет приходит все классно.

Теперь вопрос, как я могу подменить метод attach и сделать свой функционал, для того что бы по другому формировать заголовки?

#19 Re: Laravel 5.x » Mail attach и русские имена файлов » 16.03.2018 19:04:45

Причем время от времени система тупо показывает нормальные имена, а потом у тех же писем вновь кракозябры. явно какой то косяк есть. На планшете всегда кракозябры. Так же поступили сведения, что и gmail так же криво. Уже всю голову сломал, незнаю как решить...

#20 Re: Laravel 5.x » Mail attach и русские имена файлов » 16.03.2018 18:47:45

Смотрю другие письма, где с  аттачем все хорошо, там имя файла по другому кодируется filename="=?UTF-8?B?0JLQvdGD0YLRgNC10L3QvdGP0Y8uanBn?=" . А так же сам текст сообщения тоже закодирован, а у меня чистый хтмл идет

#21 Laravel 5.x » Mail attach и русские имена файлов » 15.03.2018 13:04:23

Kiran
Ответов: 8

Добрый день!

Пытаюсь отправлять файлы в письме, а вот приходят они ко мне (на мак) с именами из кракозябров...

А вот что получается в письме 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'));
			});

#22 Re: Laravel 5.x » vagrant laravel 5.6 and php error » 07.03.2018 18:01:39

Вообщем решил обновить таки не сложно smile. Все заработало, вопрос снимается...

#23 Laravel 5.x » vagrant laravel 5.6 and php error » 07.03.2018 16:22:46

Kiran
Ответов: 1

Добрый день!

Начал мутить новый проект на laravel 5.6 .  У меня виртуала на vagrant php v7.1.7 . Вообщем то при любой ошибке в php коде, php-fpm просто помирает, а nginx выдает ошибку Bad Gateway. Соответственно ошибку я не вижу и приходиться методом тыка искать, но это совсем изврат smile.

Так же из той же темы перестал сбрасываться весь кэш при выполнении команды cache:clear.

Выручайте, косяк какой то smile. Вагрант не охота обновлять, я там уже внутри и ключи авторизации и деплойер понастроил...

#24 Re: Laravel 5.x » Оптимизация роутинга. » 11.10.2017 17:51:29

Вообщем то работает, спасибо огромное AlexeyMezenin ! Удалил выше описаный роутинг. Единственный минус надо 2 раза набирать команду route:cache что бы сработало, странно ну да ладно, не страшно smile

#25 Re: Laravel 5.x » Оптимизация роутинга. » 11.10.2017 16:23:08

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

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

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