Моя цель: мы разрабатываем API, и нам нужно настроить сообщение об ошибке не только для отправки пользовательской строки, но и для отправки кода cusotm. Например: пользовательское недействительное сообщение об ошибке электронной почты должно выглядеть следующим образом:
error[
'code' => 102,
'message' => 'invalid email'
]
Я мог бы установить эти пользовательские сообщения об ошибках как массивы, но у меня проблема с электронными письмами.
Я получаю:«Преобразование массива в строку» в Illuminate \ Support \ MessageBag в строке 248. Причина в том, что он ожидает строку, и теперь у меня есть массив.
protected function transform($messages, $format, $messageKey)
{
return collect((array) $messages)
->map(function ($message) use ($format, $messageKey) {
// We will simply spin through the given messages and transform each one
// replacing the :message place holder with the real message allowing
// the messages to be easily formatted to each developer's desires.
return str_replace([':message', ':key'], [$message, $messageKey], $format);
})->all();
}
Я хотел бы переопределить (связать) этот метод с:
protected function transform($messages, $format, $messageKey)
{
return collect((array) $messages)
->map(function ($message) use ($format, $messageKey) {
if(is_array($message)){
$message = json_encode($message);
}
// We will simply spin through the given messages and transform each one
// replacing the :message place holder with the real message allowing
// the messages to be easily formatted to each developer's desires.
return str_replace([':message', ':key'], [$message, $messageKey], $format);
})->all();
}
Я сделал следующие шаги. Я создал папку Libraries / Extensions / MessagesBag и поместил туда следующие файлы.
MessageBagServiceProvider.php
namespace App\Libraries\Extensions\MessageBag;
use Illuminate\Support\ServiceProvider;
class MessageBagServiceProvider extends ServiceProvider{
/**
* Indicates if loading of the provider is deferred.
*
* @var bool
*/
protected $defer = true;
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->app->bind('Illuminate\Support\MessageBag', 'App\Libraries\Extensions\MessageBag\YcoMessageBag');
}
/**
* Get the services provided by the provider.
*
* @return array
*/
public function provides()
{
return array('messagebag');
}
}
MessageBagFacade.php
namespace App\Libraries\Extensions\MessageBag;
use Illuminate\Support\Facades\Facade as IlluminateFacade;
class MessageBagFacade extends IlluminateFacade {
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor() { return 'messagebag'; }
}
YcoMessagebag.php
namespace App\Libraries\Extensions\MessageBag;
use Illuminate\Support\MessageBag as OriginalMessageBag;
class YcoMessageBag extends OriginalMessageBag{
/**
* Format an array of messages.
*
* @param array $messages
* @param string $format
* @param string $messageKey
* @return array
*/
protected function transform($messages, $format, $messageKey)
{
return collect((array) $messages)
->map(function ($message) use ($format, $messageKey) {
if(is_array($message)){
$message = json_encode($message);
}
// We will simply spin through the given messages and transform each one
// replacing the :message place holder with the real message allowing
// the messages to be easily formatted to each developer's desires.
return str_replace([':message', ':key'], [$message, $messageKey], $format);
})->all();
}
}
Я зарегистрировал свой MessageBagServiceprodider.php в config / app.php
App\Libraries\Extensions\MessageBag\MessageBagServiceProvider::class,
Когда я умер и сбросил метод регистрации MessageBagServiceProvider, он сработал, код умер и сбросился "привет ".
Но класс MessageBag не переопределяется, тем не менее исходный класс загружается. Я пытался играть с
$this->app->bind('Illuminate\Support\MessageBag', 'App\Libraries\Extensions\MessageBag\YcoMessageBag');
Я пытался с: $ this-> app-> singleton, я пытался достичь исходного класса с помощью \ Illuminate \ Support \ MessageBag, также пытался с помощью '\ App\ Libraries \ Extensions \ MessageBag \ YcoMessageBag ', но безуспешно. Могу ли я переопределить этот класс? Какое может быть решение?
Спасибо!