Как отобразить изображение пользователя на панели навигации, которая является частью главной страницы в laravel? - PullRequest
0 голосов
/ 12 сентября 2018

Я хочу отобразить изображение пользователя в строке меню, которая является частью главной страницы.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');
}
}

Ответы [ 5 ]

0 голосов
/ 14 сентября 2018

Я хочу описать более подробно мой вышеуказанный комментарий.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>

Думаю, это решит вашу проблему.

0 голосов
/ 12 сентября 2018

Вам не нужно передавать URL-адрес изображения для просмотра с контроллера.Вы можете напечатать путь изображения в поле зрения.

Я увидел ошибку в вашем src значении тега.Вы используете

актив ('public / user_images / 1531068734.jpg')

, но метод актива уже использует "public" в качестве корневой папки.Вы должны удалить «public», так что оно должно быть следующим:

// Если путь к изображению хранится только как имя файла;

asset ('user_images /'. Auth ()-> user () -> required_profile_image_column)

// Если путь к изображению хранится как полный путь с именем файла;

актив (auth () -> user () -> required_profile_image_column)

Не могли бы вы попробовать то, что я упомянул выше?

0 голосов
/ 12 сентября 2018

Symply, используя

<img src="{{ auth()->user()->image }}" height="40px" 
     width="40px" alt="" class="pull-left img-circle login" />
0 голосов
/ 12 сентября 2018

Вы можете просто использовать метод share класса View, чтобы сделать переменную (или любое значение) доступной для всех представлений в laravel.

Иногда вам может понадобиться поделиться частью данных со всеми представлениями, отображаемыми вашим приложением. Вы можете сделать это, используя метод share фасада представления. Как правило, вы должны размещать вызовы для обмена в методе загрузки поставщика услуг. Вы можете добавить их в AppServiceProvider или создать отдельного поставщика услуг для размещения их

Внутри файла 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

0 голосов
/ 12 сентября 2018

Вы можете просто использовать общий метод для отображения изображения, как показано ниже. Вам не нужно использовать public/, так как это путь по умолчанию для активов.

<img src="/user_images/1531068734.jpg" height="40px" width="40px" alt="" class="pull-left img-circle login"> 
...