Using namespaces in Laravel 4
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.
Related videos on Youtube
user2030045
Updated on July 09, 2022Comments
-
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
andapp/models/File.php
. I am trying to make a newFile
inFilesController.php
. -
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 over 11 yearsYou'll need to reference BaseController from the root namespace with a \ like this: \BaseController
-
Dexture about 10 yearsi 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 over 9 years@JoshHolloway Any chance for an example that uses extends?
-
Dariux over 9 years@Zehelvion - stackoverflow.com/questions/27374347/…
-
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 about 7 yearsWhat actually is namespace use for?