Извлечение пользователя в методе контроллера хорошо, потому что оно выполняется только один раз для запроса. Нет необходимости использовать его как свойство экземпляра, поскольку для каждого запроса создается новый экземпляр контроллеров.
Вы можете использовать следующий код:
public function index()
{
$user = Auth::user()->with('city')->get();
$articles = $this->getArticlesForUser($user);
return view('home', [
'user' => $user
]);
}
public function getArticlesForUser(User $user){
// Do something with $user
return [];
}
public function delete()
{
$user = Auth::user();
$user->delete();
return view('home');
}
Если цель нужно рассчитать значения один раз и использовать их в разных местах, где можно использовать синглтон:
<?php
class Settings {
private $accessToken = '';
private $items = [];
private static $instance = null;
protected function __construct(){}
public static function getInstance(){
if(static::$instance == null){
static::$instance = static::buildInstance();
}
return static::$instance;
}
private static function buildInstance(){
$instance = new Settings();
$instance->accessToken = md5(rand(1,1000));
$instance->items = [1,2,3];
return $instance;
}
public function getToken(){
return $this->accessToken;
}
}
$settings = Settings::getInstance();
// Both return the same token because the instance is the same
var_dump($settings->getToken());
var_dump(Settings::getInstance()->getToken());