我正在寻找类似于Laravel中的.NET中的Intellisense。到目前为止,我一直在使用.NET,自动完成模型非常棒,让我的工作更轻松。
现在我需要创建Laravel应用程序,我一直在关注this tutorial来准备我的环境,但我得到的唯一自动完成是针对默认的PHP函数和一些预定义的方法(例如SaveSessionListener
来自{ {1}} - 我甚至没有在任何地方使用Symfony。
我想要实现的是从模型中获取自动完成,例如在Laravel中有一个名为Model的类,我有扩展Model的类Page。
Symfony\Component\HttpKernel\EventListener
当我写use App/Page
$home = new Page();
$home->content = "lorem ipsum";
$home->save();
,没有$home->
,没有content
,只有一些随机函数时,我没有任何完成。我可以理解为什么可能没有save()
自动完成 - 它没有直接写入代码,但是它写在数据库和对象数据库引擎上正在解析那个,我还没弄清楚怎么样,但我不知道理解为什么即使content
没有自动完成。
我试图谷歌问题,但没有任何好结果。
答案 0 :(得分:2)
我想出了如何使用Visual Studio Code。
第一个也是最重要的是我在评论中提供的链接变形: laravel-ide-helper
我只是关注了docs并生成了基本的helper + model helper。我想稍后我会自动执行这些生成命令,它还解释了如何在docs中执行此操作。
第二件事是它只适用于: PHP Intelephense plugin 请注意,您需要在实际运行之前重置VSC。
我做的第三件事 - VSC有内置的php自动完成功能,它非常烦人,因为它开始向我展示建议中的模型字段,但它介于几十个其他建议之间。要禁用内置自动完成功能,我在用户设置中添加了一行:
viewForAnnotation
我做的最后一件事 - 我已将代码段移到建议框的底部以清除自动填充结果:
"php.suggest.basic": false,
这在Laravel编程环境中非常有效。
答案 1 :(得分:2)
我使用 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');
}
}