Получить имя аутентифицированного пользователя и сохранить его

#php #laravel

#php #laravel

Вопрос:

У меня есть форма, в которой вы отправляете «проект». Одно из полей «создано», но пользователь не обновляет это, он получает имя аутентифицированного пользователя в этот момент и вставляет его в БД.

Я знаю, как получить имя пользователя, но проблема в том, что когда я вхожу в систему с другим пользователем, все имя меняется, потому что я сохраняю имя каждый раз. Это мой контроллер проекта

 <?php 

namespace AppHttpControllers;

use AppProject;
use AppClient;
use Auth;
use IlluminateHttpRequest;

class ProjectController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return IlluminateHttpResponse
     */

    public function __construct()
    {
        $this->middleware('auth');

    }



    public function index()
    {
        return view('projects.index', [
            'project' => Project::all()
        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return IlluminateHttpResponse
     */
    public function create()
    {
        if (Auth::user()->role != 1){
            return redirect()->back();
        }else{

        return view('projects.create',[
            'project' => new Project,
            'client' => new Client
        ]);
        }
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  IlluminateHttpRequest  $request
     * @return IlluminateHttpResponse
     */
    public function store(Request $r)
    {

        $validatedData = $r->validate([
            'proj_title' => 'required|max:100',
            'client_id' => 'required',
            'proj_desc' => 'required',
        ]);



        $currentUser = Auth::user()->name;

        $r['created_by'] = $currentUser;



        $project = Project::create($r->all());
        return redirect('/projects')->with('store','');

    }

    /**
     * Display the specified resource.
     *
     * @param  AppProject  $project
     * @return IlluminateHttpResponse
     */
    public function show(Project $project)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  AppProject  $project
     * @return IlluminateHttpResponse
     */
    public function edit(Project $project)
    {
        return view('projects.edit', compact('project'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  AppProject  $project
     * @return IlluminateHttpResponse
     */
    public function update(Request $r, Project $project)
    {
        $project->update($r->all());
        return redirect('/projects')->with('update','');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  AppProject  $project
     * @return IlluminateHttpResponse
     */
    public function destroy(Project $project)
    {
        $project->delete();
        return redirect('/projects')->with('delete','');
    }
}

  

И это мой индекс

 
@section('content')

<div class="row"> 
    <div class="col">
@if (Auth::user()->role == 1)
    <a class="btn btn-success" href="/projects/create">Add Project</a>
@endif
</div>
<div class="col"></div>
<div class="col">
@if(session()->has('store'))
        <div class="alert alert-success mt-2" role="alert">
            <strong>Project created</strong>
        </div>
    @elseif(session()->has('update'))
        <div class="alert alert-success mt-2" role="alert">
            <strong>Project updated</strong>
        </div>
    @elseif(session()->has('delete'))
        <div class="alert alert-success mt-2" role="alert">
            <strong>Project deleted</strong>
        </div>
    @endif
    </div>
    </div>
<br>
<table class="table table-bordered table-hover">
    <thead>
        <tr>
            <th>Project Id</th>
            <th>Title</th>
            <th>Description</th>
            <th>Client Id</th>
            <th>Created by</th>
            <th>Created on</th>
            @if (Auth::user()->role==1)
            <th>Admin</th>
            @endif
        </tr>

    </thead>
    <tbody class="">
        @foreach ($project as $project)
        <tr>
            <td>{{$project->proj_id}}</td>
            <td>{{$project->proj_title}}</td>
            <td>{{$project->proj_desc}}</td>
            <td>{{$project->client_id}}</td>
            <td>{{$project->Auth::user()->name}}</td>
            <td>{{$project->created_at}}</td>
            @if (Auth::user()->role==1)
            <td>
                <div class="dropdown">
                    <button class="btn btn-danger dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Action</button>                                                  
                <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
                    <a class="dropdown-item" href="{{route('projects.edit',$project)}}">Edit</a>

                    <form method="POST" action="{{route('projects.destroy',$project)}}" onsubmit="return confirm('Are you sure you want to delete this?')">
                        @method('DELETE')
                        @csrf
                    <button class="dropdown-item" type="submit">Delete</button>
                    </form>
                 </div>
            </div>
            </td>
            @endif

        </tr>
        @endforeach
    </tbody>
</table>



@endsection
  

Комментарии:

1. Вы пробовали что-нибудь, прежде чем публиковать этот вопрос? Без какого-либо поиска и разработки вы не должны задавать здесь вопросы.

2. Почему это имя? Почему бы и нет id ?

3. Как я уже сказал, я попытался сохранить имя текущего пользователя в переменной и вставить его. Но моя проблема в том, что тогда оно меняется, когда другой пользователь входит в систему. Да, я провел исследование по этому поводу

4. @kerbholz Потому что я думаю, что лучше видеть имя кого-то, чем идентификатор, который, вероятно, вы не знаете, кто это

5. Я с вами, но (для отношений) вы обычно сохраняете id в своей базе данных и отображаете имя, когда это необходимо. Поэтому, когда кто-то меняет свое имя, отношение остается прежним.

Ответ №1:

Я думаю, ваша проблема в том, что вы используете:

 {{ $project->Auth::user()->name }}
  

вместо

 {{ $project->created_by }}