无法从控制器调用特征中的方法

时间:2019-06-27 17:30:19

标签: php laravel traits

我正在尝试使用特征处理我的Laravel应用程序上的图像上载,但是Trait中的所有功能都无法从控制器调用。 它将引发BadMethodCallException并说找不到该函数。

我尝试使用非常简单的函数来测试它是否存在特征问题,或者该函数本身是否存在问题,甚至是仅包含

的简单返回函数
return "sampletext";

有同样的问题。

特质的路径在App / Traits / UploadTrait下 并且我已经检查了控制器中use语句的拼写,即use App \ Traits \ UploadTrait;

namespace App\Traits;

trait UploadTrait
{
    public function test(){
        return "testtext";
    }
}

控制器有

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\Rule;

use App\User;
use App\Profile;
use App\Traits\UploadTrait;

use Image;

class UserProfileController extends Controller
{
...
    protection function updateProfile($args, Request $request){
    ...
        return $this->test();
...

我当然希望我的特征中的函数被调用,但这不会发生。

3 个答案:

答案 0 :(得分:3)

您需要使用控制器内部的特征,并将$this->test()移至类函数内部:

<?php

use App\Traits\UploadTrait;

class UserProfileController extends Controller
{
    use UploadTrait; // <-- Added this here

    public function index()
    {
        return $this->test(); // <-- Moved this into a function
    }
}

答案 1 :(得分:1)

您必须使用use关键字才能在类中使用该特征及其方法

trait UploadTrait
{
  public function test(){
    return "testtext";
  }
}

class Controller{

}

class UserProfileController extends Controller
{
  use UploadTrait;

}

$ob = new UserProfileController();
echo $ob->test();

您可以创建一个函数并调用trait函数。

More Details

答案 2 :(得分:1)

在类中使用特质,例如:

use my/path/abcTrait;
Class My class{
      use abcTrait;
}

现在,您可以在函数中使用$this->functionName ()来调用特征函数。