作为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