如何按照 Zend Framework 2 编码约定设置 Eclipse PDT


How to set Eclipse PDT follow Zend Framework 2 coding convention?

我正在学习Zend Framework 2。当我按Ctrl + Shift + F组合键进行自动格式化代码时,它显示不喜欢 Zend Framework 2 编码约定。

请向我展示一种简单的方法来自动格式化代码,遵循Eclipse 4.4 Luna PDT(PHP开发工具)中的Zend Framework编码约定

我曾经使用过一段时间的Eclipse和PDT。然后我切换到另一个 IDE。无论如何,在 Eclipse 中,您可以编辑自动套用格式的工作方式。您可以在窗口 -> 首选项下编辑自动格式化,然后在 PHP -> 代码样式下编辑自动格式化。对我来说,它从一开始就在Zend Framework 2中运行良好。

在那里,您还可以找到导出/导入设置的可能性。我刚刚出口了我的。您可以将以下代码另存为.xml,然后将其导入到您可以编辑设置的同一位置。希望这对你有所帮助。

不要忘记,首先备份您的备份,以确保万无一失。(我使用了Eclipse 4.2.2和PDT 3.1.1)

用于代码模板的 XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?><templates><template autoinsert="true" context="php_gettercomment_context" deleted="false" description="Comment for getter methods" enabled="true" id="org.eclipse.php.ui.editor.templates.php.codetemplates.gettercomment" name="gettercomment">/**
 * @return the ${bare_field_name}
 */</template><template autoinsert="true" context="php_settercomment_context" deleted="false" description="Comment for setter methods" enabled="true" id="org.eclipse.php.ui.editor.templates.php.codetemplates.settercomment" name="settercomment">/**
 * @param ${field_type} ${bare_field_name}
 */</template><template autoinsert="true" context="php_constructorcomment_context" deleted="false" description="Comment for created constructors" enabled="true" id="org.eclipse.php.ui.editor.templates.php.codetemplates.constructorcomment" name="constructorcomment">/**
 * ${tags}
 */</template><template autoinsert="true" context="php_filecomment_context" deleted="false" description="Comment for created PHP files" enabled="true" id="org.eclipse.php.ui.editor.templates.php.codetemplates.filecomment" name="filecomment">/**
 * 
 */
</template><template autoinsert="true" context="php_typecomment_context" deleted="false" description="Comment for created types" enabled="true" id="org.eclipse.php.ui.editor.templates.php.codetemplates.typecomment" name="typecomment">/**
 * @author ${user}
 *
 * ${tags}
 */</template><template autoinsert="true" context="php_fieldcomment_context" deleted="false" description="Comment for fields" enabled="true" id="org.eclipse.php.ui.editor.templates.php.codetemplates.fieldcomment" name="fieldcomment">/**
 * @var ${field_type}
 */</template><template autoinsert="true" context="php_methodcomment_context" deleted="false" description="Comment for non-overriding methods" enabled="true" id="org.eclipse.php.ui.editor.templates.php.codetemplates.methodcomment" name="methodcomment">/**
 * ${tags}
 */</template><template autoinsert="true" context="php_overridecomment_context" deleted="false" description="Comment for overriding methods" enabled="true" id="org.eclipse.php.ui.editor.templates.php.codetemplates.overridecomment" name="overridecomment">/* (non-PHPdoc)
 * ${see_to_overridden}
 */</template><template autoinsert="true" context="php_delegatecomment_context" deleted="false" description="Comment for delegate methods" enabled="true" id="org.eclipse.php.ui.editor.templates.php.codetemplates.delegatecomment" name="delegatecomment">/**
 * ${tags}
 * ${see_to_target}
 */</template><template autoinsert="true" context="php_newtype_context" deleted="false" description="Newly created files" enabled="true" id="org.eclipse.php.ui.editor.templates.php.codetemplates.newtype" name="newtype">${filecomment}
