Привет, программисты, вы обычно находите библиотеки Laravel внутри packagist? Например, если вы хотите экспортировать свои данные в формат Excel, вы можете выполнить поиск в packagist и найти этот замечательный пакет, который вы можете использовать.



maatwebsite / excel - Packagist
Яркий способ импорта и экспорта Excel и CSV в Laravel 4 с помощью PHPExcel packagist.org



Удивительно, но мы можем создать наш собственный пакет / библиотеку Laravel и опубликовать его на github или даже в packagist, чтобы ваш пакет был доступен другим. Я расскажу об этом в нескольких главах, и в этой первой главе мы создадим наш простой пакет Laravel.

Мы создадим простой пакет форматирования валюты. Пакет отформатирует число в форматированное число с заданной валютой. Кажется, это долгий путь для его создания, поэтому в этой главе я расскажу об основных функциях поставщика услуг, маршрута, контроллера и представления для создания пакета.

Установить Laravel

В этой серии статей мы будем использовать Laravel 5.5 для разработки пакета, поэтому убедитесь, что ваши требования к серверу удовлетворены.



Просто следуйте инструкциям по установке, и все будет в порядке.

Создать каталог пакетов

Мы знаем, что наши установленные пакеты находятся в каталоге vendor и по умолчанию игнорируются. Также мы не должны изменять код непосредственно из каталога поставщика.

Итак, давайте создадим папку из корневого каталога laravel со следующей структурой:

app/packages/vendor_name/package_name/src

Теперь наша папка может выглядеть так:

packages: Папка для размещения поставщиков нашего пакета.

teknomuslim: vendor name
currencyformatter: package name
src: Folder for placing our package’s codes.

Как видите, вы можете изменить имя папки по своему усмотрению.

Посвящение композитора

Нам нужно запустить наш пакет с помощью composer, чтобы ваш пакет можно было позже установить в Laravel в качестве поставщика. Не волнуйтесь, у композитора есть возможность сгенерировать файл composer.json с помощью встроенной команды.

Используя терминал, перейдите в папку с именами нашего пакета, в этой главе это packages / teknomuslim / currencyformatter, и выполните следующую команду:

composer init

Следуйте инструкциям композитора. Если вы не знаете, как ответить, просто нажмите клавишу ВВОД, чтобы использовать ответ по умолчанию. Позже вы можете изменить его прямо на созданный вами composer.json.

Теперь у нас есть composer.json

{
    "name": "teknomuslim/currency-formatter",
    "description": "simple currency number formatter",
    "authors": [
        {
            "name": "Didik Tri Susanto",
            "email": "[email protected]"
        }
    ],
    "minimum-stability": "dev",
    "require": {}
}

Отлично, теперь мы готовы писать код!

Определить поставщика услуг

Прежде чем определять поставщика услуг, нам нужно загрузить наш пакет. Наш пакет реализует автозагрузчик PSR-4, поэтому мы должны определить пространство имен нашего пакета внутри composer.json laravel.

В разделе автозагрузки установите psr-4 для нашего пакета.

"autoload": {
    "classmap": [
        "database/seeds",
        "database/factories"
    ],
    "psr-4": {
        "App\\": "app/",
        "Teknomuslim\\CurrencyFormatter\\": "packages/teknomuslim/currencyformatter/src"
    }
},

Затем мы должны автозагрузить наш пакет с помощью следующей команды composer:

composer dump-autoload

Отлично, наш пакет уже загружен в Laravel автоматически. Давайте создадим поставщика услуг для нашего пакета. Просто создайте класс CurrencyFormatterServiceProvider.php внутри папки src. Не забывайте использовать пространство имен на основе поставщика, которого мы создали ранее.

<?php

namespace Teknomuslim\CurrencyFormatter;

use Illuminate\Support\ServiceProvider;

class CurrencyFormatterServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        
    }
}

Да это пустой провайдер услуг. Мы закодируем это позже, чтобы добавить больше функциональности. Метод boot () используется для загрузки таких функций пакета, как маршруты, прослушиватели событий или другие функции. Метод register () используется для привязки любых классов или функций к контейнеру приложения.

Затем нам нужно добавить поставщика услуг пакетов в config / app.php внутри массива поставщиков.

/*
 * Package Service Providers...
 */
