我正在尝试使用特征处理我的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();
...
我当然希望我的特征中的函数被调用,但这不会发生。
答案 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
函数。
答案 2 :(得分:1)
在类中使用特质,例如:
use my/path/abcTrait;
Class My class{
use abcTrait;
}
现在,您可以在函数中使用$this->functionName ()
来调用特征函数。