${package_declaration}
${typecomment}
${type_declaration}</template><template autoinsert="false" context="php_classbody_context" deleted="false" description="Code in new class type bodies" enabled="true" id="org.eclipse.php.ui.editor.templates.php.codetemplates.classbody" name="classbody">
</template><template autoinsert="false" context="php_interfacebody_context" deleted="false" description="Code in new interface type bodies" enabled="true" id="org.eclipse.php.ui.editor.templates.php.codetemplates.interfacebody" name="interfacebody">
</template><template autoinsert="true" context="php_catchblock_context" deleted="false" description="Code in new catch blocks" enabled="true" id="org.eclipse.php.ui.editor.templates.php.codetemplates.catchblock" name="catchblock">// ${TODO} Auto-generated catch block
${exception_var}.printStackTrace();</template><template autoinsert="true" context="php_methodbody_context" deleted="false" description="Code in created method stubs" enabled="true" id="org.eclipse.php.ui.editor.templates.php.codetemplates.methodbody" name="methodbody">// ${TODO} Auto-generated method stub
${body_statement}</template><template autoinsert="true" context="php_constructorbody_context" deleted="false" description="Code in created constructor stubs" enabled="true" id="org.eclipse.php.ui.editor.templates.php.codetemplates.constructorbody" name="constructorbody">${body_statement}
// ${TODO} Auto-generated constructor stub</template><template autoinsert="true" context="php_getterbody_context" deleted="false" description="Code in created getters" enabled="true" id="org.eclipse.php.ui.editor.templates.php.codetemplates.getterbody" name="getterbody">return ${field};</template><template autoinsert="true" context="php_setterbody_context" deleted="false" description="Code in created setters" enabled="true" id="org.eclipse.php.ui.editor.templates.php.codetemplates.setterbody" name="setterbody">${field} = ${param};</template><template autoinsert="true" context="php_new_file_context" deleted="false" description="Simple php file" enabled="true" id="org.eclipse.php.ui.editor.templates.php.author" name="New simple PHP file">&lt;?php
${cursor}</template><template autoinsert="true" context="php_new_file_context" deleted="false" description="html 4.01 frameset" enabled="true" id="org.eclipse.php.ui.editor.templates.php.html.frameset" name="New PHP file - HTML frameset">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=${encoding}"&gt;
&lt;title&gt;Insert title here&lt;/title&gt;
&lt;/head&gt;
&lt;frameset&gt;
    &lt;frame&gt;
    &lt;frame&gt;
    &lt;noframes&gt;
    &lt;body&gt;
    &lt;p&gt;This page uses frames. The current browser you are using does not support frames.&lt;/p&gt;
    &lt;?php
${cursor}
    ?&gt;
    &lt;/body&gt;
    &lt;/noframes&gt;
&lt;/frameset&gt;
&lt;/html&gt;</template></templates>

格式化程序设置

菜单点格式化程序(代码模板下方)中的设置在我的 Eclipse 中是这样设置的:

选项卡

策略:选项卡

压痕大小:1

标签尺寸:4

换行的默认缩进:1

数组初始值设定项的默认缩进:1

Zend Framework 2 编码标准主要基于 PSR-2,并有一些小的补充。我不太确定这些添加,但它应该是最小的,你可以尝试通过阅读所有这些和这个来找到。此外,还有一份 2012 年 6 月的会议日志,其中包含有关此主题的讨论。

我不明白为什么他们更喜欢引入另一种名为"zend"的新编码标准,而不是简单地遵循和支持PSR-2。

基本上,我认为针对PSR-2调整IDE就足够了。

以下是一些资源:

  • FriendsOfPhp 的 PHP CS Fixer - 当您想要遵循 PSR-1 和 PSR-2 文档中定义的 PHP 编码标准时,PHP 编码标准修复器工具修复了代码中的大多数问题。(查看此链接:自制,崇高文本,vim,netbeans)
  • PSR-2 gist by netojoaobatista - Zend Studio 的代码格式化程序,使用 FIG-Standards PSR-2 编码风格指南。(据我所知,zend studio内置了对PSR-2的支持)
  • Netbeans-psr by maniaplanet - 一个专门的 netbeans 设置项目,以符合 PHP 的 PSR 1 和 2(Github 链接)
  • PDT 扩展组 -
  • PDT 扩展组为 php-cs-fixer 提供本机语义分析插件支持。(Github链接)

没有简单而神奇的方法可以使用键盘快捷键组合基于 ZF2 标准格式化代码,但是是的,这是可能的。每个 IDE 都有不同的特征、设置、最佳实践和方法。

您所需要的只是在阅读一些文档后仔细调整 PSR-2 的 IDE。我强烈建议使用 php-cs-fixer。

希望对您有所帮助。

转到窗口 -> 首选项 -> PHP -> 代码样式 -> 格式化程序 -> 从活动配置文件中选择 (Zend)。