- Laravel Application Development Cookbook
- Terry Matula
- 236字
- 2021-07-23 15:33:32
Creating advanced Autoloaders with namespaces and directories
If we want to be sure that our custom classes don't conflict with any other class in our app, we will need to add them to a namespace. Using the PSR-0 standard and Composer, we can easily autoload these classes into Laravel.
Getting ready
For this recipe, we need to set up a standard Laravel installation.
How to do it...
To complete this recipe, follow these steps:
- Inside the
/app
directory, create a new directory namedcustom
, and inside ofcustom
, create a directory namedCustom
, and inCustom
, create a directory namedShapes
. - Inside the
/app/custom/Custom/Shapes
directory, create a file namedMyShapes.php
and add this code:<?php namespace Custom\Shapes; class MyShapes { public function triangle() { return 'I am a triangle'; } }
- In the root of the application, open the
composer.json
file and locate theautoload
section. Update it so it looks like this:"autoload": { "classmap": [ "app/commands", "app/controllers", "app/models", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php", ], "psr-0": { "Custom": "app/custom" } }
- Open the command line and run
dump-autoload
on Composer:php composer.phar dump-autoload
- Now we can call that class by using its namespace. For example, if we create a route:
Route::get('shape', function() { $shape = new Custom\Shapes\MyShapes; return $shape->triangle(); });
How it works...
Namespaces are a powerful addition to PHP, and they allow our classes to be used without us having to worry about their class names interfering with other class names. By autoloading namespaces in Laravel, we could create a complex group of classes and never have to worry about class names conflicting with other namespaces.
For our purposes, we're loading the custom class through composer, and the PSR-0 standard of autoloading.
There's more...
To further extend the use of our namespaced class, we could use the IoC to bind it to our app. More information can be found in the Laravel documentation at http://laravel.com/docs/ioc.
See also
- The Using Autoloader to map a class name to its file recipe
- 數(shù)據(jù)通信網(wǎng)絡(luò)實(shí)踐:基礎(chǔ)知識(shí)與交換機(jī)技術(shù)
- 物聯(lián)網(wǎng)智慧安監(jiān)技術(shù)
- 5G承載網(wǎng)網(wǎng)絡(luò)規(guī)劃與組網(wǎng)設(shè)計(jì)
- 電子政務(wù)效益的經(jīng)濟(jì)分析與評價(jià)
- HCNA網(wǎng)絡(luò)技術(shù)
- 新一代物聯(lián)網(wǎng)架構(gòu)技術(shù):分層算力網(wǎng)絡(luò)
- 中小型局域網(wǎng)組建、管理與維護(hù)實(shí)戰(zhàn)
- Socket.IO Real-time Web Application Development
- 通信原理及MATLAB/Simulink仿真
- 物聯(lián)網(wǎng)場景設(shè)計(jì)與開發(fā)(初級(jí))
- 互聯(lián)網(wǎng)+思維與創(chuàng)新:通往未來的+號(hào)
- Getting Started with Memcached
- 移動(dòng)互聯(lián)網(wǎng)環(huán)境下的核心網(wǎng)剖析及演進(jìn)
- Migrating to Drupal7
- 智能物聯(lián)安防視頻技術(shù)基礎(chǔ)與應(yīng)用