如何在 PhpStorm 9 中为 Blade 模板自动完成变量?

How I can make variables autocomplete in the PhpStorm 9 for Blade templates?

我希望在 blade 模板中考虑 PHPdoc 块。

PhpStorm 9,Laravel 5.1,blade 模板文件:

<?php
/* @var App\Models\User $user */
?>
...
<?= $user->email ?> <- autocomplete for the word "email" is working
...
{{ $user->email }} <- autocomplete not working

我尝试了不同的变体:

{{
/**
* @var App\Models\User $user
**/
}}
{{ /* @var App\Models\User $user */ }}
...
{{ $user->email }} <- autocomplete not working...
...
In such variant autocomplete works, but only within that block:
{{
/* @var App\Models\User $user */
$user->email
}}
...
{{ $user->email }} <- here does not work again...

如何使自动完成功能在 blade 个模板的所有块中工作?

到目前为止,由于 PHPStorm 不支持 Blade 模板,这还不是完全可行的。

这个包可能对其他 Laravel 相关问题有用 https://github.com/barryvdh/laravel-ide-helper

ATM PhpStorm 不支持 blade 模板中使用 blade 语法的 PHPDoc 注释(特别是对于完成 blade 变量)。

请关注这些工单 (star/vote/comment) 以获得进度通知:

您现在可以随心所欲了:

<?php
/* @var App\Models\User $user */
?>
...
{{ $user->email }} <- autocomplete working

https://blog.jetbrains.com/phpstorm/2017/02/code-completion-in-laravel-blade-templates/

大致相同的答案,只是包装在 blade 指令中:

 @php /** @var App\Models\User $user */ @endphp
 {{ $user->email }}

为避免必须明确定义每个要在模板中使用的 属性,您可以执行以下操作:

首先:在控制器

中将要公开给模板的属性声明为键入的public属性
class CreateAccountController extends Controller
{
    public ?string $foo = null;

第二:在您的视图值中使用 $this

    return view('auth.create_account', [
        'this' => $this,
    ]);

第三:在控制器顶部声明 $this

@php /** @var \App\Http\Controllers\Auth\CreateAccountController $this */ @endphp

第四:在你的模板中使用 $this

<div class="card-header">{{ $this->foo }}</div>

您可以在视图中随意调用“$this”。 $model 可能是一个更好的术语。