What+do+you+think+are+the+upsides+and+downsides+of+online+learning?
Laraboot: Laravel 5 For Beginners
Laravel 5.2 初学者指南 Laraboot: Laravel 5 For Beginners Bill Keck This book is for sale at http://leanpub.com/laravel-5-for-beginners-laraboot This version was published on 2016-04-04 This is a Leanpub book. Leanpub empowers authors and publishers with the Lean Publishing process. Lean Publishing is the act of publishing an in-progress ebook using lightweight tools and many iterations to get reader feedback, pivot until you have the right book and build traction once you do. © 2015 - 2016 Bill Keck Contents Chapter 1: Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 What Makes The Laravel Framework Special? . . . . . . . . . . . . . . . . . . . . . . . . 3 Upsides . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Downsides . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Why I chose Laravel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Why I’m Writing This Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Artisan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 MySql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Minimum PHP Skills . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 W3 Schools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 MInimum HTML and CSS skills . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Minimum Javascript Skills . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Errata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Contact Bill Keck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Laraboot on Github . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Chapter 2: The Development Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 The Fun Part . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 MAC or Windows? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 MAMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Composer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Minimum Version of PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Homebrew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Command Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Chapter 3: Installation of Laravel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Composer install of Laravel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 CONTENTS Create Project in IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Setup Local Host file: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Vhost Entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 httpd.conf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 MOD Rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Restart Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Chapter 4: Let’s Get Started With Laravel . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Set Up The Repository . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Initial Commit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Diving Into Workflow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Setup the DB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 .env . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Application Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Basic Stitching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Routes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 The Style Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Unit Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Creating a Route . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Creating a Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Artisan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 RESTful pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Namespaces and Use Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Index Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Blade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Creating A Master Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 CDN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 View Partials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Full Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Chapter 5: User Registration And Login . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Controllers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 User Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Migrations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Installing the Dbal Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Make Auth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 AuthController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Traits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Gravatar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Facades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 CONTENTS Bootstrapper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Pages Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 New Nav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Auth Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Auth Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 emails view folder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 password.blade.php. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Config Folder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 passwords view folder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 email.blade.php view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 reset.blade.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Auth View Folder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 register.blade.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 login.blade.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Chapter 6: Working with the RESTful Pattern . . . . . . . . . . . . . . . . . . . . . . . . . 121 Sweet Alert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Model Factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Route Resource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 RESTful Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Collective HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Config . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Errors List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Store Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 Die and Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Index Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Datatables Jquery Plugin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Datatables CDN Call . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Datatables CSS CDN Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 The API Route . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Api/Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Test the API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Index View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Datatable Partial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 Datatable-script Partial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Slugs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Changing the Store Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Create the Slug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Changing the Create Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Add Auth Use Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 CONTENTS Change $fillable Property on Widget Model . . . . . . . . . . . . . . . . . . . . . . . . . 171 Basic Relationships . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 Change widgetData Method on ApiController . . . . . . . . . . . . . . . . . . . . . . . . 173 Change datatable.blade Headings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Change datatable-script.blade.php to Add Columns . . . . . . . . . . . . . . . . . . . . . 174 Add Middleware to WidgetController . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Change Routes to Widget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Show Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 Accessors and Mutators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 Edit Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 Update Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Destroy Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Error Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 404.blade.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Nav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 Chapter 7: Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 OwnsRecord Trait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 Modify User Table Migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 User $fillable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Admin Middleware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 AllowIfAdmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 isAdmin Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 Admin Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 NoActiveAccountException . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Modifying the Auth Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 AuthController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Update Users Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Registration Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 register.blade.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Users Migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Update User $fillable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 AuthController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 Create Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Terms Of Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 Privacy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 Chapter 8: Socialite - One Click Facebook Login . . . . . . . . . . . . . . . . . . . . . . . . 261 Facebook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 Modify Users Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 CONTENTS Mass Assignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 Social Routes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 session.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 InvalidStateException . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Set up Facebook App . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 Step 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 Step 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 Step 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 Step 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 Step 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 Step 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 Step 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 Step 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 Step 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 Step 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 Step 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 Step 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 Step 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 Integrating Socialite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 AuthController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 Navigation To Facebook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 Chapter 9: Profile, Settings and Admin Dash . . . . . . . . . . . . . . . . . . . . . . . . . . 309 Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 my-profile and show-profile Routes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 Add Profile to Nav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 Profile Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 Show View - Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 Index View - Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 Edit View - Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 API Route for Profile: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 profileData Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 Datatable-script - Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 Datatable View - Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 Users For Admin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 UserController.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 UserRequest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 User Model changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 HasModelTrait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Index View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 Datatable View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 Datatable-script View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 CONTENTS Show View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 Edit View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 Navigation to Users & Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 Settings Routes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 SettingsController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 Create Settings View Folder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 Edit View For Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 Add Settings To Nav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 Admin Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Add Facebook sign in buttons to Login and Register Views . . . . . . . . . . . . . . . . . 388 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 Chapter 10: Working With Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 Create imgs, marketing-images, and thumbnails folder. . . . . . . . . . . . . . . . . . . . 392 Create Image Request . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 Show Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 Add Accessor Methods to MarketingImage Model . . . . . . . . . . . . . . . . . . . . . . 423 show view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 Edit view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 Edit Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 Edit Image Request . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434 Update method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 Destroy Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 Api route . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442 API Controller Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442 Index method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 index view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 datatable view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 datatable-script.blade.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 Add Nav To Marketing Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449 Carousel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450 Pages Index View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450 Update slider.blade.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 image_weight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 Modify MarketingImageController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 CreateImageRequest and EditImageRequest . . . . . . . . . . . . . . . . . . . . . . . . . 463 Marketing Image Create and edit Views . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 MarketingImage Show View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 marketingImageData API Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 Datatable View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 datatable-script.blade.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 PagesController Index Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 CONTENTS grid.blade.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 nav.blade.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 Chapter 11: Making a Custom Artisan Command . . . . . . . . . . . . . . . . . . . . . . . 470 Make Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470 Kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 Handle Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 makeTraitDirectory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485