Teknomuslim\CurrencyFormatter\CurrencyFormatterServiceProvider::class,

Определение маршрута, контроллеров и представлений

Ура, теперь у нас есть посылка! К сожалению, у нас пока нет функциональности. Хорошо, давайте начнем создавать routes.php внутри нашего пакета, чтобы мы могли получить к нему доступ через наш браузер.

<?php

Route::get('greeting', function () {
    return 'Hi, this is your awesome package!';
});

Затем мы должны загрузить наш маршрут в метод boot () поставщика услуг, который мы создали ранее.

public function boot()
{
    $this->loadRoutesFrom(__DIR__.'/routes.php');
}

Теперь запустите свой laravel, используя

php artisan serve

и перейдите в браузере по адресу http: // localhost: 8000 / welcome. Вы должны увидеть Привет, это ваш потрясающий пакет! как выход.

IMHO, размещение нашего кода непосредственно в файле маршрута - не лучшая практика. Поскольку мы хотим иметь модульную и разделяющую заботу, мы могли бы создать файл контроллера, чтобы выполнять логику для нашей функциональности.

Просто создайте файл контроллера внутри папки src, или мы можем создать папку Controllers, а затем поместить в нее файлы контроллера. Теперь мы создадим CurrencyFormatterController.php, а затем создадим функцию приветствия () для отображения вывода, как мы писали ранее.

<?php

namespace Teknomuslim\CurrencyFormatter\Controllers;

use App\Http\Controllers\Controller;

class CurrencyFormatterController extends Controller
{
    /**
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function greeting()
    {
        return 'Hi, this is your awesome package!';
    }
}

Затем зарегистрируйте наш контроллер у поставщика услуг пакетов.

/**
 * Register the application services.
 *
 * @return void
 */
public function register()
{
    $this->app->make('Teknomuslim\CurrencyFormatter\Controllers\CurrencyFormatterController');
}

Измените наш маршрут, чтобы использовать контроллер вместо функции закрытия.

Route::get('greeting', 'Teknomuslim\CurrencyFormatter\Controllers\CurrencyFormatterController@greeting');

Снова перейдите в свой браузер, и мы должны увидеть тот же результат, что и раньше.

Как насчет просмотра? Можем ли мы использовать шаблон лезвия вместо возврата строки? Да, пакет умеет загружать просмотры. Для этого давайте создадим папку views внутри папки src, а затем загрузим ее в метод boot ().

/**
 * Bootstrap the application services.
 *
 * @return void
 */
public function boot()
{
    $this->loadRoutesFrom(__DIR__.'/routes.php');
    $this->loadViewsFrom(__DIR__.'/views', 'CurrencyFormatter');
}

Второй аргумент внутри метода loadViewsFrom () - это пространство имен для вашего представления. Это необходимо, поскольку нам нужно отличать представления от других пакетов.

Затем создайте файл welcome.blade.php, чтобы переделать наш вывод приветствия. Теперь попробуйте использовать другое приветственное предложение.

<!DOCTYPE html>
<html>
<head>
    <title>Teknomuslim</title>
</head>
<body>
<h1 style="text-align:center">
    <span style="font-weight:normal">This is currency formatter package</span>
</h1>
</body>
</html>

Почти готово, теперь вызовите view в методе Hello () внутри контроллера.

/**
 * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
 */
public function greeting()
{
    return view('CurrencyFormatter::greeting');
}

Перейдите в браузер и обновите.

Покажи свой потрясающий пакет!

Мы уже создали собственный пакет. Теперь покажите нашу потрясающую работу в github, чтобы другие программисты могли изучить или использовать наш пакет для своих нужд. Есть несколько веских причин, по которым нам нужно учиться у других людей.



Просто вставьте папку src в репозиторий github. Не забудьте создать .gitignore, потому что мы не хотим фиксировать общий файл / папку, например .idea / vendor и т. Д.

Вот мой прогресс пакета laravel для этой серии.



Резюме

Итак, мы создали простой пакет laravel, а также узнали, как использовать маршрут, контроллер и представление в нашем пакете. В следующей серии мы рассмотрим дополнительные функции, а также опубликуем их в packagist.

Спасибо за чтение, я надеюсь, что эта серия поможет вам открыть для себя еще одну замечательную часть фреймворка Laravel.

Ссылки:

Удачного кодирования, ребята!