2016-08-15 66 views
0

我有消息系統,用戶可以在其中向管理員寫入消息。系統工作良好,除非管理員打開閱讀某些消息時,應該從消息(用戶名)顯示的名稱顯示管理員用戶名。消息視圖在Laravel的from/to字段顯示相同的用戶名

在前端用戶方面都是正確的。

我看不出問題在哪裏。下面是管理員消息控制器

public function messagesView($userId) { 
    /** @var User $user */ 
    $user = User::where('user_id', $userId)->first(); 
    if (!$user) { 
     App::abort(404); 
    } 
    $messages = $user->messages()->orderBy('created_at', 'asc')->get(); 
    return View::make('site.admin.messages_view', [ 
     'messages' => $messages 
    ]); 
} 

public function messagesViewSubmit($userId) { 
    /** @var User $user */ 
    $user = User::where('user_id', $userId)->first(); 
    if (!$user) { 
     App::abort(404); 
    } 

    $validatorRules = array(
     'message' => 'required|min:5', 
    ); 

    Input::merge(array_map('trim', Input::all())); 
    $validator = Validator::make(Input::all(), $validatorRules); 

    if ($validator->fails()) { 
     return Redirect::to('/admin/messages/view/' . $userId)->withErrors($validator->errors())->withInput(Input::all()); 
    } 

    $message = new Message; 
    $message->user_id = $userId; 
    $message->text = Input::get('message'); 
    $message->read_state = 0; 
    $message->from_admin = 1; 
    $message->save(); 
    return Redirect::to('/admin/messages/view/' . $userId)->with('message_success', 'Message sent.'); 
} 

這裏是視圖

 @foreach($messages as $message) 
      @if($message->from_admin) 
       <div class="row"> 
        <div class="media well col-xs-9"> 
         <div class="media-left"> 
          <img class="media-object" src="{{ URL::to('/img/admin.png') }}" alt=""> 
         </div> 
         <div class="media-body user-message"> 
          <h4 class="media-heading"><span style="font-weight: bold; color: red">Administrator {{{ $user['user_id'] }}}</span></h4> 
          <span>{{ $message->created_at }}</span> 
          <hr class="hr-sm-gray" /> 
          {{ nl2br($message->text) }} 
         </div> 
        </div> 
       </div> 
      @else 
       <div class="row"> 
        <div class="media well col-xs-9 col-xs-offset-3"> 
         <div class="media-body text-right user-message"> 
          <h4 class="media-heading">{{{ $user['username'] }}} - {{{ $user['user_id'] }}}</h4> 
          <span>{{ $message->created_at }}</span> 
          <hr class="hr-sm-gray" /> 
          {{ nl2br(e($message->text)) }} 
         </div> 
         <div class="media-right"> 
          <img class="media-object" src="{{ URL::to('/img/user.png') }}" alt=""> 
         </div> 
        </div> 
       </div> 
       @if($message->read_state == 0) 
        {{ $message->markAsRead() }} 
       @endif 
      @endif 
     @endforeach 

消息模型

protected $table = 'messages'; 
protected $primaryKey = 'message_id'; 

public function user() { 
    return $this->belongsTo('User', 'user_id', 'user_id'); 
} 

public function markAsRead() { 
    $this->read_state = '1'; 
    $this->save(); 

這我已經在用戶模式

public function messages() { 
    return $this->hasMany('Message', 'user_id', 'user_id'); 
} 

可能是會話相關..這裏是我在BaseController中檢查用戶是否已登錄,以及是否爲admin。

protected function setupLayout() 
{ 
    if (!is_null($this->layout)) 
    { 

     $this->layout = View::make($this->layout); 
    } 

    $user = self::getCurrentUser(); 
    View::share('isLoggedIn', self::isLoggedIn()); 
    View::share('user', $user); 
    if (self::isLoggedIn()) { 
     View::share('messagesCount', $user->messages()->where('read_state', '0')->where('from_admin', '1')->count()); 
    } 
} 

public static function isLoggedIn() { 
    $user = Session::get('user', null); 
    if ($user !== null) { 
     return true; 
    } else { 
     return false; 
    } 
} 

public static function isAdmin() { 
    if (!self::isLoggedIn()) { 
     return false; 
    } 

    $user = self::getCurrentUser(); 
    return (bool)$user->is_admin; 
} 

public static function getCurrentUser() { 
    if (!self::isLoggedIn()) { 
     return null; 
    } 

    $user = Session::get('user', null); 
    if (self::$user == null) { 
     $user = User::where('user_id', $user['user_id'])->first(); 
     self::$user = $user; 
    } 

    return self::$user; 
} 

回答

0

這是因爲你在別的塊選擇當前用戶的用戶名

<h4 class="media-heading">{{{ $user['username'] }}} - {{{ $user['user_id'] }}}</h4> 

嘗試將其更換到

<h4 class="media-heading">{{{ $message->user->username }}} - {{{ $user['user_id'] }}}</h4> 

這樣,您將選擇從用戶表用戶。

+1

謝謝你的工作。我不是這個消息系統的作者,看起來有點不對。但這是行得通的 – Garg

相關問題