Skip to content

Instantly share code, notes, and snippets.

@JeffreyWay
Created November 19, 2012 16:37
Show Gist options
  • Save JeffreyWay/4111700 to your computer and use it in GitHub Desktop.
Save JeffreyWay/4111700 to your computer and use it in GitHub Desktop.
Laravel 4 Thoughts/Questions/Etc.

Laravel 4 Thoughts/Questions/Etc.

This is just a random list of notes, as I dig into Laravel 4. If you have any feedback/solutions, please leave a comment. I'll be compiling everything for an article on Nettuts+, when the framework is officially in Beta. This will be updated over the course of the week.

  • Running composer dump-autoload after every new controller is a pain. Can this not be automated through artisan controller:make ControllerName?

  • Seems that some of the View HTML helpers are missing. No HTML::script().

  • Route::resource('tasks', 'TasksController') doesn't seem to create named routes. This is a big deal, if not. What's the solution?

  • If you come from the Rails-flavor of REST, it'll take some re-tooling to learn the new RESTful method names. PHP can't use names, like "new," so that can be confusing. "create" is used instead.

  • Routing wildcards are different in L4. Rather than (:num) or (:any), you can name them. Route::get('tasks/{id}');. Much better.

  • A lot of the helpers are missing. I guess I see why that was done, but I'll likely end up implementing the most used ones on my own (dd(), etc.)

  • Why does Laravel 4 now require me to specify the table name in my models? Why not use a natural default so that I can type less - such as the plural form of the class name?

  • return Task::all() will now return a JSON representation, which is super helpful. It makes building RESTful APIs along with something like Backbone as easy as possible.

  • artisan key:generate doesn't seem to be currently available.

@JonoB
Copy link

JonoB commented Nov 29, 2012

$this->layout is not longer available in controllers - I really liked this for loading templates because I could just specify the default template in a BaseController and then override in specific controllers or functions as needed. It may be possible to replicate this in L4 by overriding protected function processResponse() in controller.php. Are there any other alternatives?

@JonoB
Copy link

JonoB commented Nov 30, 2012

I also can't see anything to deal with uri segments

@JonoB
Copy link

JonoB commented Dec 2, 2012

Creating nested controllers with artisan doesn't seem to work

php artisan controller:make blog/PostsController

// folder must exit
// filename is correct
// class name is incorrect: 
class blog/PostsController extends Controller {
...
}

// should be 
class PostsController extends Controller {
...
}

Its created in the correct folder, but the controller name comes out :

@JonoB
Copy link

JonoB commented Dec 2, 2012

When doing reverse routing, you now have to specify the key's name for replacement

// L3
HTML::link_to_action('posts@edit', 'Edit', array($post->id)); 

// L4
HTML::linkAction('PostsController@Edit', 'Edit', array('id' => $post->id)); 

@JonoB
Copy link

JonoB commented Dec 2, 2012

Nested controllers comment above did not come out right

// should be 
class Blog_PostsController extends Controller {
...
}

@taylorotwell
Copy link

$this->layout is available for controllers in the latest updates to the app repository (yesterday). Also available is wildcard (CodeIgniter) style routing (also available in L3): Route::controller('UserController', 'users');

@taylorotwell
Copy link

Also, when creating nested controllers, use the --path option available on the command (relative to the project root). Although I should note that nested controllers may not be as necessary as controller routing is totally de-coupled from file system structure. Although, you are free to use them for organizational purposes.

@sq2
Copy link

sq2 commented Dec 9, 2012

Not sure if the following is common knowledge or not. Tripped me up a little, though.

Determining whether a named route is the current route has changed. Not sure if the new way worked in L3, too. But, it's nice and short.

Request::route()->is('home'); // L3 from the docs
Route::is('home'); // L4

Noticed some Blade syntax changes:

@layout('master') // L3
@extends('master') // L4

@endsection // L3
@stop // L4

@DavidStrada
Copy link

To add support to Html/Scripts/Forms add this to your composer.json

"meido/html": ">=1.0.0",
 "meido/form": ">=1.0.0"

and this to your app.php

'Meido\HTML\Providers\HTMLServiceProvider',
'Meido\Form\Providers\FormServiceProvider',

@dillinghamio
Copy link

is there a general consensus regarding using nested resources? IE: Route::resource('posts.comments.votes')

Form::open(array('route' => 'posts.comments.votes'))
HTML::link_to_route('posts.comments.votes')
URL::to_route('posts.comments.votes')

If not maybe something like explode on ' . ' and set keys

array( 'post' => 'id', 'comment''=> 'id', 'vote' => 'id' )

or even better, have it read from the url somehow.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment