Hi Dev,
In this post,I will give you how to create custom namespace in laravel 8. we will show example of laravel 8 create custom namespace. laravel 8 namespaces are defined as a class of elements in which each element has a unique name to the associated class. the namespaces may be shared with elements in other classes. let’s understand why we need a namespace in laravel 8.
Here, I will give you full example for laravel 8 create custom namespace as bellow.
Create Custom Namespace in Laravel 8
I will create a custom namespace in Laravel 8, create a separate controller with forward-slash(/) using the following command.
php artisan make:controller Client/UserController --resource --model=User
If you closely look at the above command, you can see that we have used the forward slash to separate our namespace Client. This gives us the ability to create a custom namespace, and it is easier for us to design the project.
The UserController will be created inside the Client directory inside the app >> Http >> Controllers folder.
Also, we have attached the User.php model to the UserController.
If you open the UserController.php file, then it looks like below.
<?php // UserController.php namespace App\Http\Controllers\Client; use App\Http\Controllers\Controller; use App\Models\User; use Illuminate\Http\Request; class UserController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // } /** * Display the specified resource. * * @param \App\Models\User $user * @return \Illuminate\Http\Response */ public function show(User $user) { // } /** * Show the form for editing the specified resource. * * @param \App\Models\User $user * @return \Illuminate\Http\Response */ public function edit(User $user) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param \App\Models\User $user * @return \Illuminate\Http\Response */ public function update(Request $request, User $user) { // } /** * Remove the specified resource from storage. * * @param \App\Models\User $user * @return \Illuminate\Http\Response */ public function destroy(User $user) { // } }
You can see that our new namespace is App\Http\Controllers\Client;
That means if in the future, we have to create a functionality related to the Client module, then we will create another controller Client the Admin namespace.
Other examples like if you are creating an API for a mobile application, then you should make an API namespace and all the controllers will be included under the API namespace
How does routing work under a new namespace?
To write Admin namespace routes, open web.php file and add the following code.
routes/web.php
<?php use App\Http\Controllers\UserController; /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::namespace('Client')->group(function() { Route::resource('users', 'UserController'); });
You can see that we are explicitly defining the routes for the Admin namespace.
Under the Admin namespace, we are defining all the client related routes.
Now, go to the UserController’s index() method and add the following code.
// UserController.php public function index() { return 'Yes!! Client namespace is working successfully'; }
Now we are ready to run our custom validation rules example so run bellow command for quick run:
php artisan serve
Now you can open bellow URL on your browser:
http://localhost:8000/users
It will help you...