Laravel- Working with namespace
Starting with Laravel, soon had found that there is a lac of documentation. As a beginner, got a bunch of issues while starting with a modular Namespaced approach for my project.
Creating a new module, with namespace
Step 1: Namespaced directory structure
In our Laravel projects, we will separate each features/modules, with separate namespaces. But Laravel's Autoloader class makes a difference, with the way- traditional PHP namespace works.
In Laravel, namespace works like JAVA, we have to create a directory same as namespace & keep those files for that namespace under it.
Namespace is applicable only for Models & Views. The Controllers cant be namespaced
For e.g- if we create a Ratings module in our project with 'rating' namespace, then the directory structure will be-
- application/models/rating/ratingmodel.php
- application/models/rating/ratingview.php
- application/controllers/ratings.php // no namespace for controller
Step 3: Calling the namespaced model, views from CONTROLLER
once all the namespacing done- we can call the namespaced classes from controllers like this way
- nameSpace\Class- name. // Else the class will not be found
<?php
class Ratings_Controller extends Base_Controller {
public function action_getRatings()
{
.......
//set the entity of Ratings Type
$objRatingsModel = new rating\Ratingsmodel();
// namespace\ClassName, else the class will not be found
Step 4: Calling the Laravel default classes from namespaced files We can call the default Laravel functionalities( like- Validator::make(), DB::raw() ) from namespaced files, by adding a back-slash(\) before the class- to indicate they are from root-level namespace For e.g-
in rating/ratingmodel.php,
<?php
namespace rating;
class RatingModel{
public static function validateAndStoreInput($input)
{
// Validate the Ratings instance...
$rules = array(
'type' => 'required|alpha',
'id' => 'required|numeric|min:1'
);
$validation = \Validator::make($ratings->input, $rules);
// added a back-slash, else the class will not be found
....
}
....
}
- thats all. Please comment if someone has any query or confusion.
Thanks.

