Laravel: класс не найден, если вызывается из черты - PullRequest
0 голосов
/ 02 октября 2019

После создания нескольких приложений с помощью Laravel и использования свойств softDelete я понял, что такие методы, как destroy (), restore () и kill (), одинаковы для нескольких контроллеров. Поэтому я пытаюсь поместить их в черту и использовать ее с разных контроллеров.

Мой код выглядит следующим образом:

ProfilesController.php

<?php

namespace App\Http\Controllers;
use App\Profile;

class ProfilesController extends Controller
{

    public function destroy(Profile $profile)
    {
        Profile::del($profile, 'profiles');
        return redirect()->route('profiles.index');
    }

    public function trashed()
    {
        Profile::trash('Profile');
    }
}

Profile.php (модель)

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Profile extends Model
{

    protected $fillable = ['user_id', 'role_id', 'title', 'subtitle', 'slug', 'birthday', 'about'];

    use SoftDeletes, Helpers, commonMethods;

    public function getRouteKeyName()
    {
        return 'slug';
    }
    // ... more code here 
}

файл характеристик: commonMethods.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;
use App\Profile;
use Session;

trait commonMethods
{

    public static function del($element, $page_name)
    {
        $element->delete();
        Session::flash('success', $element . ' successfully deleted!');
    }

    public static function trash($model)
    {
        $total = $model::onlyTrashed()->get();
        $total_tr = count($total);
        $all_tr = $model::all();

        return view('partials.templates.trashed', compact('total', 'total_tr', 'all_tr'));
    }

// ...more code here 
}

Проблема:

  • Я пытаюсь перейти к представлению "Trashed", в котором перечислены все элементы "softdeleted", но не "kill", метод.
  • Я передаю модель $переменная с методом trash ($ model)
  • Я получаю следующую ошибку: Класс App / Profile не найден. Попробуйте вызвать App / Profile

Я отладил, и переменная $ model содержит именно то, что мне нужно, строку «Profile», которая мне нужна для построения запроса:

$total = Profile::onlyTrashed()->get();

Этот запрос работает, когда он находится в ProfilesController, но не работает, когда он находится в признаке, поскольку класс модели не найден.

Есть идеи, как заставить его работать?

Я использую Laravel 6.

Ответы [ 2 ]

1 голос
/ 02 октября 2019

Если вам нужно использовать класс в качестве строки, вам нужно использовать его полное имя. 'App\Profile' вместо 'Profile'.

$model = 'Profile';
new $model; // will use `\Profile`

$model = 'App\Profile';
new $model; // will use '\App\Profile';
0 голосов
/ 02 октября 2019

В вашем контроллере (ProfilesController) напишите:

use App\Profile;

В вашей модели напишите:

use App\commonMethods;
...