Laravel中用于Visual Studio Code或其他IDE的模型的Intellisense(自动完成)

RaV*_*RaV 2 ide intellisense autocomplete laravel visual-studio-code

我正在寻找与Laravel .NET中的Intellisense类似的东西。到目前为止,我一直在使用.NET,并且模型的自动补全功能非常出色,并使我的工作更加轻松。

现在我需要创建Laravel应用程序,我一直在遵循本教程来准备我的环境,但是我获得的唯一自动完成功能是默认的PHP函数和一些预定义的方法(例如- SaveSessionListenerSymfony\Component\HttpKernel\EventListener-我什至没有在任何地方使用Symfony)。

我想要实现的是从模型获得自动补全功能,例如Laravel中有一个名为Model的类,我有扩展Model的Page类。

use App/Page

$home = new Page();
$home->content = "lorem ipsum";
$home->save();
Run Code Online (Sandbox Code Playgroud)

当我编写$home->,no content,no save(),只有一些随机函数时,我没有任何完成。我能理解为什么不存在content自动补全功能-它没有直接写成代码,但是它写在数据库和对象数据库引擎上却在解析那个,我还不知道怎么做,但是我不明白为什么甚至save()没有不会自动补全。

我试图用谷歌搜索这个问题,但是没有任何好的结果。

RaV*_*RaV 6

我弄清楚了如何使其与Visual Studio Code一起使用。

首先也是最重要的一点是,链接变体为我提供了评论: laravel-ide-helper

我只是关注了文档并生成了基本的帮助程序+模型帮助程序。我猜以后我将自动执行这些生成命令,它也解释了如何在文档中进行操作。

第二件事是它仅适用于: PHP Intelephense插件 请注意,您必须先重置VSC,然后它才能真正起作用。

我做的第三件事 -VSC具有内置的php自动完成功能,这很烦人,因为它开始向我显示建议中的模型字段,但它介于其他数十条建议之间。要禁用内置自动完成功能,我在用户设置中添加了以下行:

"php.suggest.basic": false,
Run Code Online (Sandbox Code Playgroud)

我做的最后一件事 -我已将代码段移到建议框的底部,以清除自动完成的结果:

"editor.snippetSuggestions": "bottom"
Run Code Online (Sandbox Code Playgroud)

而且,作为Laravel编程环境,它确实很不错。


Edu*_*omo 5

我使用PHP Doc进行字段定义,如下例所示:

namespace App\Models;

use App\Enums\MediaType;
use App\Models\Commons\BaseModel;
use DateTime;

/**
 * Famous Media.
 *
 * @property int $id
 * @property int $famous_id
 * @property MediaType $type
 * @property string $url
 * @property int $position
 * @property DateTime $created_at
 * @property DateTime $updated_at
 */
class FamousMedia extends BaseModel
{
  const TABLE = 'famous_medias';

  /**
   * The attributes that are mass assignable.
   *
   * @var array
   */
  protected $fillable = [
    'type',
    'url',
    'position',
    'famous_id',
  ];

  /**
   * The attributes that should be hidden for arrays.
   *
   * @var array
   */
  protected $hidden = [
    'famous_id',
    'deleted_at',
    'created_at',
    'updated_at',
  ];

  public function famous()
  {
    return $this->hasOne(Famous::class, 'famous_id');
  }
}
Run Code Online (Sandbox Code Playgroud)