【问题标题】:PHP Laravel create and instantiate classPHP Laravel 创建和实例化类
【发布时间】:2020-12-05 11:25:36
【问题描述】:

在 PHP Laravel 中,我想创建具有属性的类,例如 DTO。 在 App\Entity 我创建了类:

<?php

namespace App\Entity\DTO;

class UserDTO
{
    public $id;
}

我想在我的Controller中使用它

<?php

namespace App\Http\Controllers;

use App\Entity\DTO;

class UserApiController extends Controller
{
    public function loginPost(Request $request)
    {
      ...
      $userDTO = new UserDTO();
      $userDTO->id = $user->id;
    }
}

我有错误:

Error: Class 'App\Http\Controllers\UserDTO' not found in file C:\xampp\htdocs\testsapp\app\Http\Controllers\UserApiController.php on line 131
#0 [internal function]: App\Http\Controllers\UserApiController->loginPost(Object(Illuminate\Http\Request))
#1 C:\xampp\htdocs\testsapp\vendor\laravel\framework\src\Illuminate\Routing\Controller.php(54): call_user_func_array(Array, Array)

它正在App\Http\Controllersnampespace 中寻找 UserDTO。没看到use App\Entity\DTO;

【问题讨论】:

  • 尝试将use App\Entity\DTO;替换为use App\Entity\DTO\UserDTO;
  • 你可能想看看JsonSerializeable

标签: php laravel class


【解决方案1】:

在 PHP 中没有实际的“导入”,一切都只是一个别名。您在此文件中将 App\Entity\DTO 别名为 DTO,因此要引用您的 DTO,您需要使用 DTO\UserDTO

new DTO\UserDTO;

当您使用语句use App\Entity\DTO; 时,您并没有导入DTO 中的所有内容;这相当于use App\Entity\DTO as DTO;

你也可以直接给这个类起别名:

use App\Entity\DTO\UserDTO;

...

... new UserDTO;

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多