PHPStorm Symfony / Twig игнорирует получатель от сущности - PullRequest
0 голосов
/ 25 марта 2020

Я использую последнюю версию PhpStorm с плагином Symfony и его зависимостями и получил некоторые проблемы с завершением метода сущностей Twig.

Это моя User сущность (работает хорошо)

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use App\Entity\UserInterface as BaseInterface;

/**
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 * @UniqueEntity(fields={"email"}, message="Adresse mail déjà utilisée")
 */
class User implements BaseInterface, \Serializable
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=180, unique=true)
     */
    private $email;

    /**
     * @ORM\Column(type="json")
     */
    private $roles = [];

    /**
     * @ORM\Column(type="string")
     */
    private $password;

    /**
     * @ORM\OneToOne(targetEntity="App\Entity\Profil", mappedBy="user", cascade={"persist", "remove"})
     */
    private $profil;

    // ...
    // setters and getters auto-generated
}

И вот мое действие Controller:


/**
 * @Route("/user", name="user_")
 * @IsGranted("IS_AUTHENTICATED_REMEMBERED")
 */
class UserController extends AbstractController
{
    /**
     * @Route("/profil", name="profil")
     */
    public function profil()
    {
        // I tried to load it from doctrine repository and also tried to add @var Profil comment
        $user = $this->getUser();

        return $this->render('security/user/profil.html.twig', [
            'user' => $user
        ]);
    }

    // ...
}

И, наконец, мой шаблон:

{% block user_content %}
    <div class="card">
        <div class="card-body">
            <table class="table table-hover tabless">
                <tr>
                    <td>Email</td>
                    <td>{{ user.username }}</td>
                </tr>
                <tr>
                    <td>Username</td>
                    <td>{{ user.profil.username }}</td>
                </tr>
                <tr>
                    <td>Date Inscription</td>
                    <td>{{ user.profil.createdAt | date('d/m/Y') }}</td>
                </tr>
                <tr>
                    <td>Dernière Modification</td>
                    <td>{{ user.profil.updatedAt | date('d/m/Y') }}</td>
                </tr>
                <tr>
                    <td>Roles</td>
                    <td>
                        {% for role in user.roles %}
                            <span class="badge badge-primary badge-">{{ role|trans }}</span>
                        {% endfor %}
                    </td>
                </tr>
                <tr>
                    <td>Description</td>
                    <td>{{ user.profil.description }}</td>
                </tr>
            </table>
        </div>
    </div>
{% endblock %}

Моя проблема в том, что в шаблоне ветки PhpStorm не находит средство получения профиля из пользовательской переменной. Я попытался увидеть ссылку на пользовательскую переменную, и она отправляет меня к Symfony UserInterface, а не к моей, поэтому я попытался создать свою собственную с помощью функции getProfil().

Самое странное, что если я сделаю {{ app.user.profil }}, это полностью сработает и автоматически завершит его.

1 Ответ

0 голосов
/ 26 марта 2020

Просто добавьте аннотацию в контроллер

   use App\Entity\User;


   /** @var User $user */
   $user = $this->getUser();
...