Boilerplate Laravel 10: Membuat CRUD User Profile

Membuat CRUD User Profile


Kembali lagi di media-info tutorial laravel. kali ini kita akan membuat crud user profile meneruskan artikel sebelumnya karna kita sudah membuat model user dan profile dan kali ini kita buatkan controller, router dan tampilannya.


Tutorial Sebelumnya - Boilerplate Laravel 9: Membuat User Profile & Seed


Membuat Controller


Silahkan buka cmd kalian karna kita akan membuat controller user dan profile, ketikan code dibawah.


C:\xampp\htdocs\blog> php artisan make:controller UsersController --resource


C:\xampp\htdocs\blog> php artisan make:controller ProfilesController --resource


Maka otomatis UsersController.php dan ProfilesController.php terbuat beserta fungsinya di dalam folder app/Http/Controllers, silahkan edit seperti dibawah ini.


UsersController.php 


<?php

namespace App\Http\Controllers;

use Session;
use App\User;
use App\Profile;
use Illuminate\Http\Request;

class UsersController extends Controller
{

public function index()
{
return view('admin.users.index')->with('users', User::all());
}

public function create()
{
return view('admin.users.create');
}

public function store(Request $request)
{
$this->validate($request, [
'name' => 'required',
'email' => 'required|email'
]);

$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt('password')
]);

$profile = Profile::create([
'user_id' => $user->id,
'avatar'=> 'uploads/avatars/anjas.jpg'
]);

Session::flash('success', 'user save success');

return redirect()->route('users');
}

public function show($id)
{

}

public function edit($id)
{

}

public function update(Request $request, $id)
{

}

public function destroy($id)
{
$user = User::find($id);

$user->profile->delete();

$user->delete();

Session::flash('success', 'delete user success');

return redirect()->back();
}

public function admin($id){

$user = User::find($id);

$user->admin = 1;
$user->save();

Session::flash('success','change admin success');

return redirect()->back();

}

public function not_admin($id){

$user = User::find($id);

$user->admin = 0;
$user->save();

Session::flash('success','change admin success');

return redirect()->back();

}

}


ProfilesController.php


<?php

namespace App\Http\Controllers;

use Session;
use Auth;
use Illuminate\Http\Request;

class ProfilesController extends Controller
{

public function index()
{
return view('admin.users.profile')->with('user', Auth::user());
}

public function create()
{

}

public function store(Request $request)
{

}

public function show($id)
{

}

public function edit($id)
{

}

public function update(Request $request)
{
$this->validate($request, [
'name' => 'required',
'email' => 'required|email',
'facebook' => 'required|url',
'youtube' => 'required|url'
]);

$user = Auth::user();

if($request->hasFile('avatar')){

$avatar = $request->avatar;
$avatar_new = time().$avatar->getClientOriginalName();
$avatar->move('uploads/avatars', $avatar_new);

$user->profile->avatar = 'uploads/avatars/'.$avatar_new;
$user->profile->save();

}

if($request->has('password')){
$user->password = bcrypt($request->password);
}

$user->name = $request->name;
$user->email = $request->email;
$user->profile->facebook = $request->facebook;
$user->profile->youtube = $request->youtube;

$user->save();
$user->profile->save();



Session::flash('success', 'update user profile success');

return redirect()->back();
}

public function destroy($id)
{

}
}


Membuat View


Sebelumnya kita buat dlu menu user dan menu profile di file app.blade.php di dalam folder resources/views/layouts, silahkan sesuaikan seperti dibawah ini.


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">

<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">

<title>{{ config('app.name', 'Laravel') }}</title>

<!-- Styles -->
<link href="/css/app.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css">

<!-- Scripts -->
<script>
window.Laravel = <?php echo json_encode([
'csrfToken' => csrf_token(),
]); ?>
</script>
</head>
<body>
<div id="app">
<nav class="navbar navbar-default navbar-static-top">
<div class="container">
<div class="navbar-header">

<!-- Collapsed Hamburger -->
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#app-navbar-collapse">
<span class="sr-only">Toggle Navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>

<!-- Branding Image -->
<a class="navbar-brand" href="{{ url('/') }}">
{{ config('app.name', 'Laravel') }}
</a>
</div>

<div class="collapse navbar-collapse" id="app-navbar-collapse">
<!-- Left Side Of Navbar -->
<ul class="nav navbar-nav">
&nbsp;
</ul>

<!-- Right Side Of Navbar -->
<ul class="nav navbar-nav navbar-right">
<!-- Authentication Links -->
@if (Auth::guest())
<li><a href="{{ url('/login') }}">Login</a></li>
<li><a href="{{ url('/register') }}">Register</a></li>
@else
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
{{ Auth::user()->name }} <span class="caret"></span>
</a>

<ul class="dropdown-menu" role="menu">
<li>
<a href="{{ route('user.profile') }}">Profile</a>
</li>
<li>
<a href="{{ url('/logout') }}"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
Logout
</a>

<form id="logout-form" action="{{ url('/logout') }}" method="POST" style="display: none;">
{{ csrf_field() }}
</form>
</li>
</ul>
</li>
@endif
</ul>
</div>
</div>
</nav>

<div class="container">
<div class="row">
@if(Auth::check())
<div class="col-lg-4">
<ul class="list-group">
<li class="list-group-item">
<a href="{{ route('categories') }}">Category</a>
</li>

<li class="list-group-item">
<a href="{{ route('posts') }}">Post</a>
</li>

<li class="list-group-item">
<a href="{{ route('tags') }}">Tag</a>
</li>
<li class="list-group-item">
<a href="{{ route('users') }}">User</a>
</li>
</ul>
</div>
@endif
<div class="col-lg-8">

@yield('content')

