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;
}
고맙습니다. 나는이 메시지 시스템의 작가가 아니며 나에게서 조금 틀린 것처럼 보입니다. 하지만이게 효과가있다. – Garg