Мне нужно иметь доступ к определенным переменным во всем приложении (во всех блейд-файлах). В настоящее время я могу получить к ним доступ только на одной странице, и эта страница настроена в контроллере (profile.show). Мне удалось получить доступ к одной из этих переменных с представлением composer в AppServiceProvider. php, но я не могу сделать это для других. Когда я сбрасываю их на какой-то другой блейд, он показывает ошибку, которая не определена, но profile_details работает нормально. Мне нужна помощь о том, как поместить эти переменные ($ profile, $ data, $ options, $ photos) в AppServiceProvider. php composer, чтобы иметь доступ к ним. Любая помощь приветствуется. Вот мой код.
AppServiceProvider. php
<?php
namespace App\Providers;
use App\User;
use App\UserProfile;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\ServiceProvider;
use Illuminate\Database\Schema\Builder; // Import Builder where defaultStringLength method is defined
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
view()->composer('*', function ($view) {
$view->with('profile_details', Auth::id() ? UserProfile::profileDetails(Auth::id(), Auth::id()) : []);
});
Builder::defaultStringLength(191); // Update defaultStringLength
}
}
UserProfileController. php
class UserProfileController extends Controller
{
public function showProfile($username, Request $request)
{
$user = $request->user();
$viewer = User::find(Auth::id());
$owner = User::where('username', $username)->first();
if($viewer->id !== $owner->id && !$owner->active){
abort(404);
}
if(!$profileId = User::getIdFromUsername($username)){
abort(404);
}
$profile = UserProfile::profileDetails($profileId, $viewer->id);
$data = UserProfile::getProfileLookingFor(Auth::user()->id);
$options = UserProfile::getProfileLookingForDisplayOptions();
$details = $this->returnDropdowns();
$photo = new Photo();
$photos = $photo->managePhotos();
return view('profile.show', compact('user', 'profile', 'data', 'options', 'details', 'photos'));
}
}
UserProfile. php
<?php
namespace App;
use App\User;
use App\Value;
use App\FieldValue;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
class UserProfile extends Model
public function user()
{
return $this->belongsTo(User::class);
}
public static function profileData($profileId, $viewerId)
{
$user = User::find($viewerId);
$profile = DB::table('users as u')
->select(DB::raw("
data.*,
u.id, u.gender_id, u.username, u.email, u.password, u.first_name, u.last_name, u.age, u.date_of_birth, u.premium, u.active, u.job, u.mobile_number
"))
->leftJoin('user_profiles as data', 'data.user_id', '=', 'u.id')
->where('u.id', $profileId)
->first();
return $profile;
}
public static function profileDetails($profileId, $viewerId)
{
$profile = static::profileData($profileId, $viewerId);
if ($profile) {
if ($viewerId != $profileId) {
# Viewer is displaying another user's profile.
$myProfile = false;
} else {
$myProfile = true;
}
}
$unit = FieldValue::measure();
$height = App::make('App\FieldValue')->height($profile->height, $unit);
$profile = [
'viewerId' => $viewerId,
'profile_id' => $profileId,
'myProfile' => $myProfile,
'height' => $height,
'personal_quote' => $profile->personal_quote,
'about_me' => $profile->about_me,
'astro' => UserAstro::all(),
'bodyType' => UserBodyType::all(),
'children' => UserChildren::all(),
'education' => UserEducation::all(),
'orientation' => UserOrientation::all(),
'relationshipStatus' => UserRelationshipStatus::all(),
'smoke' => UserSmoke::all(),
];
return $profile;
}
public static function getProfileLookingFor($userId)
{
$results = DB::table('user_interests')
->select('field_id', 'value_id')
->where('user_id', $userId)
->orderBy('field_id')
->get();
$data = [];
if (! empty($results)) {
foreach ($results as $result) {
if (isset($data[$result->field_id])) {
array_push($data[$result->field_id], $result->value_id);
} else {
$data[$result->field_id] = [$result->value_id];
}
}
}
return $data;
}
public static function getProfileLookingForDisplayOptions()
{
$options = [
'gender' => ['id' => 1, 'label' => "Interessiert an"],
'looking_for' => ['id' => 2, 'label' => ""]
];
$data_options = [];
foreach ($options as $field => $value) {
$data_options[$field]['data'] = Value::fieldValues($field);
$data_options[$field]['label'] = $options[$field];
if (!in_array($field, ['gender', 'looking_for'])) {
$data_options[$field]['data'][100] = "Doesn't matter";
}
}
return $data_options;
}
public function postProfileLookingFor($userId, Request $request)
{
$data = $request->all();
$options = [
'gender' => 1,
'looking_for' => 2
];
foreach ($options as $fieldName => $fieldId) {
if (! empty($data[$fieldName])) {
DB::table('user_interests')
->where('user_id', $userId)
->where('field_id', $fieldId)
->delete();
if (is_array($data[$fieldName])) { // Checkboxes
foreach ($data[$fieldName] as $key => $value) {
DB::table('user_interests')->insert([
'user_id' => $userId,
'field_id' => $fieldId,
'value_id' => $value
]);
}
} else { // Select fields
DB::table('user_interests')->insert([
'user_id' => $userId,
'field_id' => $fieldId,
'value_id' => $data[$fieldName]
]);
}
}
}
}
}