猿问

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

我正在尝试使用 trait 来处理我的 Laravel 应用程序上的图像上传,但我的 Trait 中的任何函数都不能从控制器调用。它抛出一个 BadMethodCallException 并表示无法找到该函数。


我已经尝试使用非常简单的函数来测试它是否是 trait 的问题,或者函数本身是否有问题,但即使是一个只包含


return "sampletext";

有同样的问题。


trait 的路径在 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();

...

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


泛舟湖上清波郎朗
浏览 135回答 3
3回答

墨色风雨

您需要在控制器内部使用 trait 并将$this->test()内部移动到类函数中:<?phpuse App\Traits\UploadTrait;class UserProfileController extends Controller{&nbsp; &nbsp; use UploadTrait; // <-- Added this here&nbsp; &nbsp; public function index()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return $this->test(); // <-- Moved this into a function&nbsp; &nbsp; }}

沧海一幻觉

您必须在类中放置use关键字才能使用该特征及其方法trait UploadTrait{&nbsp; public function test(){&nbsp; &nbsp; return "testtext";&nbsp; }}class Controller{}class UserProfileController extends Controller{&nbsp; use UploadTrait;}$ob = new UserProfileController();echo $ob->test();您可以创建一个函数并调用该trait函数。

FFIVE

在类中使用 trait,如:use my/path/abcTrait;Class My class{&nbsp; &nbsp; &nbsp; use abcTrait;}现在,您可以使用$this->functionName ()in 函数调用特征函数。
随时随地看视频慕课网APP
我要回答