RPeraltaJr
3/6/2018 - 5:02 PM

Create a Controller (with resources; with model options)

Use the following command for help:
php artisan help make:controller

Create a Controller

$ php artisan make:controller ProjectsController

Controller with CRUD functions (resources)

Comes with built-in CRUD functions

$ php artisan make:controller ProjectsController -r

Create a Controller with resources and model

$ 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 = [];

}