如何使用别名调用特征方法

Jam*_*mer 10 php namespaces class traits laravel

我正试图在一个名为Page的类中放置一个特征.我还需要重命名一个特征函数,以便它不会与现有的类函数冲突.我以为我成功完成了所有这些,但是我得到一个指向错误位置的错误?!

Call to undefined function App\Pages\Models\myTraitDefaultScope()

我也试过:MyTrait\defaultScope($query)而不是试图重命名冲突的功能.但是我得到以下错误:

Call to undefined function App\MyTrait\defaultScope()

下面是单独文件中包含的特征和类.

<?php
namespace App;

use Illuminate\Support\Facades\Auth;

trait MyTrait{
    public function defaultScope($query){
        return $query->where('active', '1')
    }
}
Run Code Online (Sandbox Code Playgroud)

.

<?php namespace Modules\Pages\Models;
use Illuminate\Database\Eloquent\Model;
use App\MyTrait;

class Page extends Model {

    use MyTrait{
        MyTrait::defaultScope as myTraitDefaultScope;
    }

    public function defaultScope($query){
        return myTraitDefaultScope($query);
    }
}
Run Code Online (Sandbox Code Playgroud)

我不是那么棒,所以如果我有一些严重错误请不要开枪:)

Mop*_*ppo 6

当你在类中使用'trait'时,该类继承了trait的所有方法和属性,就像它扩展了一个抽象类或接口一样

所以,这种方法MyTrait:

public function defaultScope($query){
    return $query->where('active', '1')
}
Run Code Online (Sandbox Code Playgroud)

将由您的Page班级继承

因为您将此方法别名为:myTraitDefaultScope,要调用该方法,您应该调用它,就像调用Page该类的其他每个方法一样 :

public function defaultScope($query){

    //call the method of the class
    return $this->myTraitDefaultScope($query);
}
Run Code Online (Sandbox Code Playgroud)