获取 PhpStorm Live Template 中的目录路径

问题描述 投票:0回答:3

我正在尝试通过 PhpStorm 的模板系统(文件和代码模板)生成命名空间,但我看不到任何通过 PhpStorm 文档来获取此名称空间的帮助器/方法。

我想知道是否有一种方法可以根据目录自动定义命名空间:

<?php
// I'm wanting to apply to $namespace
namespace $namespace;

class ${NAME} implements
    \Zend\Mail\Mailable
{
    /** \Zend\Mail\Factory */
    private $factory;
...

}#set( $factory = "factory" ) #set( $this- = "this-" ) #set( $directory = ?)

如果我的目录/文件名是

zend/mail/model/notice/send.php
我希望生成一个
Zend\Mail\Model\Notice;
的命名空间,我可以通过
${NAME}
变量获取类名。

我知道我可以让模板在创建文件时通过对话框请求命名空间,但是我想知道是否可以自动执行此操作?

phpstorm
3个回答
5
投票

如果你愿意,你可以使用groovyScript。

例如,您可以创建一个变量 $FOLDER_OF_FILE$ 并设置此 groovyScript 以获取文件的文件夹。

groovyScript("String[] p=_editor.getVirtualFile().getPath().split('/');String prevLast = p[p.length-2];")

您可以根据您的需要更改和调整我的示例


1
投票

文件路径没有预定义变量,请投票给IDEA-136387,以便收到有关此功能的任何进展的通知。


0
投票

我已经为 magento 模块创建了一个实时模板,并希望根据 php 文件的文件路径生成命名空间。这对我有用:

实时模板:

<?php declare(strict_types=1);

namespace $NAMESPACE$;

class $CLASSNAME$
{
    
}

变量CLASSNAME

fileNameWithoutExtension()

变量命名空间

regularExpression(regularExpression(regularExpression(fileRelativePath(),"src/app/code/",""),"/\\w+\.php",""),"/",escapeString("\\"))

我使用了 3 个正则表达式()替换

  1. 切掉“src/app/code”
  2. 删除文件名和结尾的“/”
  3. 最后用“”替换“/” - 我花了一段时间才弄清楚插入“”的工作语法...
© www.soinside.com 2019 - 2024. All rights reserved.