laravel: php artisan optimize return return 'not serializable' error - PullRequest
0 голосов
/ 28 февраля 2020

laravel 6

при запуске: php artisan optimize

Я получил эту ошибку:

Ваши файлы конфигурации не сериализуемы.

Я проверил и нашел целевой файл:

ошибка в: config \ sluggable. php из-за этой части кода:

 'method' => function($string, $separator = '-') {
      $_transliteration = ["/ö|œ/" => "e",
          "/ü/" => "e",
          "/Ä/" => "e",
          "/Ü/" => "e",
          "/Œ/" => "E",
          "/ƒ/" => ""];
      $quotedReplacement = preg_quote($separator, '/');
      $merge = [
          '/[^\s\p{Zs}\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]/mu' => ' ',
          '/[\s\p{Zs}]+/mu' => $separator,
          sprintf('/^[%s]+|[%s]+$/', $quotedReplacement, $quotedReplacement) => '',
      ];
      $map = $_transliteration + $merge;
      unset($_transliteration);
      return preg_replace(array_keys($map), array_values($map), $string);
  },

Я знаю, что сериализация закрытия не разрешена в Laravel. Но как я могу переписать этот кусок кода, используя традиционные функции в sluggable. php?

1 Ответ

1 голос
/ 28 февраля 2020

Это не ограничение Laravel, это Php. - это обходной путь, но он зависит от того, проверяет ли функциональность, использующая это значение метода, подсказку типа Closure, или же контент просто должен быть callable.

Создайте новый класс и примените к нему метод Magi c __invoke(). Внутри этого метода выполните это Закрытие и верните результат. И установите в вашей конфигурации ссылку на экземпляр этого класса. Хитрость здесь в том, что сериализация может ссылаться на объект вместо функции сейчас, и пока эта функция не применяется к свойству в этом классе, она должна работать, потому что сериализация не разрушает методы. Затем метод __invoke() позволяет любому нижестоящему поведению взаимодействовать с объектом, как если бы это была функция.

Я бы посоветовал попытаться найти другой путь, который вообще не требует закрытия. Если опция существует, она будет чище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...