Я хочу отображать изображение пользователя в строке меню, которая является частью главной страницы. master.blade.php
<div class = "login_area">
@if (Auth::check())
<img src = "{{asset('public/user_images/1531068734.jpg')}}" height = "40px"
width = "40px" alt = "" class = "pull-left img-circle login">
<a href = "{{ route('logout') }}" onclick = "event.preventDefault();
document.getElementById('logout-form').submit();"><i class = "fa fa-sign-in" aria-hidden = "true"></i> Logout</a>
<form id = "logout-form" action = "{{ route('logout') }}" method = "POST" style = "display: none;">
<input type = "hidden" name = "_token" value = "{{ csrf_token() }}">
</form>
@else
<a href = "http://www.abc.in\login">Login</a><a href = "http://abc.in/register">Registration</a>
@endif
</div>
Модель изображения: каждое изображение связано с каждым профилем. и каждый профиль связан с пользователем.
<?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
class image extends Model
{
protected $fillable =
['profile_id','user_id','image_name','image_status','image_permission'];
protected $primaryKey = 'image_id';
public function profile()
{
return $this->belongsTo(profile::class,'id','id');
}
}






Вы можете просто использовать общий метод для отображения изображения, как показано ниже. Вам не нужно использовать public/, так как это путь по умолчанию для активов.
<img src = "/user_images/1531068734.jpg" height = "40px" width = "40px" alt = "" class = "pull-left img-circle login">
Вы можете просто получить изображение профиля с Auth::user(), я полагаю, у вас есть связь между пользователем и изображением профиля.
С симпатией используя
<img src = "{{ auth()->user()->image }}" height = "40px"
width = "40px" alt = "" class = "pull-left img-circle login" />
как я могу это сделать, используя построение запросов? поскольку у пользователя много изображений, мне нужно отображать только изображение профиля
Вы можете просто использовать метод View класса share, чтобы сделать переменную (или любое значение) доступной для всех представлений в laravel.
Occasionally, you may need to share a piece of data with all views that are rendered by your application. You may do so using the view facade's share method. Typically, you should place calls to share within a service provider's boot method. You are free to add them to the AppServiceProvider or generate a separate service provider to house them
Внутри файла AppServiceProvider вы добавите такой код:
View::share('key', 'value')
Например:
namespace App\Providers;
use Illuminate\Support\Facades\View;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
View::share('key', 'value');
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
//
}
}
Замените «ключ» на то, что вам нравится, а «значение» - на путь к пользовательскому изображению.
Решение 2: Вы также можете использовать ViewComposer для этого: https://laravel.com/docs/5.5/views#view-composers
Вам не нужно передавать URL-адрес изображения для просмотра с контроллера. Вы можете распечатать путь изображения в поле зрения.
Я увидел ошибку в вашем src-значении тега. Вы используете как
asset('public/user_images/1531068734.jpg')
но метод ресурсов уже использует "общедоступную" в качестве корневой папки. Вы должны удалить "public", так что оно должно соответствовать;
// If image path stored as only file name;
asset('user_images/' . auth()->user()->needed_profile_image_column)
// If image path stored as full path with file name;
asset(auth()->user()->needed_profile_image_column)
Не могли бы вы попробовать то, что я упомянул выше?
у каждого пользователя есть несколько изображений, мне нужно отображать только изображение профиля (image_status == 'profile'). как использовать условие where с этим отношением. auth () -> user () -> required_profile_image_column
Вы можете настроить атрибут в своей модели. Вы можете установить любое изображение для этого настраиваемого атрибута. Проверьте атрибут модели laravel в документации laravel.
Я хочу отображать только изображение профиля, загруженное этим пользователем. как мы видим на панели навигации facebook
Я хочу более подробно описать свой комментарий. Laravel обеспечивает добавление настраиваемого атрибута для использования в качестве столбца таблицы db.
Добавьте следующий код в свою модель пользователя;
.....
protected $appends = [
'profile_photo',
];
/**
* Get user profile photo
*
* @return string
*/
public function getProfilePhotoAttribute()
{
$profile_photo = null;
if ($this->image_status == 'profile'){
$profile_photo = public_path('user_images/' . $this->image));
}
return $profile_photo;
}
Добавьте следующий код в свою область навигации;
<div class = "login_area">
@if (Auth::check())
<img src = "{{ auth()->user()->profile_photo }}" height = "40px" width = "40px" alt = "" class = "pull-left img-circle login">
<a href = "{{ route('logout') }}" onclick = "event.preventDefault(); document.getElementById('logout-form').submit();"><i class = "fa fa-sign-in" aria-hidden = "true"></i> Logout</a>
<form id = "logout-form" action = "{{ route('logout') }}" method = "POST" style = "display: none;">
<input type = "hidden" name = "_token" value = "{{ csrf_token() }}">
</form>
@else
<a href = "http://www.abc.in\login">Login</a>
<a href = "http://abc.in/register">Registration</a>
@endif
</div>
Думаю, это решит вашу проблему.
я пробовал, но не получилось. теперь я обновил свою модель изображения. пожалуйста, проверь это
{{auth () -> пользователь () -> профиль () -> изображение () -> profile_photo}}
мой вопрос в том, как передать URL-адрес изображения от контроллера к просмотру главной страницы. потому что нет маршрута для главной страницы.