yoosuf/calculator

此包已被废弃且不再维护。未建议替代包。

这是一个演示包,将执行一些计算。

1.0 2017-05-04 10:40 UTC

This package is not auto-updated.

Last update: 2020-08-22 05:40:55 UTC


README

使用或安装

composer require yoosuf/calculator

如何创建 Laravel 包

已经对 Laravel 很熟悉了吗?也许你已经用这个令人惊叹的框架创建了一些应用程序,现在你想要创建一些可重用的代码或 Laravel 包。你想去哪里学习如何创建包?当然是在这里!

在本教程中,我将通过一个示例向您展示如何仅用 7 个步骤创建 Laravel 包。那么,让我们开始吧。

1. 为我们的新包创建文件夹。

创建一个新的 Laravel 项目;

laravel new core

在安装 Laravel 后,我们在应用程序根目录下创建一个名为 packages 的新文件夹。

我们将使用这个 packages 文件夹而不是 vendor 文件夹,因为 vendor 文件夹中的文件应由 composer 管理。一旦我们发布了我们的包,我们就可以使用 composer 将其包含在 vendor 文件夹中。接下来,我们在 packages 内创建一个名为我们公司或名称的文件夹。在我的情况下,我将使用 yoosuf。

然后在这个文件夹内部创建另一个名为我们的包 calculator 的文件夹。

最后,我们将添加最后一个名为 src 的文件夹,这是我们的包代码将存放的地方。

因此,我们的文件夹结构将是 packages/yoosuf/calculator/src

好的,现在我们已经准备好了文件夹,让我们继续在我们的项目中命名我们的包,并初始化一个 composer.json 文件。

2. 为我们的包命名并使用 composer 初始化。

在您的命令提示符下,导航到包含您的包名称的文件夹。在我们的情况下:packages/yoosuf/calculator,并运行以下命令

composer init

这将初始化当前文件夹为 composer 包,并会询问一系列问题来设置您的包。它会询问包的名称、描述、作者以及有关包的一些更多信息。完成屏幕上的设置后,您将在包文件夹中看到一个名为 composer.json 的新文件。

如果您在初始化步骤中不知道任何问题,只需按 enter 键跳过即可,您稍后可以添加或编辑。

composer.json 文件将类似于以下内容

{
    "name": "yoosuf/calculator",
    "description": "This demo package will do some calculations",
    "authors": [
        {
            "name": "YOUR NAME",
            "email": "YOUR EMAIL"
        }
    ],
    "minimum-stability": "dev",
    "require": {}
}

太好了!现在我们已经初始化了我们的包,我们需要告诉我们的主应用程序 composer.json 文件加载它。

3. 从我们的应用程序 composer.json 中加载我们的包

每个 Laravel 应用都有一个位于新应用根目录的 main composer.json 文件。这是您的主要应用 composer 文件,也是我们定义所有应用依赖的地方。

让我们通过 PSR-4 自动加载块来自动加载我们新创建的包。

"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/",
        "Yoosuf\\Calculator\\": "packages/yoosuf/calculator/src"
    }
},

然后我们需要 composer 运行自动加载器并自动加载我们的包。为此,我们运行以下命令

composer dump-autoload

然后为了优化类加载器,使用以下命令(不一定需要)

php artisan optimize

4. 添加我们的包服务提供者。

服务提供者是包内的主要入口。这是包加载或启动的地方。在我们的应用根目录下,让我们通过命令行创建一个使用 artisan 命令的 ServiceProvider

php artisan make:provider CalculatorServiceProvider

这将创建一个位于 app/Providers/CalculatorServiceProvider.php 的新文件

让我们将此文件移动到我们的包文件夹中,使其位于 packages/yoosuf/calculator/src/CalculatorServiceProvider.php

别忘了将命名空间更改为您的 Vendor\Package_name

如您所见,在我们的新 Service Provider 类中,我们有 2 个方法 boot() 和 register()boot() 方法用于启动任何路由、事件监听器或任何其他您想要添加到包中的功能。register() 方法用于将任何类或功能绑定到应用容器中。我们将在下一步中了解更多。

接下来,我们需要在 config/app.php 中的 providers[] 数组中添加我们的新服务提供者

