Using namespaces in Laravel 4

Namespacing is pretty easy once you get that hang of it.

Take the following example:

app/models/File.php

namespace App\Models;

class File {

    public function someMethodThatGetsFiles()
    {

    }
}

app/controllers/FileController.php

namespace App\Controllers;

use App\Models\File;

class FileController {

    public function someMethod()
    {

        $file = new File();
    }
}

Declare the Namespace:

namespace App\Controllers;

Remember, once you’ve put a class in a Namespace to access any of PHP’s built in classes you need to call them from the Root Namespace. e.g: $stdClass = new stdClass(); will become $stdClass = new \stdClass(); (see the \)

“Import” other Namespaces:

use App\Models\File;

This Allows you to then use the File class without the Namespace prefix.

Alternatively you can just call:

$file = new App\Models\File();

But it’s best practice to put it at the top in a use statement as you can then see all the file’s dependencies without having to scan the code.

Once that’s done you need to them run composer dump-autoload to update Composer’s autoload function to take into account your newly added Classes.

Remember, if you want to access the FileController via a URL then you’ll need to define a route and specify the full namespace like so:

Route::get('file', 'App\\Controllers\\FileController@someMethod');

Which will direct all GET /file requests to the controller’s someMethod()

Take a look at the PHP documentation on Namespaces and Nettut’s is always a good resource with this article

Leave a Comment