doushaiyu5065 2016-08-15 09:04
浏览 32
已采纳

消息视图在Laravel的/中显示相同的用户名

I have messaging system where users can write messages to administrator. The system works great except when Administrator open to read some message the name which should display from who is the message(username) shows the admin username instead.

On the front end user side all is correct.

I can't see where is the problem. Here is the admin message controller

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.');
}

Here is the view

       @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

Messages model

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();

And this I have in User model

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

May be is session related.. here is what I have in BaseController where I check if user is logged in and if is admin or not.

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;
}
  • 写回答

1条回答 默认 最新

  • drnpwmq4536 2016-08-15 09:23
    关注

    It is because you select current user username in else block

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

    Try to replace it to

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

    This way you will select user from users table.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题