'providers' => [

    /*
     * Laravel Framework Service Providers...
     */
    Illuminate\Auth\AuthServiceProvider::class,
    //.. Other providers
    yoosuf\Calculator\CalculatorServiceProvider::class,

],

太棒了!我们的服务提供者已加载,我们的包准备就绪!但是,我们还没有任何功能……让我们通过添加包的路由文件来解决这一问题。

5. 添加我们的包 routes.php 文件

让我们在我们包的 src 目录中创建一个新的 routes.php,并添加以下代码

<?php

Route::get('calculator', function(){
	echo 'Hello from the calculator package!';
});

然后让我们在我们的 Service Provider 的 boot() 方法中包含我们的 routes.php 文件

public function boot()
{
    //
    include __DIR__.'/routes.php';
}

现在,如果我们加载 Laravel 应用并访问 /calculator 路由。我使用 php artisan serve,因此我可以在 https://:8000/ 访问我的网站。然后我们应该得到以下页面

这有多酷!我们刚刚调用了从包中加载的路由!与其在路由闭包中输出数据,不如创建一个新的控制器并引用那些方法。

6. 创建我们的包控制器。

让我们运行以下 artisan 命令来创建一个新控制器

php artisan make:controller CalculatorController

然后让我们将此控制器从 app/Http/Controllers/CalculatorController.php 移动到 packages/yoosuf/calculator/src/CalculatorController.php

接下来,我将在该控制器中创建两个方法 add()subtract(),文件内容将如下所示

<?php

namespace yoosuf\Calculator;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class CalculatorController extends Controller
{
    //
    public function add($a, $b){
    	echo $a + $b;
    }

    public function subtract($a, $b){
    	echo $a - $b;
    }
}

同样,请记住将控制器中的命名空间更改到 vendor\Package_name

还要注意,我们需要包含

use App\Http\Controllers\Controller;

这样我们的控制器就知道要继承哪个控制器类。

现在我们已经创建了控制器,我们需要注册它。在我们的 Service Provider 类的 register() 方法中,我们将添加以下代码来注册我们的新控制器

public function register()
{
    // register our controller
    $this->app->make('yoosuf\Calculator\CalculatorController');
}

最后,让我们在我们的 routes.php 文件中添加更多路由

Route::get('add/{a}/{b}', 'yoosuf\Calculator\CalculatorController@add');
Route::get('subtract/{a}/{b}', 'yoosuf\Calculator\CalculatorController@subtract');

然后如果我们导航到 https://:8000/add/5/2https://:8000/subtract/5/2,我们将得到以下结果!

接下来,如果我们想从包中加载一些视图,那很简单。让我们在下一步中完成。

7. 为我们的包添加视图。

让我们在我们的包的src文件夹内创建一个新的文件夹,命名为views。然后,让我们创建一个新的文件,命名为add.blade.php。在add.blade.php文件中,让我们添加以下内容

<!DOCTYPE html>
<html>
<head>
	<title>Calculator</title>
</head>
<body>
	<h1 style="text-align:center">
		Your Result 
		<span style="font-weight:normal">{{ $result }}</span>
	</h1>
</body>
</html>

接下来,让我们通过在Service Provider的register方法中添加一行代码来注册这些视图的加载位置

public function register()
{
    // register our controller
    $this->app->make('yoosuf\Calculator\CalculatorController');
    $this->loadViewsFrom(__DIR__.'/views', 'calculator');
}

最后,让我们将Calculator控制器中的add()subtract()函数改为调用这个视图

public function add($a, $b){
	$result = $a + $b;
	return view('calculator::index', compact('result'));
}

public function subtract($a, $b){
    $result = $a + $b;
    return view('calculator::index', compact('result'));
}

哇塞!

如果我们将在浏览器中加载以下URL https://:8000/add/5/2,我们会得到以下内容

这就是全部!

这就是如何创建一个Laravel包。如果你想将其提交到Packagist目录,以便可以使用composer安装你的包,你需要执行以下步骤

  • 将你的包提交到Github
  • 将你的包和Github URL提交到Packagist

然后你就可以在主项目的composer.json文件中包含你的包,并运行composer install以在你的应用程序中安装你的包。

你还可以在官方Laravel文档中阅读更多关于如何发布你的视图以及其他一些发布包的高级主题。