Метод в черте не может быть вызван из контроллера - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь использовать черту для обработки загрузки изображений в моем приложении Laravel, но ни одна из функций в моей черте не может быть вызвана из контроллера.Он выдает исключение BadMethodCallException и говорит, что функция не может быть найдена.

Я пытался использовать действительно простые функции, чтобы проверить, если это проблема с чертой или есть ли у самой функции проблема, но дажепростая функция возврата, которая содержит только

return "sampletext";

, имеет ту же проблему.

Путь черты находится в App / Traits / UploadTrait, и я уже проверил правописание при использованииоператор в моем контроллере, который говорит использовать 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 ]

3 голосов
/ 27 июня 2019

Вам нужно использовать черту внутри вашего контроллера и переместить $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 голос
/ 27 июня 2019

Использование черты внутри класса, например:

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

Теперь вы можете вызывать функции черты с $this->functionName () в функциях.

1 голос
/ 27 июня 2019

Вы должны поместить ключевое слово use, чтобы использовать эту черту и ее методы в классе

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

class Controller{

}

class UserProfileController extends Controller
{
  use UploadTrait;

}

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

Вы можете создать функцию и вызвать функцию trait.

Подробнее

...