Laravel

Laravel Model 利用 Macroable 为数据模型添加宏能力

【摘要】简单的说一下宏能力,这个类是 IlluminateSupportTraitsMacroable 其中利用重载实现了可以定义宏的功能,即通过 macro 静态方法添加回调,并定义一个名字。利用 __call 当前类没有这个函数的时候执行这个函数名注册的回调。

产生需求

在使用 Laravel 开发 ThinkSNS Plus 的时候,因为很多功能块都没有写在一个库里面,利用拓展包的形式添加实际功能,里面很多地方也用到了“多态多对多”的关系。问题来了,开发一个问答程序,想要给用户模型增加发布的问题或者回答的关系,起初是继承一份 User 模型,添加了关系,之后就发现问题了,因为用户的 tag 是使用多态多对多的关系,我通过继承的用户模型是无法拿到这种关系数据的因为 *able_type 是 user 数据模型类名称或者别名。而我继承之后类也就发生改变了。…

Laravel框架执行流程

俗话说知己知彼百战不怠,使用Laravel也有有一段时间了,中间也踩了很多坑,碰了很多壁,归根结底还是对Laravel的底层不太了解,以前使用Thinkphp养成的MVC的习惯,刚接触Laravel一时还没转变过来,所以最近抱着学习的态度,研究了下Laravel框架的执行流程。
Laravel虽然使用上感觉跟Thinkphp差不多,但是底层的实现方式还有框架的架构,跟Thinkphp差别还是蛮大,不过Tp5貌似吸收了很多Laravel中的特性。
废话到此为止,下面上干货

1. 入口文件index.php

1. 引入bootstrap/autoload.php,自动加载依赖库

2. 引入bootstrap/app.php’

  1. 创建容器$app
  1. // 参数为应用程序根目录
  2. $app = new Illuminate\Foundation\Application(
  3. realpath(__DIR__.'/../')
  4. );

 

  • 1
  • 1
  • 2
  • 3
  • 4
  1. 该类是框架核心类,负责启动框架,以及调动其他类提供的功能。
  2. 该类继承了Illuminate\Container\Container类,可见该类也是个容器。是整个框架最大的容器;
  3. 该类的构造器代码如下:
  1. public function __construct($basePath = null

Laravel 启动流程

使用Laravel Packer创建laravel包脚手架

Laravel Packer是Sarthak Shrivastava的命令行工具,用于加快laravel软件包的创建速度。您可以在创建Laravel软件包时使用所有artisan命令,并为在软件包中创建的模型创建CRUD。要创建新程序包,可以使用packrCLI,它将为您创建所有程序包脚手架:

packr new your-package-name {vendor} {author} {author_email}

在开发软件包时,可以使用熟悉的Artisan命令生成软件包控制器,模型等:

packr make:controller ExampleController
packr make:model Post

Packer是使用Laravel Zero构建的,您可以在他的YouTube播放列表中找到有关此组合的详细教程(由Sarthak发布):

 

您可以在bitfumes/laravel-packer上了解有关此软件包的更多信息,获取完整的安装说明,并在GitHub上查看源代码。

更多创建laravel软件包方法与工具请参考 https://laravelpackage.com/

    

Laravel:何时使用依赖注入,服务和静态方法

有时我们需要将应用程序逻辑放在控制器或模型之外的某个地方,通常称为服务。但是,有几种方法可以使用它们-作为静态“helpers”,作为对象或依赖注入。让我们看看每一个什么时候用是合适的。

我在本主题中看到的最大问题–关于如何使用依赖注入和服务的文章很多,但是几乎没有解释为什么应该使用它以及何时用是真正有用的。因此,让我们通过一些理论深入研究示例。…

        

Laravel前端脚手架的完整指南

关于Laravel前端脚手架的状态,存在很多争论,戏剧性和最终的困惑。我不会关注任何戏剧-谁对谁错是不重要的。

什么重要的是确保人们理解的-相对复杂-前端脚手架的状态。初学者和经验丰富的开发人员似乎都对该前端“生态系统”的某些部分感到困惑。

因此,本文将尝试作为Laravel前端脚手架完整指南

注意:如果您只是想快速了解要使用的内容,而又不对不同解决方案的用途进行解释,请跳到文章结尾。