Skip to content

Commit

Permalink
blog crud
Browse files Browse the repository at this point in the history
  • Loading branch information
plusemon committed Jun 1, 2022
1 parent 4075743 commit d4f206c
Show file tree
Hide file tree
Showing 19 changed files with 305 additions and 25 deletions.
5 changes: 5 additions & 0 deletions app/Helpers/MenuManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ public static function all()
'title' => 'Dashboard',
'url' => route('accounts.dashboard'),
],
[
'icon' => '<i class="bx bx-book-open"></i>',
'title' => 'Blogs',
'url' => route('accounts.blogs.index'),
],


// multi level menu example
Expand Down
111 changes: 111 additions & 0 deletions app/Http/Controllers/Accounts/BlogController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
<?php

namespace App\Http\Controllers\Accounts;

use App\Models\Blog;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class BlogController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$data['blogs'] = Blog::all();
return view('accounts.blogs.index', $data);
}

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

/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$request->validate([
'image' => ['required', 'file', 'image'],
'title' => ['required', 'string', 'max:255'],
'body' => ['required', 'string'],
]);

/**
* @var \App\Models\Blog $blog
*/
$blog = Blog::create($request->except('image'));

$blog->uploadFromRequest('image')->save();

return redirect(route('accounts.blogs.index'));
}

/**
* Display the specified resource.
*
* @param \App\Models\Blog $blog
* @return \Illuminate\Http\Response
*/
public function show(Blog $blog)
{
$data['blog'] = $blog;
return view('accounts.blogs.show', $data);
}

/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Blog $blog
* @return \Illuminate\Http\Response
*/
public function edit(Blog $blog)
{
$data['blog'] = $blog;
return view('accounts.blogs.edit', $data);
}

/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Blog $blog
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Blog $blog)
{
$request->validate([
//
]);

$blog->update([
//
]);

return redirect(route('accounts.blogs.index'));
}

/**
* Remove the specified resource from storage.
*
* @param \App\Models\Blog $blog
* @return \Illuminate\Http\Response
*/
public function destroy(Blog $blog)
{
$blog->delete();
return back();
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace App\Http\Controllers;
namespace App\Http\Controllers\Accounts;

use App\Models\Message;
use App\Http\Controllers\Controller;
Expand All @@ -16,7 +16,7 @@ class MessageController extends Controller
public function index()
{
$data['messages'] = Message::all();
return view('accounts.manage-messages.index', $data);
return view('accounts.messages.index', $data);
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
<?php

namespace App\Http\Controllers;
namespace App\Http\Controllers\Accounts;

use Illuminate\Http\Request;
use Plusemon\Uploader\Uploader;
use Spatie\Permission\Models\Role;
use App\Http\Controllers\Controller;

class RoleController extends Controller
{
public function index()
{
$data['roles'] = Role::all();
return view('accounts.access-control.roles.index', $data);
return view('accounts.roles.index', $data);
}

public function store(Request $request)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace App\Http\Controllers;
namespace App\Http\Controllers\Accounts;

use App\Models\Subscriber;
use App\Http\Controllers\Controller;
Expand All @@ -16,7 +16,7 @@ class SubscriberController extends Controller
public function index()
{
$data['subscribers'] = Subscriber::all();
return view('accounts.manage-subscribers.index', $data);
return view('accounts.subscribers.index', $data);
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace App\Http\Controllers;
namespace App\Http\Controllers\Accounts;

use App\Models\User;
use App\Http\Controllers\Controller;
Expand All @@ -17,7 +17,7 @@ class UserController extends Controller
public function index()
{
$data['users'] = User::all();
return view('accounts.manage-users.index', $data);
return view('accounts.users.index', $data);
}

/**
Expand All @@ -27,7 +27,7 @@ public function index()
*/
public function create()
{
return view('accounts.manage-users.create');
return view('accounts.users.create');
}

/**
Expand Down Expand Up @@ -58,7 +58,7 @@ public function store(Request $request)
public function show(User $user)
{
$data['user'] = $user;
return view('accounts.manage-users.show', $data);
return view('accounts.users.show', $data);
}

/**
Expand All @@ -70,7 +70,7 @@ public function show(User $user)
public function edit(User $user)
{
$data['user'] = $user;
return view('accounts.manage-users.edit', $data);
return view('accounts.users.edit', $data);
}

/**
Expand Down
19 changes: 19 additions & 0 deletions app/Models/Blog.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Plusemon\Uploader\traits\HasUploader;

class Blog extends Model
{
use HasFactory, HasUploader;

/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['image', 'title', 'body'];
}
34 changes: 34 additions & 0 deletions database/migrations/2022_06_01_223654_create_blogs_table.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('blogs', function (Blueprint $table) {
$table->id();
$table->string('image')->nullable();
$table->string('title');
$table->longText('body');
$table->timestamps();
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('blogs');
}
};
37 changes: 37 additions & 0 deletions resources/views/accounts/blogs/create.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
@extends('accounts.layouts.main', $meta)

@php
$meta['title'] = 'Add New Blog';
@endphp

@section('main')
<main class="page-content">
<div class="card">
<div class="card-header d-flex justify-content-between">
<h5>{{ $meta['title'] }}</h5>
</div>
<div class="card-body">
@include('components.errors')
<form action="{{ route('accounts.blogs.store') }}" method="POST" enctype="multipart/form-data"
class="row col-md-10 m-auto border p-3">
@csrf
<div class="mb-3">
<label for="">Image</label>
<input type="file" name="image" class="form-control-file">
</div>
<div class="mb-1">
<label for="">Title</label>
<input type="text" name="title" value="{{ old('title') }}" class="form-control">
</div>
<div class="mb-1">
<label for="">Body / Description</label>
<textarea name="body" class="form-control" cols="30" rows="10">{{ old('body') }}</textarea>
</div>
<div class="mt-3 text-center">
<button class="btn btn-primary">Save</button>
</div>
</form>
</div>
</div>
</main>
@endsection
51 changes: 51 additions & 0 deletions resources/views/accounts/blogs/index.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
@extends('accounts.layouts.main', $meta)

@php
$meta['title'] = 'Blogs';
@endphp

@section('main')
<main class="page-content">
<div class="card">
<div class="card-header d-flex justify-content-between">
<h5>{{ $meta['title'] }}</h5>
<a href="{{ route('accounts.blogs.create') }}" class="btn btn-sm btn-primary">Add New</a>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-striped table-bordered datatable">
<thead>
<tr>
<th>#</th>
<th>Image</th>
<th>Title</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
@foreach ($blogs as $blog)
<tr>
<td>{{ $loop->iteration }}</td>
<td><img src="{{ $blog->urlOf('image') }}" height="70"></td>
<td>{{ $blog->title }}</td>

<td class="text-center">
<form action="{{ route('accounts.blogs.destroy', $blog) }}"
onsubmit="return confirm('are you sure want to delete this item?')" method="POST">
@csrf
@method('delete')
<div class="btn-group">
<button type="button" class="btn btn-sm btn-outline-primary">Edit</button>
<button type="submit" class="btn btn-sm btn-outline-danger">Delete</button>
</div>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</main>
@endsection
Loading

0 comments on commit d4f206c

Please sign in to comment.