Laravel:覆盖包特征功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel:覆盖包特征功能相关的知识,希望对你有一定的参考价值。

我正在使用Compoships包来使Laravel支持多键关系,但我想覆盖此包中的特征函数。

这是当前的流程:

在我的项目中使用的主要特征使用包中的另一个使用另一个(我想要覆盖的那个)

public function addConstraints()
{
    if (static::$constraints) {
        $foreignKey = $this->getForeignKeyName();
        $parentKeyValue = $this->getParentKey();

        //If the foreign key is an array (multi-column relationship), we adjust the query.
        if (is_array($this->foreignKey)) {
            foreach ($this->foreignKey as $index => $key) {

                /*list(, $key) = explode('.', $key);
                $fullKey = $this->getRelated()->getTable().'.'.$key;*/

                $keyPortions = explode('.', $key);
                if(count($keyPortions) === 2)
                    $fullKey = $this->getRelated()->getTable() . '.' . $key;
                else
                    $fullKey = $key;

                $this->query->where($fullKey, '=', $parentKeyValue[$index]);
                $this->query->whereNotNull($fullKey);
            }
        } else {
            $fullKey = $this->getRelated()->getTable().'.'.$foreignKey;
            $this->query->where($fullKey, '=', $parentKeyValue);
            $this->query->whereNotNull($fullKey);
        }
    }
}

我能够在本地覆盖它但是一旦我部署了代码(发生了编辑器更新),我就失去了我的修改

所以我该怎么做?

答案

简单只需在您使用它的控制器中创建一个具有相同名称的公共函数

它的自动覆盖

例如

我们知道在auth文件夹寄存器控制器中有一个特性RegistersUSers;这个特性包含一个验证函数,所以如果我们想要覆盖它。只需创建一个具有相同名称的公共函数

class RegisterController extends Controller
{

    use RegistersUsers;

   public function authenticate(){

   }

以上是关于Laravel:覆盖包特征功能的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:覆盖 Bundle 的服务提供者

Laravel 5.4 - 如何覆盖包中定义的路由?

使用修改过的 MustVerifyEmail 特征的 Laravel API 无法获取请求用户

我创建了 laravel 包并在其他项目中需要我的包。我在项目模型中使用包特征。但我收到此错误 => 未找到特征

我可以使用 Laravel 5 中间件来允许包覆盖应用程序路由吗?

扩展Laravel包