Using namespaces in Laravel 4

44,921

Solution 1

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

Solution 2

first, load your class with:

$ composer dump-autoload

then

$file = new File;

// your stuff like:
$file->name = 'thename';
$file->active = true;

$file->save();

Section: Insert, Update, Delete on Laravel 4 Eloquent's doc

Solution 3

To namespace your model, at the top of your model class right after the opening

Then when you call from controllers you will call new Whatever\Model;

You probably have to do a dump-autoload with composer the first time around.

Share:
44,921

Related videos on Youtube

user2030045
Author by

user2030045

Updated on July 09, 2022

Comments

  • user2030045
    user2030045 almost 2 years

    I'm new to Laravel and using PHP namespaces in general. I didn't run into any problems until I decided to make a model named File. How would I go about namespacing correctly so I can use my File model class?

    The files are app/controllers/FilesController.php and app/models/File.php. I am trying to make a new File in FilesController.php.

  • AndHeiberg
    AndHeiberg over 11 years
    @JoshHollowway if having FileController extend BaseController this would fail with error of BaseController not found, how do you get around this?
  • Josh Holloway
    Josh Holloway over 11 years
    You'll need to reference BaseController from the root namespace with a \ like this: \BaseController
  • Dexture
    Dexture about 10 years
    i follow the above procedure, but in the end i get the error: Class 'App\Controllers\BaseController' not found . after making \BaseController i get the error: Class FileController does not exist . i also do composer dump-autoload
  • AturSams
    AturSams over 9 years
    @JoshHolloway Any chance for an example that uses extends?
  • Dariux
    Dariux over 9 years
  • Dariux
    Dariux over 9 years
    @JoshHolloway - but now the problem I see of lot code repetition. In every controller I need to call use App\Models\X.php to use it. Any smarter way to avoid this?
  • Angger
    Angger about 7 years
    What actually is namespace use for?