什么是Laravel软件包?

作为PHP开发人员,您可能会对使用框架感兴趣。 框架试图通过简化大多数开发Web项目(例如,程序包,模块,插件,甚至是组件(CakePHP))中使用的通用做法来简化开发过程。

也许在开发过程中,您会感觉自己在重新发明轮子,例如在创建Authentication或Captcha应用程序时。 在这种情况下,您需要创建一个程序包,该程序包将简化并简化您的应用程序开发。

包有两种类型; 一些是独立于框架的(独立的),其他则是针对特定框架的 。 本教程将专门介绍Laravel软件包。

在创建软件包之前,您需要了解软件包管理器。 PEAR是一个著名的PHP软件包管理器,尽管可用,但很少使用。 为什么? 它迫使您在系统范围内安装软件包,而不是逐个项目地安装软件包。 作曲家成为PEAR的继任者。

什么是Laravel软件包?

扩展框架功能的参数之一是开发人员如何重新分发有用的代码包。 这使开发人员可以将应用程序汇总为几个较小的应用程序

实际上,包提供了一种将相关代码分组的好方法。 软件包与“组件”非常相似。 重要的是要注意,Laravel源代码是一个“包”, Taylor Otwell将其称为DEFAULT_BUNDLE

Laravel软件包的一大优势是,它们允许访问框架为其宿主应用程序提供的所有功能,包括路由,迁移,测试,视图以及许多其他有用的功能。 包装的另一个重要优点是DRY(不要自己重复)原理。 通过为您经常使用的代码创建包,可以节省资源并提高应用程序的性能。

现在让我们介绍一些有用的Laravel软件包。 我使用的软件包包括:

  • 生成器 :我喜欢CakePHP的一件事是它的Bake功能。 这是我在任何其他框架中找到的最接近的东西。
  • Ardent :雄辩的ORM的自我验证智能模型。
  • IDE helper :此软件包通过创建docblock helper文件(IDE可从中获取提示)来纠正PhpStorm中的代码自动完成问题。
  • Sayakb :它为您带来了一个很棒的验证码应用程序。
  • Behat :使用BDD方法测试应用程序的解决方案。
  • Artdarek :一个很棒的OAuth包装器。
  • Mcamara :为您的Laravel应用程序轻松进行i18n本地化。

您可以在packalyst中找到所需的包装功能。 Packalyst为Laravel创建一个简单的社交软件包注册表。

如何构建自己的Laravel软件包

为Laravel 5.0创建一个简单的身份验证包。 为此,首先需要为新软件包添加一个composer.json文件:

{
    "name": "alireza/myauth",
    "description": "How create your laravel 5 package",
    "license": "MIT",
    "authors": [
        {
            "name": "Alireza Rahmani khalili",
            "email": "Alirezarahmani@live.com"
        }
    ],
    "minimum-stability": "dev",
    "require": {
        "laravel/framework": "~5.0"
    },
    "autoload": {
        "psr-4": {
            "Alireza\Authentication\": "src/"
        }
    }
}

Service Provider类只是用于为软件包正确设置所有内容的文件。 这是服务提供者此时的样子,在src/MyAuthServiceProvider.php

namespace Alireza\Authentication;
use Illuminate\Support\ServiceProvider;


class MyAuthServiceProvider extends ServiceProvider {

    /**
     * Indicates if loading of the provider is deferred.
     *
     * @var bool
     */
    protected $defer = false;

    /**
     * Bootstrap the application events.
     *
     * @return void
     */
    public function boot()
    {
    }
    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {

    }
    /**
     * Get the services provided by the provider.
     *
     * @return array
     */
    public function provides()
    {
        return [];
    }

}

将服务提供者添加到config/app.php

'Alireza\Authentication\MyAuthServiceProvider ::class',

现在Laravel知道了这个包。 您可能会询问“别名”以及为什么我不将其添加到我的app.php 。 就个人而言,我在服务提供者类的register方法中添加别名,而不是将其手动添加到Laravel配置文件中。 稍后我会解决。 现在在src/MyAuth.php创建一个名为MyAuth的简单PHP类:

namespace Alireza\Authentication;

use Config, Request, Session, Hash;
use App\User;

Class MyAuth
{
    public $redirect_login = '/users/home';
    public $redirect_logout = '/users/logout';
    public $login = '/user/login';
    protected $data;

    public function __construct()
    {
        if (Request::isMethod('post')) //Get post inputs
            $this->data = array('username' => Input::get('username'), 'password' => Input::get('password'));
    }

    public function login($data = false)
    {
        $this->data = $data;

        if ($this->data && !is_array($this->data))
            return redirect($this->login)->with('message', 'sorry no array to log-in manually')->send();

        if ($this->data && !Session::has('user')) {
            $result = User::Where(['email' => $this->data['username']
            ])
                ->first();

            if ($result && Hash::check($this->data['password'], $result->password)) {
                Session::put('user', $result);
                return Redirect($this->redirect_login)->with('message', 'Welcome log-in succeeded ')->send();
            }
            Session::flush();
            return redirect($this->login)->with('message', 'Login Failed, wrong username or password')->send();
        }
    }

    public function logout()
    {
        Session::flush();
        return redirect($this->login)->with('message', 'logout succeeded')->send();
    }

}

身份验证类应与Laravel的IoC容器绑定到包的服务提供者。 在此之前,创建一个Facade类,该类将允许使用类方法而无需创建新实例,以及前面指出的其他好处。 正如MyAuth类在Facades目录中创建新目录Facades ,创建一个新PHP类并将其命名为src/MyAuthFacade.php

namespace Alireza\Authentication;
use Illuminate\Support\Facades\Facade;
class MyAuthFacade extends Facade
{
    protected static function getFacadeAccessor()
    {
        return 'MyAuth';
    }
}

此后,剩下的唯一事情就是引导程序包。 我的看起来像:

public function register()
    {
        $this->app['MyAuth'] = $this->app->share(function($app)
        {
            return new MyAuth;
        });
        $this->app->booting(function()
        {
            $loader = \Illuminate\Foundation\AliasLoader::getInstance();
            $loader->alias('MyAuth', 'Alireza\Authentication\MyAuthFacade');
        });
    }

如您所见,我已将Myauth类与IoC容器绑定。 现在可以轻松使用MyAuth类:

MyAuth::login(['username'=>'Alirezarahmani@live.com','password'=>'test']);

这应该生成消息, Welcome log-in succeeded. 如果需要,您现在可以在Packagist中注册您的包裹 。 MyAuth软件包现已注册,可以通过composer命令轻松包含在Laravel中: composer require "alireza/myauth"

结论

如果您正在寻找一个流行的,成熟的Laravel软件包的示例,那么可以查看TerranetAdmin for Laravel。

这是有关如何创建Laravel 5软件包的简短概述。 如您所见,创建软件包很容易,并且可能是简化和加快开发过程的重要工具。

翻译自: https://code.tutsplus.com/tutorials/what-are-laravel-packages--cms-25013

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值