2016-08-15 1 views
0

사용자가 메시지를 관리자에게 쓸 수있는 메시징 시스템이 있습니다. 시스템은 관리자가 메시지를 읽기 위해 열 때 메시지 (사용자 이름)에서 표시해야하는 이름 대신 관리자 사용자 이름이 표시되는 것을 제외하고는 훌륭하게 작동합니다.메시지보기 Laravel의받는 사람 필드와 동일한 사용자 이름 표시

프런트 엔드 사용자 측에 모두 맞습니다.

어디에 문제가 있는지 알 수 없습니다. 다음은 관리자 메시지 컨트롤러 여기

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에서 사용자가 로그인했는지 여부와 관리자인지 여부를 확인합니다. 당신이

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

로 사용자 테이블에서 사용자를 선택합니다이 방법을 대체 할 다른 블록에

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

시도를 현재 사용자의 사용자 이름을 선택하기 때문에

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

이 때문이다.

+1

고맙습니다. 나는이 메시지 시스템의 작가가 아니며 나에게서 조금 틀린 것처럼 보입니다. 하지만이게 효과가있다. – Garg