Laratrust, odc.4y - Budowanie Pozwoleń, czyli Permissions
Ponieważ od razu stworzyliśmy sobie Route, to możemy teraz stworzyć kontroler.
A zatem używamy jak zwykle tej samej komendy:
php artisan make:controller PermissionController --resource
Chyba, że nie zależy nam na dopisaniu funkcji publicznych, ale pustych całego CRUD, to można pominąć '--resource'. Tworzymy BARDZO prosty, bez powiadomień w sesji, ani żadnych dodatkowych rzeczy jak na przykład możliwość stworzenia od razu całego CRUD, a nie pojedyńczych pozwoleń.
Tutaj jest cała zawartość naszego kontrolera:
Starałem się zrobić jak najszybciej cały View w Bootstrap dla tego projektu, a i tak zajęło mi to sporo czasu :) tworząc od zera. Dlatego ograniczyłem go do MEGA podstaowej wersji i na 100% nie jest to gotowy produkt dla klienta. Nie mniej jednak może pomóc zrozumieć działanie CRUD jak i całego Laratrust. Na końcu poszukam największe błędy i je usuniemy. Część kodu jest z mojego starego projektu z Laravel 5 jeszcze z Vue w plikach blade. Przyspieszyło mi to pracę, ale widać błędy w nich. Nie mniej jednak zacznijmy ze stronami.
Tutaj jest strona index z podkatalogu o nazwie permissions:
Teraz create.blade.php:
Kolejna to edit.blade.php:
No i na końcu show.blade.php:
Teraz dostęp powien być już po naszym adresie projektu oraz '/manage/permissions'. Jeżeli jest błąd, to oznacza, że coś źle wkleiliśmy, albo przepisaliśmy.
Możemy wrócić do głównego tematu żeby stworzyć role użytkownikom. Link do powrotu jest TUTAJ.
A zatem używamy jak zwykle tej samej komendy:
php artisan make:controller PermissionController --resource
Chyba, że nie zależy nam na dopisaniu funkcji publicznych, ale pustych całego CRUD, to można pominąć '--resource'. Tworzymy BARDZO prosty, bez powiadomień w sesji, ani żadnych dodatkowych rzeczy jak na przykład możliwość stworzenia od razu całego CRUD, a nie pojedyńczych pozwoleń.
Tutaj jest cała zawartość naszego kontrolera:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Permission;
class PermissionController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$permissions = Permission::all();
return view('manage.permissions.index')->withPermissions($permissions);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('manage.permissions.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->validateWith([
'display_name' => 'required|max:150',
'name' => 'required|max:100|alphadash|unique:permissions,name',
'description' => 'sometimes|max:200'
]);
$permission = new Permission();
$permission->name = $request->name;
$permission->display_name = $request->display_name;
$permission->description = $request->description;
$permission->save();
return redirect()->route('permissions.index');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$permission = Permission::findOrFail($id);
return view('manage.permissions.show')->withPermission($permission);
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$permission = Permission::findOrFail($id);
return view('manage.permissions.edit')->withPermission($permission);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$this->validateWith([
'display_name' => 'required|max:150',
'description' => 'sometimes|max:200'
]);
$permission = Permission::findOrFail($id);
$permission->display_name = $request->display_name;
$permission->description = $request->description;
$permission->save();
return redirect()->route('permissions.show', $id);
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
Starałem się zrobić jak najszybciej cały View w Bootstrap dla tego projektu, a i tak zajęło mi to sporo czasu :) tworząc od zera. Dlatego ograniczyłem go do MEGA podstaowej wersji i na 100% nie jest to gotowy produkt dla klienta. Nie mniej jednak może pomóc zrozumieć działanie CRUD jak i całego Laratrust. Na końcu poszukam największe błędy i je usuniemy. Część kodu jest z mojego starego projektu z Laravel 5 jeszcze z Vue w plikach blade. Przyspieszyło mi to pracę, ale widać błędy w nich. Nie mniej jednak zacznijmy ze stronami.
Tutaj jest strona index z podkatalogu o nazwie permissions:
@extends('layouts.manage')
@section('content')
<div class="container">
<div class="col">
<div class="col">
<h1 class="title">Zarządzaj Pozwoleniami</h1>
</div>
<br>
<div class="row">
<div class="column">
<a href="{{route('permissions.create')}}" class="button btn btn-success"><i class="fa fa-user-plus m-r-10"></i> Stwórz nowe pozwolenie</a>
</div>
<div class="col-3">
<a href="/manage/users" class="button btn btn-secondary"><i class="fa fa-edit m-r-10"></i> Idź do listy użytkowników</a>
</div>
<div class="col-3">
<a href="/manage/roles" class="button btn btn-secondary"><i class="fa fa-edit m-r-10"></i> Zarządzaj Rolami</a>
</div>
</div>
</div>
<br>
<div class="card">
<div class="card-content">
<table class="table is-narrow">
<thead>
<tr>
<th>Nazwa</th>
<th>Slug</th>
<th>Opis</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach ($permissions as $permission)
<tr>
<th>{{$permission->display_name}}</th>
<td>{{$permission->name}}</td>
<td>{{$permission->description}}</td>
<td class="has-text-right"><a class="button btn btn-secondary" href="{{route('permissions.show', $permission->id)}}">Zobacz</a> <a class="button btn btn-info" href="{{route('permissions.edit', $permission->id)}}">Edytuj</a></td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
@endsection
Teraz create.blade.php:
@extends('layouts.manage')
@section('content')
<div class="container">
<div class="col">
<h1 class="title">Stwórz nowe pozwolenie</h1>
</div>
<hr>
<a href="/manage/permissions" class="button btn btn-primary">Wróć do listy Pozwoleń</a>
<br><br>
<div class="row">
<form action="{{route('permissions.store')}}" method="POST">
{{csrf_field()}}
<div class="col">
<label for="display_name" class="label">Nazwa (Wyświetlana nazwa)</label><br>
<input type="text" class="text" name="display_name" id="display_name" placeholder="Nazwa">
</div><hr>
<div class="col">
<label for="name" class="label">Slug (Tej opcji nie można zmieniać!)</label><br>
<input type="text" class="text" name="name" id="name">
</div><hr>
<div class="col">
<label for="description" class="label">Opis</label><br>
<input type="text" class="text" name="description" id="description" placeholder="Tutaj wstaw opis" value="">
</div><hr>
<button class="button btn btn-success">Zapisz zmiany</button>
</form>
</div>
</div> <!-- end of .flex-container -->
@endsection
Kolejna to edit.blade.php:
@extends('layouts.manage')
@section('content')
<div class="container">
<div class="columns m-t-10">
<div class="column">
<h1 class="title">Edytuj szczegóły Pozwolenia: {{$permission->id}}</h1>
</div>
<div class="column">
<a href="/manage/permissions" class="button is-primary is-pulled-right"><i class="fa fa-edit m-r-10"></i> Wróć do listy Pozwoleń</a>
</div>
</div>
<hr class="m-t-0">
<form action="{{route('permissions.update', $permission->id)}}" method="POST">
{{csrf_field()}}
{{method_field('PUT')}}
<div class="field">
<label for="display_name" class="label">Nazwa (Wyświetlana nazwa)</label>
<p class="control">
<input type="text" class="input" name="display_name" id="display_name" value="{{$permission->display_name}}">
</p>
</div>
<div class="field">
<label for="name" class="label">Slug <small>(Tej opcji nie można zmieniać!)</small></label>
<p class="control">
<input type="text" class="input" name="name" id="name" value="{{$permission->name}}" disabled>
</p>
</div>
<div class="text">
<label for="description" class="label">Opis</label>
<p class="control">
<input type="text" class="input" name="description" id="description" placeholder="Tutaj wstaw opis" value="{{$permission->description}}">
</p>
</div>
<button class="button btn btn-primary">Zapisz zmiany</button>
</form>
</div>
@endsection
No i na końcu show.blade.php:
@extends('layouts.manage')
@section('content')
<div class="container">
<div class="columns m-t-10">
<div class="column">
<h1 class="title">Szczegóły Pozwolenia</h1>
</div>
<br>
<div class="row">
<div class="col-3">
<a href="{{route('permissions.edit', $permission->id)}}" class="button btn btn-primary"><i class="fa fa-edit m-r-10"></i> Edytuj Pozwolenie</a>
</div>
<div class="col-3">
<a href="/manage/permissions" class="button btn btn-secondary"><i class="fa fa-edit m-r-10"></i> Wróć do listy Pozwoleń</a>
</div>
</div>
<br>
</div>
<div class="columns">
<div class="column">
<div class="box">
<article class="media">
<div class="media-content">
<div class="content">
<p>
<b><h4>Nazwa wyświetlana: </b><br><br>{{$permission->display_name}}</h4><hr><br><h4><b>Nazwa w bazie danych:</b><br><br> {{$permission->name}}</h4>
<br><hr>
<b><h4>Opis Pozwolenia: </b><br><br>{{$permission->description}}</h4>
</p>
</div>
</div>
</article>
</div>
</div>
</div>
</div>
@endsection
Teraz dostęp powien być już po naszym adresie projektu oraz '/manage/permissions'. Jeżeli jest błąd, to oznacza, że coś źle wkleiliśmy, albo przepisaliśmy.
Możemy wrócić do głównego tematu żeby stworzyć role użytkownikom. Link do powrotu jest TUTAJ.
Comments
Post a Comment