Мне нужно внести изменения в функцию retrieveUser () в Illuminate / Broadcasting / Broadcasters / Broadcaster.php.
Изменение работает, если я редактирую класс напрямую, но я слышал, что вы не должны этого делать, потому что сложно отслеживать изменения в исходном коде и потому, что он будет перезаписан при обновлении Laravel или при переходе в рабочий режим .
Так что, если я хочу написать свою собственную модифицированную функцию retrieveUser () для класса Broadcaster (это абстрактный класс, реализующий BroadcasterContract), то где и как я это сделаю?
Оригинальная функция:
/**
* Retrieve the authenticated user using the configured guard (if any).
*
* @param \Illuminate\Http\Request $request
* @param string $channel
* @return mixed
*/
protected function retrieveUser($request, $channel)
{
$options = $this->retrieveChannelOptions($channel);
$guards = $options['guards'] ?? null;
if (is_null($guards)) {
return $request->user();
}
foreach (Arr::wrap($guards) as $guard) {
if ($user = $request->user($guard)) {
return $user;
}
}
}
Новая функция:
protected function retrieveUser($request, $channel)
{
$options = $this->retrieveChannelOptions($channel);
$guards = $options['guards'] ?? null;
if (is_null($guards)) {
$token = $request->header('Token');
$id = Crypt::decrypt($token);
$user = User::find($id);
return $user;
}
foreach (Arr::wrap($guards) as $guard) {
if ($user = $request->user($guard)) {
return $user;
}
}
}
UPDATE
Как отметил @ggdx в комментариях, я могу переопределить класс, выполнив class yourClass extends Illuminate\Broadcasting\Broadcasters\Broadcaster
Тем не менее, я до сих пор не знаю , где , чтобы поместить этот новый класс в структуру Laravel. Я попытался создать новый класс в / app route, но это не сработало.