我正在尝试使用一些希望可重用的代码在PHP中动态运行不同的类,但是我很难找到正确的方法来做到这一点。目前,我正在运行一个POST请求,数据流动如下:Route::post('/user/create', 'UserController@createItem');到用户控制器:namespace App\Http\Controllers;use Illuminate\Cache\Repository;use App\Models\User;class UserController extends AbstractController{ const className = 'User';}和摘要控制器:<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;use GuzzleHttp\Exception\RequestException;use App\Models\User;class AbstractController extends Controller{ public function createItem() { $inputJSON = file_get_contents('php://input'); $this->className::buildItem($inputJSON); return; }}理想情况下,这应该调用一个静态方法,称为buildItem()当我通过硬编码到抽象控制器中来测试它时,它按预期工作,但是当我尝试以这种方式执行此操作时,我在PostMan中收到错误:UserErrorException: Undefined property: App\Http\Controllers\UserController::$className in file .../app/Http/Controllers/AbstractController.php on line 14我尝试过声明和引用几种不同的方法,但似乎无法使其起作用。任何帮助是值得赞赏的!className
1 回答
紫衣仙女
TA贡献1839条经验 获得超15个赞
由于 在实现中定义了 ,因此可以通过 使用后期静态绑定来访问它。classNamestatic::className
还需要在模型类的命名空间前面附加。
这将变为:
class AbstractController extends Controller
{
private const MODELS_NAMESPACE = 'App\\Models';
public function createItem()
{
$inputJSON = file_get_contents('php://input');
$className = self::MODELS_NAMESPACE . '\\' . static::className;
$className::buildItem($inputJSON);
}
}
演示:https://3v4l.org/Ng6bl
- 1 回答
- 0 关注
- 69 浏览
添加回答
举报
0/150
提交
取消