Laravel 未找到特征函数
Laravel trait function not found
我查看了整个 Whosebug 和 google,但我似乎无法解决我未找到的特征函数。我试过 composer dump-autoload,我的 composer.json 连接了应用程序目录,甚至检查了我的名字 space 和特征名称。这是我的用户控制器。
<?php
namespace App\Http\Controllers;
use App\User;
use App\Traits\ControllerTrait;
use App\Http\Requests\UpdateUser;
use Illuminate\Http\Request;
use App\Http\Requests\IndexUser;
class UserController extends Controller
{
use ControllerTrait;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show multiple users.
*
* @return \Illuminate\Http\Response
*/
public function index(IndexUser $request)
{
$per_page = 50;
$order_by = 'id';
$sort_by = 'ASC';
if($request->has('per_page')) {
$per_page = $request->input('per_page');
}
if($request->has('order_by')) {
$order_by = $request->input('order_by');
}
if($request->has('sort_by')) {
$sort_by = $request->input('sort_by');
}
$users = User::when($request->has('select'), function ($query) use ($request) {
selectPrepare($query, $request->input('select'));
})->when($request->has('include'), function ($query) use ($request) {
if(!empty($request->input('include'))) {
$includedTables = explode(',', $request->input('include'));
$tables = array_map('trim', $includedTables);
return $query->with($tables);
}
return $query;
})->orderBy("{$order_by}", "{$sort_by}")
->paginate($per_page);
return response()->json($users);
}
}
}
这是我的特质
<?php
namespace App\Traits;
trait ControllerTrait
{
/**
* Function: scopeSelectPrepare
public function selectPrepare($query, $select) {
if(!empty($select)) {
$selectedColumns = explode(',', $select);
$columns = array_map('trim', $selectedColumns);
return $query->select($columns);
}
return $query;
}
}
如你所见,我的名字 space 的特征是 App\Traits 并在我的控制器中调用 use App\Traits\ControllerTrait 然后可以使用 ControllerTrait 从特征。当我尝试获取要在我的查询中使用的函数时,它说:调用未定义的函数 App\Http\Controllers\selectPrepare()
有什么我想念的吗?我对 laravel 的特征功能不熟悉,但我认为我遵循了所有示例和命名约定。谁能看出我做错了什么。
访问特征方法时需要使用 $this
,就像访问任何其他方法一样:
$users = User::when($request->has('select'), function ($query) use ($request) {
$this->selectPrepare($query, $request->input('select'));
我查看了整个 Whosebug 和 google,但我似乎无法解决我未找到的特征函数。我试过 composer dump-autoload,我的 composer.json 连接了应用程序目录,甚至检查了我的名字 space 和特征名称。这是我的用户控制器。
<?php
namespace App\Http\Controllers;
use App\User;
use App\Traits\ControllerTrait;
use App\Http\Requests\UpdateUser;
use Illuminate\Http\Request;
use App\Http\Requests\IndexUser;
class UserController extends Controller
{
use ControllerTrait;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show multiple users.
*
* @return \Illuminate\Http\Response
*/
public function index(IndexUser $request)
{
$per_page = 50;
$order_by = 'id';
$sort_by = 'ASC';
if($request->has('per_page')) {
$per_page = $request->input('per_page');
}
if($request->has('order_by')) {
$order_by = $request->input('order_by');
}
if($request->has('sort_by')) {
$sort_by = $request->input('sort_by');
}
$users = User::when($request->has('select'), function ($query) use ($request) {
selectPrepare($query, $request->input('select'));
})->when($request->has('include'), function ($query) use ($request) {
if(!empty($request->input('include'))) {
$includedTables = explode(',', $request->input('include'));
$tables = array_map('trim', $includedTables);
return $query->with($tables);
}
return $query;
})->orderBy("{$order_by}", "{$sort_by}")
->paginate($per_page);
return response()->json($users);
}
}
}
这是我的特质
<?php
namespace App\Traits;
trait ControllerTrait
{
/**
* Function: scopeSelectPrepare
public function selectPrepare($query, $select) {
if(!empty($select)) {
$selectedColumns = explode(',', $select);
$columns = array_map('trim', $selectedColumns);
return $query->select($columns);
}
return $query;
}
}
如你所见,我的名字 space 的特征是 App\Traits 并在我的控制器中调用 use App\Traits\ControllerTrait 然后可以使用 ControllerTrait 从特征。当我尝试获取要在我的查询中使用的函数时,它说:调用未定义的函数 App\Http\Controllers\selectPrepare()
有什么我想念的吗?我对 laravel 的特征功能不熟悉,但我认为我遵循了所有示例和命名约定。谁能看出我做错了什么。
访问特征方法时需要使用 $this
,就像访问任何其他方法一样:
$users = User::when($request->has('select'), function ($query) use ($request) {
$this->selectPrepare($query, $request->input('select'));