Laravel 中模型的 Intellisense(自动完成)用于 Visual Studio 代码或其他 IDE
Intellisense (autocompletion) for model in Laravel for Visual Studio Code or another IDE
我正在 Laravel 中寻找与 .NET 中的 Intellisense 类似的东西。到目前为止,我一直在使用 .NET,模型的自动完成功能很棒,让我的工作更加轻松。
现在我需要创建 Laravel 应用程序,我一直在关注 this tutorial 来准备我的环境,但我得到的唯一自动完成是默认 PHP 函数和一些预定义的方法(例如 Symfony\Component\HttpKernel\EventListener
中的 SaveSessionListener
- 我什至没有在任何地方使用 Symfony)。
我想要实现的是从模型中获取自动完成功能,例如在 Laravel 中有一个名为 Model 的 class,我有 class 扩展 Model 的页面。
use App/Page
$home = new Page();
$home->content = "lorem ipsum";
$home->save();
我写$home->
的时候没有任何补全,没有content
,没有save()
,只有一些随机函数。我能理解为什么可能没有 content
自动完成 - 它没有直接写入代码,但它写在数据库和对象数据库引擎正在解析那个,我还没有弄清楚如何,但我不知道不明白为什么 save()
没有自动完成。
我尝试google这个问题,但没有任何好的结果。
我想出了如何让它与 Visual Studio 代码一起工作。
首先也是最重要的是我在评论中提供的link变形:
laravel-ide-helper
我只是按照文档生成了基本助手+模型助手。我想稍后我会自动执行这些生成命令,它还在文档中解释了如何执行此操作。
第二件事是它只适用于:
PHP Intelephense plugin
请注意,您需要重置 VSC 才能真正工作。
我做的第三件事 - VSC 有内置 php 自动完成功能,这很烦人,因为它开始在建议中向我展示模型字段,但它是在许多其他建议之间。要禁用内置自动完成功能,我在用户设置中添加了一行:
"php.suggest.basic": false,
我做的最后一件事 - 我已将片段移至建议框底部以进一步清除自动完成结果:
"editor.snippetSuggestions": "bottom"
作为 Laravel 编程环境,它确实工作得很好。
我使用 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');
}
}
更新:
您现在可以使用 Laravel Extra Intellisense 现在支持模型属性。
仍在 Beta 但它工作正常。
我正在 Laravel 中寻找与 .NET 中的 Intellisense 类似的东西。到目前为止,我一直在使用 .NET,模型的自动完成功能很棒,让我的工作更加轻松。
现在我需要创建 Laravel 应用程序,我一直在关注 this tutorial 来准备我的环境,但我得到的唯一自动完成是默认 PHP 函数和一些预定义的方法(例如 Symfony\Component\HttpKernel\EventListener
中的 SaveSessionListener
- 我什至没有在任何地方使用 Symfony)。
我想要实现的是从模型中获取自动完成功能,例如在 Laravel 中有一个名为 Model 的 class,我有 class 扩展 Model 的页面。
use App/Page
$home = new Page();
$home->content = "lorem ipsum";
$home->save();
我写$home->
的时候没有任何补全,没有content
,没有save()
,只有一些随机函数。我能理解为什么可能没有 content
自动完成 - 它没有直接写入代码,但它写在数据库和对象数据库引擎正在解析那个,我还没有弄清楚如何,但我不知道不明白为什么 save()
没有自动完成。
我尝试google这个问题,但没有任何好的结果。
我想出了如何让它与 Visual Studio 代码一起工作。
首先也是最重要的是我在评论中提供的link变形: laravel-ide-helper
我只是按照文档生成了基本助手+模型助手。我想稍后我会自动执行这些生成命令,它还在文档中解释了如何执行此操作。
第二件事是它只适用于: PHP Intelephense plugin 请注意,您需要重置 VSC 才能真正工作。
我做的第三件事 - VSC 有内置 php 自动完成功能,这很烦人,因为它开始在建议中向我展示模型字段,但它是在许多其他建议之间。要禁用内置自动完成功能,我在用户设置中添加了一行:
"php.suggest.basic": false,
我做的最后一件事 - 我已将片段移至建议框底部以进一步清除自动完成结果:
"editor.snippetSuggestions": "bottom"
作为 Laravel 编程环境,它确实工作得很好。
我使用 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');
}
}
更新:
您现在可以使用 Laravel Extra Intellisense 现在支持模型属性。
仍在 Beta 但它工作正常。