Как использовать метод show для внутренних пользователей на laravel - PullRequest
0 голосов
/ 12 октября 2019

Я бы хотел использовать метод show для внутренних пользователей.

вот мои маршруты

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::resource('/admin', 'AdminController');

Route::resource('/farm', 'FarmController');

Route::resource('/clinic', 'ClinicController');

Route::resource('/slaughter', 'SlaughterController');

Route::get('/home', 'HomeController@index')->name('home');

мой контроллер администратора

<?php

namespace App\Http\Controllers;

use App\Role;
use App\User;
use Illuminate\Http\Request;

class AdminController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */

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


    public function index()
    {
        $user = User::all();
        return view('admin.index', compact('user'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param User $user
     * @return \Illuminate\Http\Response
     */
    public function show()
    {
        $user = User::all();
        return view('admin.show', compact('user'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

мой админ / индекс

@extends('layouts.app')

@section('content')
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-header">Admin Dashboard</div>

                    <div class="card-body">
                        @if (session('status'))
                            <div class="alert alert-success" role="alert">
                                {{ session('status') }}
                            </div>
                        @endif

                        Welcome! {{ Auth::user()->name }}


                                @foreach($user as $user)
                                    <div class="row">
                                        <div class="col-2">{{ $user->id }}</div>
                                        <div class="col-4"><a href="/admin/{{ $user->id }}">{{ $user->name }}</a></div>
                                        <div class="col-4">{{ $user->role->description }}</div>
                                    </div>
                                @endforeach

                    </div>
                </div>
            </div>
        </div>
    </div>
@endsection

и мой админ / шоу

@extends('layouts.app')
@section('title', 'Details for ' . $user->name )
@section('content')
    <div class="row">
        <div class="col-12">
            <h1>Details for {{ $user->name }}</h1>
            <a href="/admin/{{ $user->id }}/edit">Edit</a>
            <form action="/admin/{{ $user->id }}" method="POST">
                @method('DELETE')
                @csrf
                <button class="btn btn-danger" type="submit">Delete</button>
            </form>
        </div>
    </div>
    <div class="row">
        <div class="col-12">
            <p><strong>Name: </strong>{{ $user->name }}</p>
            <p><strong>Email: </strong>{{ $user->email }}</p>
            <p><strong>Role: </strong>{{ $user->role->description }}</p>
        </div>
    </div>
@endsection

Но выдает эту ошибку

Свойство [имя] не существует в этом экземпляре коллекции. (Просмотр: /Users/macair13/MeatracProject/resources/views/admin/show.blade.php)

А также я создал роль таблицы с role_id в качестве внешнего ключа в таблице пользователей.

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

Ответы [ 2 ]

1 голос
/ 12 октября 2019

Ваша функция show должна отображать одного пользователя, но вы закодировали ее, чтобы показать всех из них. Попробуйте это:

public function show(User $user)
{
    return view('admin.show')->with('user', $user);
}
0 голосов
/ 12 октября 2019

Передайте метод id через show(). И позвоните конкретному пользователю с этим идентификатором. Это покажет пользователю с определенным id.

public function show($id)
{
    $user = User::query()->findOrFail($id);
    return view('admin.show', compact('user'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...