Laravel

From Adam Colton
Revision as of 20:27, 23 January 2016 by Adamcolton (talk | contribs) (→Routes)
Jump to navigation Jump to search

Implicit Route Binding

From this video

 Route::get('users/{user}', function(App\User $user){
   return $user;
 });

If the arg name matches the token, it will magic that value into place. With the type hinting, it will find a user with the primary key given in the url.

To use something other than the primary key, you have to add a route binding in RouteServiceProvider.

Auth

Video

 php artisan make:auth

Creates a bunch of views, routes and adds a controller.

Email

Easiest is to use 'sendmail'. Make sure to set 'from' in config/mail.php.

Homestead

I'll need to try setting up a homestead instance on AWS with Vagrant. Could be useful to know for other projects too.

Illuminate/html

 composer require illuminate/html

Then in config/app.php, add 'Illuminate\Html\HtmlServiceProvider' to the providers array and 'Form' => 'Illuminate\Html\FormFacade' to the aliases array.

This seems to be the most up-to-date documentation.

Request

 $input = Request::all();
 $foo = Request::get('foo');

Gets all inputs from get and post.

Good shorthand

 $input = Request::all();
 SomeModel::create($input);

Eloquent

The $fillable property limits which properties can be assigned. Special protected properties:

  • $fillable: which fields can be assigned
  • $dates: an array of fields that will be treated as Carbon dates

Accessors and Mutators

Accessors modify data coming from the database before it's inserted in the model. Mutators modify it before inserting.

A mutator method must have a name following the pattern setFieldNameAttribute

Query Scope

Name is scopeName, takes a query as an arg. Useful for attaching repeated query logic to the model.

Relationships

One-to-many (author to article)

 //in the 'one' (author)
 public function articles(){
   return $this->hasMany('App\Articles');
 }
 
 //in the 'many' (article)
 public function author(){
   return $this->belongsTo('App\user');
 }

Many-to-many

Form Requests

 php artisan make:requestion NameOfRequest

Starts with the methods authorize and rules.

Rules returns an array of fields and their validation logic.

Validators

  • required
  • min:n
  • date

Authorize returns a bool.

If validation fails, it's redirected back to the previous page with $errors populated with proper errors.

Form requests are implemented with type hinting on the controller.

The controller method looks like this:

 public function someMethod(SomeRequest $request){
   Model::create(request->all());
   return redirect('someplace');
 }

Direct Validation

Rather than creating a form request, we can do this

 public function someMethod(Request $request){
   $this->validate($request, ['title' => 'required|min:3']);
   Model::create(request->all());
   return redirect('someplace');
 }

Routes

 php artisan route:list

Shows a table of the routes.

Route Resource

Implements restful crud.

Route Model Binding

Done through RouteServicesProvider.php in the boot method, add a line like:

 $router->model('article', 'App\Article');

now any instance of {article} in a route will be used to look up an Article by it's primary id and that article will be passed into the controller method.

Middleware

All methods have the same args $request and $next and the continue by calling $next($request);

In http/Kernal.php, every piece of middleware in $middleware is run against every request.

Middleware can be attached in a controllers constructor:

 public function __construct(){
   $this->middleware('auth');
 }

We can also limit what methods it applies to

 public function __construct(){
   $this->middleware('auth', ['only'=>'create']);
 }

At the route level:

 Route::get('create', ['middleware' => 'auth', 'uses' => 'ArticleController@create']);

Research These