Use the following command for help:
php artisan help make:controller
$ php artisan make:controller ProjectsController
$ php artisan make:controller ProjectsController -r
$ php artisan make:controller ProjectsController -r -m Post
<?php
/*
* $php artisan route:list
GET /projects (index)
GET /projects/create (create)
GET /projects/1 (show)
POST /projects (store)
GET /projects/1/edit (edit)
PATCH /projects/1 (update)
DELETE /projects/1 (destroy)
*/
// Use 'resource' as oppose to creating a method for each (CRUD)
Route::resource('projects', 'ProjectsController');
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Project;
class ProjectsController extends Controller
{
public function index() {
$projects = Project::all();
// return $projects;
return view('projects.index', compact('projects'));
}
public function store() {
// return request()->all(); // ** for debugging
// $project = new Project();
// $project->title = request('title');
// $project->description = request('description');
// $project->save();
// ** See shortcut below
// validations
$attributes = request()->validate([
'title' => ['required', 'min:3', 'max:255'],
'description' => ['required', 'min:3'],
]);
// Must add 'title' & 'description' to fillable property in Project Model
Project::create($attributes);
// redirect to index
return redirect('/projects'); // GET request by default
}
public function create() {
return view('projects.create');
}
public function show(Project $project) {
return view('projects.show', compact('project'));
}
public function update(Project $project) {
// dd('updated!'); // ** for debugging
$project->update(request(['title', 'description']));
return redirect('/projects');
}
public function destroy(Project $project) {
// dd('deleted!'); // ** for debugging
$project->delete();
return redirect('/projects');
}
public function edit(Project $project) {
return view('projects.edit', compact('project')); // pass var into view
}
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Project extends Model
{
// Which fields am I okay with being mass assigned? (Only the necessary, for security purposes)
// protected $fillable = [
// 'title',
// 'description'
// ];
// All fields can be mass assigned except for the following:
protected $guarded = [];
}