</div>
</div>
</div>
</div>

<!-- Scripts -->
<script src="/js/app.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js"></script>
<script>
@if(Session::has('success'))
toastr.success("{{ Session::get('success') }}");
@endif

@if(Session::has('info'))
toastr.info("{{ Session::get('info') }}");
@endif
</script>
</body>
</html>


Buat folder users di dalam resources/views/admin 


C:\xampp\htdocs\blog\resources\views\admin> mkdir users


Buat file index.blade.php, profile.blade.php dan create.blade.php di dalam resources/views/admin/users


C:\xampp\htdocs\blog\resources\views\admin\users> mkdir index.blade.php

C:\xampp\htdocs\blog\resources\views\admin\users> mkdir profile.blade.php

C:\xampp\htdocs\blog\resources\views\admin\users> mkdir create.blade.php


dan masukan script di bawah ini


index.blade.php


@extends('layouts.app')


@section('content')

<div class="panel panel-default">
<div class="panel-heading">
User
</div>

<div class="panel-body">
<div class="text-left">
<a class="btn btn-success" href="{{ route('user.create') }}">Add</a>
</div>
<table class="table table-hover">
<thead>
<th>Image</th>
<th>Name</th>
<th>Permission</th>
<th class="text-center">Action</th>
</thead>
<tbody>
@if($users->count() > 0)
@foreach($users as $user)
<tr>
<td><img src="{{ url($user->profile->avatar) }}" width="60px" height="60px" style="border-radius:50%"></td>
<td>{{ $user->name }}</td>
<td>
@if($user->admin)
<a href="{{ route('user.not.admin', ['id' => $user->id]) }}" class="btn btn-xs btn-danger">Remove admin</a>
@else
<a href="{{ route('user.admin', ['id' => $user->id]) }}" class="btn btn-xs btn-success">Make Admin</a>
@endif
</td>
<td class="text-center">
@if(Auth::id() !== $user->id)
<a href="{{ route('user.delete', ['id' => $user->id]) }}" class="btn btn-xs btn-danger">Delete</a>
@endif
</td>
</tr>
@endforeach
@else
<tr>
<th colspan='3' class="text-center">Nothing Posts</th>
<tr>
@endif
</tbody>
</table>
</div>
</div>
@stop


profile.blade.php


@extends('layouts.app')

@section('content')

@include('admin.includes.errors ')

<div class="panel panel-default">
<div class="panel-heading">
Edit Profile
</div>
<div class="panel-body">
<form action="{{ route('user.profile.update') }}" method="post" enctype="multipart/form-data">
{{ csrf_field() }}
<div class="form-group">
<label for="name">Username</label>
<input type="text" class="form-control" value="{{ $user->name }}" name="name">
</div>
<div class="form-group">
<label for="name">Email</label>
<input type="email" class="form-control" value="{{ $user->email }}" name="email">
</div>
<div class="form-group">
<label for="name">Password</label>
<input type="password" class="form-control" name="password">
</div>
<div class="form-group">
<label for="name">Upload</label>
<input type="file" class="form-control" name="avatar">
</div>
<div class="form-group">
<label for="name">Facebook Profile</label>
<input type="text" class="form-control" value="{{ $user->profile->facebook }}" name="facebook">
</div>
<div class="form-group">
<label for="name">Youtube Profile</label>
<input type="text" class="form-control" value="{{ $user->profile->youtube }}" name="youtube">
</div>
<div class="form-group">
<label for="name">About</label>
<textarea name="about" class="form-control" cols="6" rows="6">
{{ $user->profile->about }}
</textarea>
</div>

<div class="form-group">
<div class="text-center">
<button class="btn btn-success" type="submit">Save</button>
</div>
</div>

</form>
</div>
</div>

@stop


create.blade.php


@extends('layouts.app')

@section('content')

@include('admin.includes.errors ')

<div class="panel panel-default">
<div class="panel-heading">
Creat a new user
</div>
<div class="panel-body">
<form action="{{ route('user.store') }}" method="post">
{{ csrf_field() }}
<div class="form-group">
<label for="name">Name</label>
<input type="text" class="form-control" name="name">
</div>
<div class="form-group">
<label for="name">Email</label>
<input type="email" class="form-control" name="email">
</div>
<div class="form-group">
<div class="text-center">
<button class="btn btn-success" type="submit">Save</button>
</div>
</div>
</form>
</div>
</div>

@stop


Membuat Route


Selanjutnya kita akan membuat route untuk user profile, silahkan edit file web.php dan tambahkan script route seperti dibawah


    Route::get('/users', [
'uses' => 'UsersController@index',
'as' => 'users'
]);

Route::get('/user/create', [
'uses' => 'UsersController@create',
'as' => 'user.create'
]);

Route::post('/user/store',[
'uses' => 'UsersController@store',
'as' => 'user.store'
]);

Route::get('/user/admin/{id}', [
'uses' => 'UsersController@admin',
'as' => 'user.admin'
]);

Route::get('/user/not-admin/{id}', [
'uses' => 'UsersController@not_admin',
'as' => 'user.not.admin'
]);

Route::get('/user/profile',[
'uses' => 'ProfilesController@index',
'as' => 'user.profile'
]);

Route::get('/user/delete/{id}',[
'uses' => 'UsersController@destroy',
'as' => 'user.delete'
]);

Route::post('/user/profile/update', [
'uses' => 'ProfilesController@update',
'as' => 'user.profile.update'
]);


pada tahap ini kita sudah beres membuat crud user profile, silahkan coba jalankan maka akan ada tampilan seperti dibawah.


user profile


crud


Tutorial Selanjutnya - Boilerplate Laravel 11: Membuat Middleware Untuk Hak Akses


LihatTutupKomentar