LoginSignup
1
1

controller から template に渡した変数を型補完したい!

Posted at

2行結論

CakePHP は OK
Laravel は blade ディレクティブ使ってると難しい

CakePHP

vscode で開発していて、テンプレート側でも何とか型補完出来ないかしばらくの間試行錯誤していましたが、 CakePHP ではようやく解決したのでメモ

恥ずかしい話 @var でも変数名を指定できるのを今まで知りませんでした…
言い訳になりますがプロパティ定義時とか変数への代入時とかでしか使ってなかったので

サンプルコード

index.ctp (v3)、 index.php (v4)

<?php
/**
 * @var \App\Model\Entity\User $user
 */
?>

<!-- User Entity として型補完が効く -->
<?php if ($user->isAdmin()) ?>
    <!-- 省略 -->
<?php endif ?>

試行錯誤して駄目だった例

このパターンの記述は変数への代入やプロパティ定義でないと駄目なんですね

<?php 
    /** @var \App\Model\Entity\User */
    if ($user->isAdmin()) 
?>
    <!-- 省略 -->
<?php endif ?>
<?php
    /** @var \App\Model\Entity\User */
    $user
?>

<?php if ($user->isAdmin()) ?>
    <!-- 省略 -->
<?php endif ?>

Laravel

Laravel では blade ディレクティブに渡される変数などは型補完出来ませんでした
PHPの構文ではないので当然っちゃ当然ですが

補完が効かないサンプルコード

{{- <?php でも同様 -}}
@php
/**
 * @var \App\Models\User $user
 */
@endphp

{{ 型補完が効かない }}
@if ($user->isAdmin())
    {{ 省略 }}
@endif

一応 blade ディレクティブを使用せず CakePHP と同じ書き方なら補完効きましたが…

<?php
/**
 * @var \App\Models\User $user
 */
?>

{{- User モデル として型補完が効くが blade を使う意味を問われる -}}
<?php if ($user->isAdmin()) ?>
    {{– 省略 –}}
<?php endif ?>


補完してくれる拡張機能も探しましたが見つかりませんでした

PHPStorm だと2017年には対応してますね。うらやましいことです

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1