为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
泛舟湖上清波郎朗 2021-09-05 16:36:56
我正在尝试使用 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 中的函数被调用,但这不会发生。
查看完整描述

3 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

您需要在控制器内部使用 trait 并将$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

    }

}


查看完整回答
反对 回复 2021-09-05
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

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


trait UploadTrait

{

  public function test(){

    return "testtext";

  }

}


class Controller{


}


class UserProfileController extends Controller

{

  use UploadTrait;


}


$ob = new UserProfileController();

echo $ob->test();

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


查看完整回答
反对 回复 2021-09-05
?
FFIVE

TA贡献1797条经验 获得超6个赞

在类中使用 trait,如:


use my/path/abcTrait;

Class My class{

      use abcTrait;

}

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


查看完整回答
反对 回复 2021-09-05
  • 3 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信