Laravel

laravel 如何覆盖composer的 vendor类文件?

作为 Laravel 开发人员,你可能遇到过这样的情况:你不喜欢 vendor 文件夹某个包中的某些代码,并且想要更改它。你可以直接在该文件中更改它。但问题是当你点击composer update命令升级包时很容易覆盖已修改的vendor类文件。
那么有什么解决办法呢?
感谢Composer,它具有覆盖任何包/类的功能。Composer 使用PSR-4来加载类。因此,在 composer.json 中,你可以提及从哪些文件或文件夹加载类。同样你也可以排除加载它。

操作步骤:

windows用户

排除文件

请参考下面的示例以了解我如何从包tymon/jwt-auth 中排除 1个文件

"exclude-from-classmap": ["vendor\\tymon\\jwt-auth\\src\\Middleware\\BaseMiddleware.php"],

在上面的例子中可以看出我已经排除了BaseMiddleware.php文件。你必须将此行放在composer.json的autoload段中。这里要注意的一件事是,我在路径中有双反斜杠,那是因为在 Windows 机器上,并且因为它是 JSON 文件,所以我必须在那里转义 (\) ,即写上双反斜杠。

包含文件以覆盖vendor

现在我们已经排除了我们想要覆盖的文件,现在需要包含有更改的新文件,以便 composer 知道要包含哪些文件。

为此,向 composer.json 中的 'psr-4' …

        

Laravel框架中使用 Repository 模式

若将数据库逻辑都写在model,会造成model的肥大而难以维护,基于SOLID原则,我们应该使用Repository模式辅助model,将相关的数据库逻辑封装在不同的repository,方便中大型项目的维护。

Version:Laravel 5.1.22


数据库逻辑

在CRUD中,CUD比较稳定,但R的部分则千变万化,大部分的数据库逻辑都在描述R的部分,若将数据库逻辑写在controller或model都不适当,会造成controller与model肥大,造成日后难以维护。

Model

使用repository之后,model仅当成Eloquent class即可,不要包含数据库逻辑,仅保留以下部分:

  • Property:如$table,$fillable…等。
  • Mutator:包括mutator与accessor。
  • Method:relation类的method,如使用hasMany()与belongsTo()。
  • 注释:因为Eloquent会根据数据库字段动态产生property与method,等。若使用Laravel IDE Helper,会直接在model加上@property@method描述model的动态property与method。

User.php

  1. app/User.php
  2. namespace MyBlog;
  3. use Illuminate\Auth\Authenticatable;
  4. use Illuminate\Database\

Laravel Pipeline解读

大家好,今天给大家介绍下Laravel框架的Pipeline。
它是一个非常好用的组件,能够使代码的结构非常清晰。 Laravel的中间件机制便是基于它来实现的。通过Pipeline,可以轻松实现APO编程。

官方GIT地址

https://github.com/illuminate/pipeline

下面的代码是我实现的一个简化版本:

class Pipeline
{

    /**
     * The method to call on each pipe
     * @var string
     */
    protected $method = 'handle';

    /**
     * The object being passed throw the pipeline
     * @var mixed
     */

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