Implemented TaskController

This commit is contained in:
Thuan Bui
2025-03-06 19:57:42 +09:00
parent 67db6acefd
commit 1e94cdbc20
6 changed files with 95 additions and 79 deletions
+69 -1
View File
@@ -2,9 +2,77 @@
namespace App\Http\Controllers;
use App\Models\Category;
use App\Models\Task;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class TaskController extends Controller
{
//
public function index() {
$task = Task::latest('updated_at')->Paginate(20);
return view('task.index', [
'tasks' => $task
]);
}
public function show(Task $task) {
return view('task.show', [
'task' => $task
]);
}
public function create() {
$categories = Category::all();
return view('task.create', [
'categories' => $categories
]);
}
public function store(Task $task) {
$validatedAtts = request()->validate([
'name' => ['required'],
'description' => ['required'],
'category_id' => ['required'],
'location' => ['required'],
'time_estimate' => ['required'],
]);
$validatedAtts['user_id'] = Auth::id();
$task = Task::create(
$validatedAtts
);
return redirect()->route('task.create')->with('success', 'Task created successfully!');
}
public function edit(Task $task) {
$categories = Category::all();
return view('task.edit', [
'task' => $task,
'categories' => $categories
]);
}
public function update(Task $task) {
$validatedAtts = request()->validate([
'name' => ['required'],
'description' => ['required'],
'category_id' => ['required'],
'location' => ['required'],
'time_estimate' => ['required'],
]);
$task->update($validatedAtts);
return redirect('/task/'.$task->id);
}
public function destroy(Task $task)
{
$task->delete();
return redirect()->route('task.index')->with('success', 'Task deleted successfully');
}
}
+2
View File
@@ -4,6 +4,7 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;
class Task extends Model
{
@@ -13,6 +14,7 @@ class Task extends Model
'completed' => false, // Set default value for completed
];
public function user() {
return $this->belongsTo(User::class);
}
@@ -15,8 +15,8 @@ return new class extends Migration
{
Schema::create('tasks', function (Blueprint $table) {
$table->id();
$table->foreignIdFor(User::class);
$table->foreignIdFor(Category::class);
$table->foreignIdFor(User::class)->constrained()->cascadeOnDelete();
$table->foreignIdFor(Category::class)->constrained()->cascadeOnDelete();
$table->string('name');
$table->longText('description');
$table->string('location');
+6
View File
@@ -1,6 +1,12 @@
<x-layout>
<x-slot:heading>Task Page</x-slot:heading>
@if (session('success'))
<div class="bg-green-500 text-white p-3 rounded mb-4">
{{ session('success') }}
</div>
@endif
@foreach ($tasks as $task)
<div class="block border-2 border-gray-500 p-2">
<div><a href="/task/{{ $task->id }}">
+7
View File
@@ -13,5 +13,12 @@
</div>
<div class="mt-5">
<a href="/task/{{ $task->id }}/edit" class="text-sm text-blue-600 dark:text-blue-500 hover:underline">Edit</a>
<form action="/task/{{ $task->id }}" method="POST" class="d-inline">
@csrf
@method('DELETE')
<a href="javascript:void(0)" onclick="if(confirm('Are you sure you want to delete this task?')){this.closest('form').submit()}">
Delete
</a>
</form>
</div>
</x-layout>
+9 -76
View File
@@ -1,5 +1,6 @@
<?php
use App\Http\Controllers\TaskController;
use App\Models\Category;
use App\Models\Task;
use App\Models\User;
@@ -9,83 +10,15 @@ use Illuminate\Validation\Rules\Password;
use Illuminate\Validation\ValidationException;
Route::get('/', function () {
$task = Task::latest('updated_at')->Paginate(20);
return view('task.index', [
'tasks' => $task
]);
});
Route::get('/', [TaskController::class, 'index']);
Route::get('/task', [TaskController::class, 'index'])->name('task.index');
Route::get('/task/create', [TaskController::class, 'create']);
Route::get('/task/{task}', [TaskController::class, 'show'])->name('task.show');
Route::post('/task/create', [TaskController::class, 'store'])->name('task.create');
Route::delete('/task/{task}', [TaskController::class, 'destroy']);
Route::get('/task/{task}/edit', [TaskController::class, 'edit']);
Route::get('/task', function () {
$task = Task::latest('updated_at')->Paginate(20);
return view('task.index', [
'tasks' => $task
]);
});
Route::get('/task/create', function () {
$categories = Category::all();
return view('task.create', [
'categories' => $categories
]);
});
Route::post('/task/create', function () {
//dd(Auth::id());
$validatedAtts = request()->validate([
'name' => ['required'],
'description' => ['required'],
'category_id' => ['required'],
'location' => ['required'],
'time_estimate' => ['required'],
]);
$validatedAtts['user_id'] = Auth::id();
//dd($validatedAtts);
$task = Task::create(
$validatedAtts
);
return redirect()->route('task.create')->with('success', 'Task created successfully!');
})->name('task.create');
Route::get('/task/{id}', function ($id) {
$task = Task::find($id);
return view('task.show', [
'task' => $task
]);
});
Route::get('/task/{id}/edit', function ($id) {
$task = Task::find($id);
$categories = Category::all();
return view('task.edit', [
'task' => $task,
'categories' => $categories
]);
});
Route::patch('/task/{id}', function ($id) {
$task = Task::find($id);
$validatedAtts = request()->validate([
'name' => ['required'],
'description' => ['required'],
'category_id' => ['required'],
'location' => ['required'],
'time_estimate' => ['required'],
]);
//dd($task);
$task->update($validatedAtts);
return redirect('/task/'.$task->id);
});
Route::patch('/task/{task}', [TaskController::class, 'update']);