comment out names for js site template
authorMasaki Katakai <masaki@netbeans.org>
Sat, 08 Dec 2012 17:09:53 +0900
changeset 18086ea423cddf9a
parent 1807 9f1c9b9ab0f1
child 1809 2c37d99f4216
comment out names for js site template
src/ja/ide/tasklist-todo/tasklist-todo/org/netbeans/modules/tasklist/todo/settings/Bundle_ja.properties
src/ja/php/php-project/php-project/org/netbeans/modules/php/project/phpunit/annotations/Bundle_ja.properties
src/ja/php/php-project/php-project/org/netbeans/modules/php/project/ui/options/Bundle_ja.properties
src/ja/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/extra/Bundle_ja.properties
src/ja/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/security/Bundle_ja.properties
src/ja/webcommon/web-clientproject/web-clientproject/org/netbeans/modules/web/clientproject/sites/Bundle_ja.properties
src/pt_BR/ide/tasklist-todo/tasklist-todo/org/netbeans/modules/tasklist/todo/settings/Bundle_pt_BR.properties
src/pt_BR/php/php-project/php-project/org/netbeans/modules/php/project/phpunit/annotations/Bundle_pt_BR.properties
src/pt_BR/php/php-project/php-project/org/netbeans/modules/php/project/ui/options/Bundle_pt_BR.properties
src/pt_BR/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/extra/Bundle_pt_BR.properties
src/pt_BR/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/security/Bundle_pt_BR.properties
src/pt_BR/webcommon/web-clientproject/web-clientproject/org/netbeans/modules/web/clientproject/sites/Bundle_pt_BR.properties
src/ru/ide/tasklist-todo/tasklist-todo/org/netbeans/modules/tasklist/todo/settings/Bundle_ru.properties
src/ru/php/php-project/php-project/org/netbeans/modules/php/project/phpunit/annotations/Bundle_ru.properties
src/ru/php/php-project/php-project/org/netbeans/modules/php/project/ui/options/Bundle_ru.properties
src/ru/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/extra/Bundle_ru.properties
src/ru/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/security/Bundle_ru.properties
src/ru/webcommon/web-clientproject/web-clientproject/org/netbeans/modules/web/clientproject/sites/Bundle_ru.properties
src/zh_CN/ide/tasklist-todo/tasklist-todo/org/netbeans/modules/tasklist/todo/settings/Bundle_zh_CN.properties
src/zh_CN/php/php-project/php-project/org/netbeans/modules/php/project/phpunit/annotations/Bundle_zh_CN.properties
src/zh_CN/php/php-project/php-project/org/netbeans/modules/php/project/ui/options/Bundle_zh_CN.properties
src/zh_CN/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/extra/Bundle_zh_CN.properties
src/zh_CN/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/security/Bundle_zh_CN.properties
src/zh_CN/webcommon/web-clientproject/web-clientproject/org/netbeans/modules/web/clientproject/sites/Bundle_zh_CN.properties
     1.1 --- a/src/ja/ide/tasklist-todo/tasklist-todo/org/netbeans/modules/tasklist/todo/settings/Bundle_ja.properties	Tue Nov 20 16:21:50 2012 +0900
     1.2 +++ b/src/ja/ide/tasklist-todo/tasklist-todo/org/netbeans/modules/tasklist/todo/settings/Bundle_ja.properties	Sat Dec 08 17:09:53 2012 +0900
     1.3 @@ -11,5 +11,5 @@
     1.4  LBL_Options=\u30a2\u30af\u30b7\u30e7\u30f3\u9805\u76ee
     1.5  HINT_Options=\u300c\u30a2\u30af\u30b7\u30e7\u30f3\u9805\u76ee\u300d\u30a6\u30a3\u30f3\u30c9\u30a6\u5185\u306eToDo\u9805\u76ee\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3002
     1.6  
     1.7 -KW_ToDo=ToDo,@todo,ToDos,FIXME,PENDING,\u30a2\u30af\u30b7\u30e7\u30f3\u30fb\u30a2\u30a4\u30c6\u30e0,\u30bf\u30b9\u30af\u30ea\u30b9\u30c8,\u30bf\u30b9\u30af\u30fb\u30ea\u30b9\u30c8
     1.8 +#KW_ToDo=ToDo,@todo,ToDos,FIXME,PENDING,\u30a2\u30af\u30b7\u30e7\u30f3\u30fb\u30a2\u30a4\u30c6\u30e0,\u30bf\u30b9\u30af\u30ea\u30b9\u30c8,\u30bf\u30b9\u30af\u30fb\u30ea\u30b9\u30c8
     1.9  
     2.1 --- a/src/ja/php/php-project/php-project/org/netbeans/modules/php/project/phpunit/annotations/Bundle_ja.properties	Tue Nov 20 16:21:50 2012 +0900
     2.2 +++ b/src/ja/php/php-project/php-project/org/netbeans/modules/php/project/phpunit/annotations/Bundle_ja.properties	Sat Dec 08 17:09:53 2012 +0900
     2.3 @@ -38,18 +38,18 @@
     2.4  #
     2.5  # Portions Copyrighted 2012 Sun Microsystems, Inc.
     2.6  
     2.7 -AssertTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@assert</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u30e1\u30bd\u30c3\u30c9\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30fb\u30d6\u30ed\u30c3\u30af\u5185\u3067<code>@assert</code>\u6ce8\u91c8\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u30b9\u30b1\u30eb\u30c8\u30f3\u30fb\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u306e\u4f7f\u7528\u6642\u306b\u4e0d\u5b8c\u5168\u306a\u30c6\u30b9\u30c8\u30fb\u30b1\u30fc\u30b9\u3067\u306f\u306a\u304f\u5358\u7d14\u304b\u3064\u6709\u610f\u7fa9\u306a\u30c6\u30b9\u30c8\u3092\u81ea\u52d5\u751f\u6210\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @assert (0, 0) == 0\n */\npublic function add($a, $b) {\n    return $a + $b;\n}\n</code></pre>\n<p>\u3053\u308c\u3089\u306e\u6ce8\u91c8\u306f\u3001\u6b21\u306e\u3088\u3046\u306a\u30c6\u30b9\u30c8\u30fb\u30b3\u30fc\u30c9\u306b\u5909\u63db\u3055\u308c\u307e\u3059</p>\n<pre><code>\n/**\n * Generated from @assert (0, 0) == 0.\n */\npublic function testAdd() {\n    $o = new Calculator;\n    $this->assertEquals(0, $o->add(0, 0));\n}\n</code></pre>
     2.8 -BackupGlobalsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@backupGlobals</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u30c6\u30b9\u30c8\u30fb\u30b1\u30fc\u30b9\u30fb\u30af\u30e9\u30b9\u306e\u3059\u3079\u3066\u306e\u30c6\u30b9\u30c8\u306b\u5bfe\u3057\u3066\u3001\u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u64cd\u4f5c\u304a\u3088\u3073\u5fa9\u5143\u64cd\u4f5c\u3092\u5b8c\u5168\u306b\u7121\u52b9\u306b\u3067\u304d\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @backupGlobals disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n\    // ...\n}\n</code></pre>\n<p>\u307e\u305f\u3001<code>@backupGlobals</code>\u6ce8\u91c8\u306f\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u30fb\u30ec\u30d9\u30eb\u3067\u3082\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u64cd\u4f5c\u304a\u3088\u3073\u5fa9\u5143\u64cd\u4f5c\u306e\u30d5\u30a1\u30a4\u30f3\u30b0\u30ec\u30a4\u30f3\u69cb\u6210\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre></code>\n/**\n * @backupGlobals disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @backupGlobals enabled\n     */\n    public function testThatInteractsWithGlobalVariables() {\n        // ...\n    }\n}\n</code></pre>
     2.9 -BackupStaticAttributesTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@backupStaticAttributes</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u30c6\u30b9\u30c8\u30fb\u30b1\u30fc\u30b9\u30fb\u30af\u30e9\u30b9\u306e\u3059\u3079\u3066\u306e\u30c6\u30b9\u30c8\u306b\u5bfe\u3057\u3066\u3001\u30af\u30e9\u30b9\u306e\u9759\u7684\u5c5e\u6027\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u64cd\u4f5c\u304a\u3088\u3073\u30ea\u30b9\u30c8\u30a2\u64cd\u4f5c\u3092\u5b8c\u5168\u306b\u7121\u52b9\u306b\u3067\u304d\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @backupStaticAttributes disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    // ...\n}\n</code></pre>\n<p><code>@backupStaticAttributes</code>\u6ce8\u91c8\u306f\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u30fb\u30ec\u30d9\u30eb\u3067\u3082\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u64cd\u4f5c\u304a\u3088\u3073\u5fa9\u5143\u64cd\u4f5c\u306e\u30d5\u30a1\u30a4\u30f3\u30b0\u30ec\u30a4\u30f3\u69cb\u6210\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @backupStaticAttributes disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @backupStaticAttributes enabled\n     */\n    public function testThatInteractsWithStaticAttributes() {\n        // ...\n    }\n}\n</code></pre>
    2.10 -CodeCoverageIgnoreTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@codeCoverageIgnore</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p><code>@codeCoverageIgnore</code>\u6ce8\u91c8\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u30ab\u30d0\u30ec\u30fc\u30b8\u5206\u6790\u304b\u3089\u30b3\u30fc\u30c9\u884c\u3092\u9664\u5916\u3067\u304d\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @codeCoverageIgnore\n */\nclass Foo {\n    public function bar() {\n    }\n}\n\nclass Bar {\n    /**\n     * @codeCoverageIgnore\n     */\n    public function foo() {\n    }\n}\n</code></pre>
    2.11 -CoversTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@covers</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p><code>@covers</code>\u6ce8\u91c8\u3092\u30c6\u30b9\u30c8\u30fb\u30b3\u30fc\u30c9\u5185\u3067\u4f7f\u7528\u3059\u308b\u3068\u3001\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u306b\u3088\u308a\u30c6\u30b9\u30c8\u3059\u308b\u30e1\u30bd\u30c3\u30c9\u3092\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @covers BankAccount::getBalance\n */\npublic function testBalanceIsInitiallyZero() {\n    $this->assertEquals(0, $this->ba->getBalance());\n}\n</code></pre>\n<p>\u6307\u5b9a\u3057\u305f\u5834\u5408\u3001\u6307\u5b9a\u3057\u305f\u30e1\u30bd\u30c3\u30c9\u306e\u30b3\u30fc\u30c9\u30fb\u30ab\u30d0\u30ec\u30fc\u30b8\u60c5\u5831\u306e\u307f\u304c\u8003\u616e\u3055\u308c\u307e\u3059\u3002</p>\n<table border="0"><tr><th align="left">\u6ce8\u91c8</th><th align="left">\u8aac\u660e</th></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::methodName</code></td><td align="left">\u6ce8\u91c8\u4ed8\u304d\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u304c\u6307\u5b9a\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u30ab\u30d0\u30fc\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName</code></td><td align="left">\u6ce8\u91c8\u4ed8\u304d\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u304c\u7279\u5b9a\u306e\u30af\u30e9\u30b9\u306e\u3059\u3079\u3066\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u30ab\u30d0\u30fc\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName&lt;extended&gt;</code></td><td align="left" valign="top">\u6ce8\u91c8\u4ed8\u304d\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u304c\u7279\u5b9a\u306e\u30af\u30e9\u30b9\u306e\u3059\u3079\u3066\u306e\u30e1\u30bd\u30c3\u30c9\u304a\u3088\u3073\u305d\u306e\u89aa\u30af\u30e9\u30b9\u3068\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u30ab\u30d0\u30fc\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;public&gt;</code></td><td align="left">\u6ce8\u91c8\u4ed8\u304d\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u304c\u7279\u5b9a\u306e\u30af\u30e9\u30b9\u306e\u3059\u3079\u3066\u306epublic\u30e1\u30bd\u30c3\u30c9\u3092\u30ab\u30d0\u30fc\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;protected&gt;</code></td><td align="left">\u6ce8\u91c8\u4ed8\u304d\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u304c\u7279\u5b9a\u306e\u30af\u30e9\u30b9\u306e\u3059\u3079\u3066\u306eprotected\u30e1\u30bd\u30c3\u30c9\u3092\u30ab\u30d0\u30fc\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;private&gt;</code></td><td align="left">\u6ce8\u91c8\u4ed8\u304d\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u304c\u7279\u5b9a\u306e\u30af\u30e9\u30b9\u306e\u3059\u3079\u3066\u306eprivate\u30e1\u30bd\u30c3\u30c9\u3092\u30ab\u30d0\u30fc\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;!public&gt;</code></td><td align="left">\u6ce8\u91c8\u4ed8\u304d\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u304c\u7279\u5b9a\u306e\u30af\u30e9\u30b9\u306epublic\u3067\u306a\u3044\u3059\u3079\u3066\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u30ab\u30d0\u30fc\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;!protected&gt;</code></td><td align="left">\u6ce8\u91c8\u4ed8\u304d\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u304c\u7279\u5b9a\u306e\u30af\u30e9\u30b9\u306eprotected\u3067\u306a\u3044\u3059\u3079\u3066\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u30ab\u30d0\u30fc\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;!private&gt;</code></td><td align="left">\u6ce8\u91c8\u4ed8\u304d\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u304c\u7279\u5b9a\u306e\u30af\u30e9\u30b9\u306eprivate\u3067\u306a\u3044\u3059\u3079\u3066\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u30ab\u30d0\u30fc\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002</td></tr></table>
    2.12 -DataProviderTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@dataProvider</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u306f\u4efb\u610f\u306e\u5f15\u6570\u3092\u53d7\u3051\u5165\u308c\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u5f15\u6570\u306f\u30c7\u30fc\u30bf\u30fb\u30d7\u30ed\u30d0\u30a4\u30c0\u30fb\u30e1\u30bd\u30c3\u30c9\u306b\u3088\u308a\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002\u4f7f\u7528\u3059\u308b\u30c7\u30fc\u30bf\u30fb\u30d7\u30ed\u30d0\u30a4\u30c0\u30fb\u30e1\u30bd\u30c3\u30c9\u306f\u3001<code>@dataProvider</code>\u6ce8\u91c8\u3092\u4f7f\u7528\u3057\u3066\u6307\u5b9a\u3057\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nclass DataTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @dataProvider provider\n     */\n    public function testAdd($a, $b, $c) {\n        $this->assertEquals($c, $a + $b);\n    }\n\n    public function provider() {\n        return array(\n          array(0, 0, 0),\n          array(0, 1, 1),\n          array(1, 0, 1),\n          array(1, 1, 3)\n        );\n    }\n}\n</code></pre>
    2.13 -DependsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@depends</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>PHPUnit\u3067\u306f\u3001\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u9593\u306e\u660e\u793a\u7684\u4f9d\u5b58\u6027\u306e\u5ba3\u8a00\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u3088\u3046\u306a\u4f9d\u5b58\u6027\u306f\u3001\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u306e\u5b9f\u884c\u9806\u5e8f\u3092\u5b9a\u7fa9\u3057\u307e\u305b\u3093\u304c\u3001\u30d7\u30ed\u30c7\u30e5\u30fc\u30b5\u304c\u30c6\u30b9\u30c8\u30fb\u30d5\u30a3\u30af\u30b9\u30c1\u30e3\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u623b\u3057\u3001\u5f93\u5c5e\u3059\u308b\u30b3\u30f3\u30b7\u30e5\u30fc\u30de\u306b\u305d\u308c\u3092\u6e21\u3059\u3053\u3068\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nclass DependencyFailureTest extends PHPUnit_Framework_TestCase {\n    public function testOne() {\n        $this->assertTrue(FALSE);\n    }\n\n    /**\n     * @depends testOne\n     */\n    public function testTwo() {\n    }\n}\n</code></pre>
    2.14 -ExpectedExceptionTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedException</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u30c6\u30b9\u30c8\u5bfe\u8c61\u30b3\u30fc\u30c9\u5185\u90e8\u3067\u4f8b\u5916\u304c\u30b9\u30ed\u30fc\u3055\u308c\u308b\u304b\u3069\u3046\u304b\u3092\u30c6\u30b9\u30c8\u3059\u308b\u306b\u306f\u3001<code>@expectedException</code>\u6ce8\u91c8\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nclass ExceptionTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @expectedException InvalidArgumentException\n     */\n    public function testException() {\n    }\n}\n</code></pre>
    2.15 -ExpectedExceptionCodeTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedExceptionCode</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p><code>@expectedExceptionCode</code>\u6ce8\u91c8\u3092<code>@expectedException</code>\u3068\u7d44\u307f\u5408\u305b\u3066\u4f7f\u7528\u3059\u308b\u3068\u3001\u30b9\u30ed\u30fc\u3055\u308c\u305f\u4f8b\u5916\u306e\u30a8\u30e9\u30fc\u30fb\u30b3\u30fc\u30c9\u306b\u8868\u660e\u3092\u4f5c\u6210\u3067\u304d\u308b\u305f\u3081\u3001\u7279\u5b9a\u306e\u4f8b\u5916\u306b\u7d5e\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @expectedException     MyException\n     * @expectedExceptionCode 20\n     */\n    public function testExceptionHasErrorcode20() {\n        throw new MyException('Some Message', 20);\n    }\n}\n</code></pre>
    2.16 -ExpectedExceptionMessageTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedExceptionMessage</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p><code>@expectedExceptionMessage</code>\u6ce8\u91c8\u306e\u6a5f\u80fd\u306f\u3001\u4f8b\u5916\u306e\u30a8\u30e9\u30fc\u30fb\u30e1\u30c3\u30bb\u30fc\u30b8\u306b\u8868\u660e\u3092\u4f5c\u6210\u3067\u304d\u308b\u3068\u3044\u3046\u70b9\u3067<code>@expectedExceptionCode</code>\u3068\u4f3c\u3066\u3044\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @expectedException        MyException\n     * @expectedExceptionMessage Some Message\n     */\n    public function testExceptionHasRightMessage() {\n        throw new MyException('Some Message', 20);\n    }\n}\n</code></pre>\n<p>\u8fd4\u3055\u308c\u308b\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u90e8\u5206\u6587\u5b57\u5217\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u6e21\u3055\u308c\u305f\u7279\u5b9a\u306e\u540d\u524d\u307e\u305f\u306f\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u4f8b\u5916\u306b\u8868\u793a\u3059\u308b\u304c\u3001\u30c6\u30b9\u30c8\u5185\u306e\u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8\u5168\u90e8\u306f\u8868\u793a\u3057\u306a\u3044\u3053\u3068\u3092\u8868\u660e\u3059\u308b\u5834\u5408\u306b\u4fbf\u5229\u3067\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n     /**\n      * @expectedException        MyException\n      * @expectedExceptionMessage broken\n      */\n     public function testExceptionHasRightMessage() {\n         $param = "broken";\n         throw new MyException('Invalid parameter "'.$param.'".', 20);\n     }\n}\n</code></pre>
    2.17 -GroupTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@group</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p><code>@group</code>\u6ce8\u91c8\u3092\u4f7f\u7528\u3059\u308b\u3068\u30011\u3064\u4ee5\u4e0a\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u5c5e\u3059\u308b\u3053\u3068\u3092\u793a\u3059\u30bf\u30b0\u3092\u30c6\u30b9\u30c8\u306b\u4ed8\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @group specification\n     */\n    public function testSomething() {\n    }\n\n    /**\n     * @group regression\n     * @group bug2204\n     */\n    public function testSomethingElse() {\n    }\n}\n</code></pre>\n<p>\u5b9f\u884c\u3059\u308b\u30c6\u30b9\u30c8\u3092\u9078\u629e\u3059\u308b\u306b\u306f\u3001\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u306e\u30c6\u30b9\u30c8\u30fb\u30e9\u30f3\u30ca\u30fc\u306e<code>--group</code>\u304a\u3088\u3073<code>--exclude-group</code>\u30b9\u30a4\u30c3\u30c1\u3092\u4f7f\u7528\u3059\u308b\u304b\u3001XML\u69cb\u6210\u30d5\u30a1\u30a4\u30eb\u306e\u500b\u3005\u306e\u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002</p>
    2.18 -OutputBufferingTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@outputBuffering</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p><code>@outputBuffering</code>\u6ce8\u91c8\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001PHP\u306e\u51fa\u529b\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u5236\u5fa1\u3067\u304d\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @outputBuffering enabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    // ...\n}\n</code></pre>\n<p>\u307e\u305f\u3001<code>@outputBuffering</code>\u6ce8\u91c8\u306f\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u30fb\u30ec\u30d9\u30eb\u3067\u3082\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u51fa\u529b\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u306b\u5bfe\u3059\u308b\u30d5\u30a1\u30a4\u30f3\u30b0\u30ec\u30a4\u30f3\u5236\u5fa1\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @outputBuffering disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @outputBuffering enabled\n     */\n    public function testThatPrintsSomething() {\n        // ...\n    }\n}\n</code></pre>
    2.19 -PhpUnitAnnotationsProvider.name=PHPUnit
    2.20 -TestTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@test</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u30c6\u30b9\u30c8\u3067\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u540d\u306b\u63a5\u982d\u8f9e\u3092\u4ed8\u3051\u308b\u304b\u308f\u308a\u306b\u3001\u30e1\u30bd\u30c3\u30c9\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30fb\u30d6\u30ed\u30c3\u30af\u5185\u3067<code>@test</code>\u6ce8\u91c8\u3092\u4f7f\u7528\u3057\u3066\u305d\u308c\u3092\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u3068\u3057\u3066\u30de\u30fc\u30af\u3067\u304d\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @test\n */\npublic function initialBalanceShouldBe0() {\n    $this->assertEquals(0, $this->ba->getBalance());\n}\n</code></pre>
    2.21 +#AssertTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@assert</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u30e1\u30bd\u30c3\u30c9\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30fb\u30d6\u30ed\u30c3\u30af\u5185\u3067<code>@assert</code>\u6ce8\u91c8\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u30b9\u30b1\u30eb\u30c8\u30f3\u30fb\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u306e\u4f7f\u7528\u6642\u306b\u4e0d\u5b8c\u5168\u306a\u30c6\u30b9\u30c8\u30fb\u30b1\u30fc\u30b9\u3067\u306f\u306a\u304f\u5358\u7d14\u304b\u3064\u6709\u610f\u7fa9\u306a\u30c6\u30b9\u30c8\u3092\u81ea\u52d5\u751f\u6210\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @assert (0, 0) == 0\n */\npublic function add($a, $b) {\n    return $a + $b;\n}\n</code></pre>\n<p>\u3053\u308c\u3089\u306e\u6ce8\u91c8\u306f\u3001\u6b21\u306e\u3088\u3046\u306a\u30c6\u30b9\u30c8\u30fb\u30b3\u30fc\u30c9\u306b\u5909\u63db\u3055\u308c\u307e\u3059</p>\n<pre><code>\n/**\n * Generated from @assert (0, 0) == 0.\n */\npublic function testAdd() {\n    $o = new Calculator;\n    $this->assertEquals(0, $o->add(0, 0));\n}\n</code></pre>
    2.22 +#BackupGlobalsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@backupGlobals</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u30c6\u30b9\u30c8\u30fb\u30b1\u30fc\u30b9\u30fb\u30af\u30e9\u30b9\u306e\u3059\u3079\u3066\u306e\u30c6\u30b9\u30c8\u306b\u5bfe\u3057\u3066\u3001\u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u64cd\u4f5c\u304a\u3088\u3073\u5fa9\u5143\u64cd\u4f5c\u3092\u5b8c\u5168\u306b\u7121\u52b9\u306b\u3067\u304d\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @backupGlobals disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n\    // ...\n}\n</code></pre>\n<p>\u307e\u305f\u3001<code>@backupGlobals</code>\u6ce8\u91c8\u306f\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u30fb\u30ec\u30d9\u30eb\u3067\u3082\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u64cd\u4f5c\u304a\u3088\u3073\u5fa9\u5143\u64cd\u4f5c\u306e\u30d5\u30a1\u30a4\u30f3\u30b0\u30ec\u30a4\u30f3\u69cb\u6210\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre></code>\n/**\n * @backupGlobals disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @backupGlobals enabled\n     */\n    public function testThatInteractsWithGlobalVariables() {\n        // ...\n    }\n}\n</code></pre>
    2.23 +#BackupStaticAttributesTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@backupStaticAttributes</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u30c6\u30b9\u30c8\u30fb\u30b1\u30fc\u30b9\u30fb\u30af\u30e9\u30b9\u306e\u3059\u3079\u3066\u306e\u30c6\u30b9\u30c8\u306b\u5bfe\u3057\u3066\u3001\u30af\u30e9\u30b9\u306e\u9759\u7684\u5c5e\u6027\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u64cd\u4f5c\u304a\u3088\u3073\u30ea\u30b9\u30c8\u30a2\u64cd\u4f5c\u3092\u5b8c\u5168\u306b\u7121\u52b9\u306b\u3067\u304d\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @backupStaticAttributes disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    // ...\n}\n</code></pre>\n<p><code>@backupStaticAttributes</code>\u6ce8\u91c8\u306f\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u30fb\u30ec\u30d9\u30eb\u3067\u3082\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u64cd\u4f5c\u304a\u3088\u3073\u5fa9\u5143\u64cd\u4f5c\u306e\u30d5\u30a1\u30a4\u30f3\u30b0\u30ec\u30a4\u30f3\u69cb\u6210\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @backupStaticAttributes disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @backupStaticAttributes enabled\n     */\n    public function testThatInteractsWithStaticAttributes() {\n        // ...\n    }\n}\n</code></pre>
    2.24 +#CodeCoverageIgnoreTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@codeCoverageIgnore</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p><code>@codeCoverageIgnore</code>\u6ce8\u91c8\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u30ab\u30d0\u30ec\u30fc\u30b8\u5206\u6790\u304b\u3089\u30b3\u30fc\u30c9\u884c\u3092\u9664\u5916\u3067\u304d\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @codeCoverageIgnore\n */\nclass Foo {\n    public function bar() {\n    }\n}\n\nclass Bar {\n    /**\n     * @codeCoverageIgnore\n     */\n    public function foo() {\n    }\n}\n</code></pre>
    2.25 +#CoversTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@covers</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p><code>@covers</code>\u6ce8\u91c8\u3092\u30c6\u30b9\u30c8\u30fb\u30b3\u30fc\u30c9\u5185\u3067\u4f7f\u7528\u3059\u308b\u3068\u3001\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u306b\u3088\u308a\u30c6\u30b9\u30c8\u3059\u308b\u30e1\u30bd\u30c3\u30c9\u3092\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @covers BankAccount::getBalance\n */\npublic function testBalanceIsInitiallyZero() {\n    $this->assertEquals(0, $this->ba->getBalance());\n}\n</code></pre>\n<p>\u6307\u5b9a\u3057\u305f\u5834\u5408\u3001\u6307\u5b9a\u3057\u305f\u30e1\u30bd\u30c3\u30c9\u306e\u30b3\u30fc\u30c9\u30fb\u30ab\u30d0\u30ec\u30fc\u30b8\u60c5\u5831\u306e\u307f\u304c\u8003\u616e\u3055\u308c\u307e\u3059\u3002</p>\n<table border="0"><tr><th align="left">\u6ce8\u91c8</th><th align="left">\u8aac\u660e</th></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::methodName</code></td><td align="left">\u6ce8\u91c8\u4ed8\u304d\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u304c\u6307\u5b9a\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u30ab\u30d0\u30fc\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName</code></td><td align="left">\u6ce8\u91c8\u4ed8\u304d\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u304c\u7279\u5b9a\u306e\u30af\u30e9\u30b9\u306e\u3059\u3079\u3066\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u30ab\u30d0\u30fc\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName&lt;extended&gt;</code></td><td align="left" valign="top">\u6ce8\u91c8\u4ed8\u304d\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u304c\u7279\u5b9a\u306e\u30af\u30e9\u30b9\u306e\u3059\u3079\u3066\u306e\u30e1\u30bd\u30c3\u30c9\u304a\u3088\u3073\u305d\u306e\u89aa\u30af\u30e9\u30b9\u3068\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u30ab\u30d0\u30fc\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;public&gt;</code></td><td align="left">\u6ce8\u91c8\u4ed8\u304d\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u304c\u7279\u5b9a\u306e\u30af\u30e9\u30b9\u306e\u3059\u3079\u3066\u306epublic\u30e1\u30bd\u30c3\u30c9\u3092\u30ab\u30d0\u30fc\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;protected&gt;</code></td><td align="left">\u6ce8\u91c8\u4ed8\u304d\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u304c\u7279\u5b9a\u306e\u30af\u30e9\u30b9\u306e\u3059\u3079\u3066\u306eprotected\u30e1\u30bd\u30c3\u30c9\u3092\u30ab\u30d0\u30fc\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;private&gt;</code></td><td align="left">\u6ce8\u91c8\u4ed8\u304d\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u304c\u7279\u5b9a\u306e\u30af\u30e9\u30b9\u306e\u3059\u3079\u3066\u306eprivate\u30e1\u30bd\u30c3\u30c9\u3092\u30ab\u30d0\u30fc\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;!public&gt;</code></td><td align="left">\u6ce8\u91c8\u4ed8\u304d\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u304c\u7279\u5b9a\u306e\u30af\u30e9\u30b9\u306epublic\u3067\u306a\u3044\u3059\u3079\u3066\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u30ab\u30d0\u30fc\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;!protected&gt;</code></td><td align="left">\u6ce8\u91c8\u4ed8\u304d\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u304c\u7279\u5b9a\u306e\u30af\u30e9\u30b9\u306eprotected\u3067\u306a\u3044\u3059\u3079\u3066\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u30ab\u30d0\u30fc\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;!private&gt;</code></td><td align="left">\u6ce8\u91c8\u4ed8\u304d\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u304c\u7279\u5b9a\u306e\u30af\u30e9\u30b9\u306eprivate\u3067\u306a\u3044\u3059\u3079\u3066\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u30ab\u30d0\u30fc\u3059\u308b\u3053\u3068\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002</td></tr></table>
    2.26 +#DataProviderTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@dataProvider</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u306f\u4efb\u610f\u306e\u5f15\u6570\u3092\u53d7\u3051\u5165\u308c\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u5f15\u6570\u306f\u30c7\u30fc\u30bf\u30fb\u30d7\u30ed\u30d0\u30a4\u30c0\u30fb\u30e1\u30bd\u30c3\u30c9\u306b\u3088\u308a\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002\u4f7f\u7528\u3059\u308b\u30c7\u30fc\u30bf\u30fb\u30d7\u30ed\u30d0\u30a4\u30c0\u30fb\u30e1\u30bd\u30c3\u30c9\u306f\u3001<code>@dataProvider</code>\u6ce8\u91c8\u3092\u4f7f\u7528\u3057\u3066\u6307\u5b9a\u3057\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nclass DataTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @dataProvider provider\n     */\n    public function testAdd($a, $b, $c) {\n        $this->assertEquals($c, $a + $b);\n    }\n\n    public function provider() {\n        return array(\n          array(0, 0, 0),\n          array(0, 1, 1),\n          array(1, 0, 1),\n          array(1, 1, 3)\n        );\n    }\n}\n</code></pre>
    2.27 +#DependsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@depends</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>PHPUnit\u3067\u306f\u3001\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u9593\u306e\u660e\u793a\u7684\u4f9d\u5b58\u6027\u306e\u5ba3\u8a00\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u3088\u3046\u306a\u4f9d\u5b58\u6027\u306f\u3001\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u306e\u5b9f\u884c\u9806\u5e8f\u3092\u5b9a\u7fa9\u3057\u307e\u305b\u3093\u304c\u3001\u30d7\u30ed\u30c7\u30e5\u30fc\u30b5\u304c\u30c6\u30b9\u30c8\u30fb\u30d5\u30a3\u30af\u30b9\u30c1\u30e3\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u623b\u3057\u3001\u5f93\u5c5e\u3059\u308b\u30b3\u30f3\u30b7\u30e5\u30fc\u30de\u306b\u305d\u308c\u3092\u6e21\u3059\u3053\u3068\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nclass DependencyFailureTest extends PHPUnit_Framework_TestCase {\n    public function testOne() {\n        $this->assertTrue(FALSE);\n    }\n\n    /**\n     * @depends testOne\n     */\n    public function testTwo() {\n    }\n}\n</code></pre>
    2.28 +#ExpectedExceptionTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedException</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u30c6\u30b9\u30c8\u5bfe\u8c61\u30b3\u30fc\u30c9\u5185\u90e8\u3067\u4f8b\u5916\u304c\u30b9\u30ed\u30fc\u3055\u308c\u308b\u304b\u3069\u3046\u304b\u3092\u30c6\u30b9\u30c8\u3059\u308b\u306b\u306f\u3001<code>@expectedException</code>\u6ce8\u91c8\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nclass ExceptionTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @expectedException InvalidArgumentException\n     */\n    public function testException() {\n    }\n}\n</code></pre>
    2.29 +#ExpectedExceptionCodeTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedExceptionCode</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p><code>@expectedExceptionCode</code>\u6ce8\u91c8\u3092<code>@expectedException</code>\u3068\u7d44\u307f\u5408\u305b\u3066\u4f7f\u7528\u3059\u308b\u3068\u3001\u30b9\u30ed\u30fc\u3055\u308c\u305f\u4f8b\u5916\u306e\u30a8\u30e9\u30fc\u30fb\u30b3\u30fc\u30c9\u306b\u8868\u660e\u3092\u4f5c\u6210\u3067\u304d\u308b\u305f\u3081\u3001\u7279\u5b9a\u306e\u4f8b\u5916\u306b\u7d5e\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @expectedException     MyException\n     * @expectedExceptionCode 20\n     */\n    public function testExceptionHasErrorcode20() {\n        throw new MyException('Some Message', 20);\n    }\n}\n</code></pre>
    2.30 +#ExpectedExceptionMessageTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedExceptionMessage</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p><code>@expectedExceptionMessage</code>\u6ce8\u91c8\u306e\u6a5f\u80fd\u306f\u3001\u4f8b\u5916\u306e\u30a8\u30e9\u30fc\u30fb\u30e1\u30c3\u30bb\u30fc\u30b8\u306b\u8868\u660e\u3092\u4f5c\u6210\u3067\u304d\u308b\u3068\u3044\u3046\u70b9\u3067<code>@expectedExceptionCode</code>\u3068\u4f3c\u3066\u3044\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @expectedException        MyException\n     * @expectedExceptionMessage Some Message\n     */\n    public function testExceptionHasRightMessage() {\n        throw new MyException('Some Message', 20);\n    }\n}\n</code></pre>\n<p>\u8fd4\u3055\u308c\u308b\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u90e8\u5206\u6587\u5b57\u5217\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u6e21\u3055\u308c\u305f\u7279\u5b9a\u306e\u540d\u524d\u307e\u305f\u306f\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u4f8b\u5916\u306b\u8868\u793a\u3059\u308b\u304c\u3001\u30c6\u30b9\u30c8\u5185\u306e\u4f8b\u5916\u30e1\u30c3\u30bb\u30fc\u30b8\u5168\u90e8\u306f\u8868\u793a\u3057\u306a\u3044\u3053\u3068\u3092\u8868\u660e\u3059\u308b\u5834\u5408\u306b\u4fbf\u5229\u3067\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n     /**\n      * @expectedException        MyException\n      * @expectedExceptionMessage broken\n      */\n     public function testExceptionHasRightMessage() {\n         $param = "broken";\n         throw new MyException('Invalid parameter "'.$param.'".', 20);\n     }\n}\n</code></pre>
    2.31 +#GroupTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@group</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p><code>@group</code>\u6ce8\u91c8\u3092\u4f7f\u7528\u3059\u308b\u3068\u30011\u3064\u4ee5\u4e0a\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u5c5e\u3059\u308b\u3053\u3068\u3092\u793a\u3059\u30bf\u30b0\u3092\u30c6\u30b9\u30c8\u306b\u4ed8\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @group specification\n     */\n    public function testSomething() {\n    }\n\n    /**\n     * @group regression\n     * @group bug2204\n     */\n    public function testSomethingElse() {\n    }\n}\n</code></pre>\n<p>\u5b9f\u884c\u3059\u308b\u30c6\u30b9\u30c8\u3092\u9078\u629e\u3059\u308b\u306b\u306f\u3001\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u306e\u30c6\u30b9\u30c8\u30fb\u30e9\u30f3\u30ca\u30fc\u306e<code>--group</code>\u304a\u3088\u3073<code>--exclude-group</code>\u30b9\u30a4\u30c3\u30c1\u3092\u4f7f\u7528\u3059\u308b\u304b\u3001XML\u69cb\u6210\u30d5\u30a1\u30a4\u30eb\u306e\u500b\u3005\u306e\u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002</p>
    2.32 +#OutputBufferingTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@outputBuffering</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p><code>@outputBuffering</code>\u6ce8\u91c8\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001PHP\u306e\u51fa\u529b\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u5236\u5fa1\u3067\u304d\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @outputBuffering enabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    // ...\n}\n</code></pre>\n<p>\u307e\u305f\u3001<code>@outputBuffering</code>\u6ce8\u91c8\u306f\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u30fb\u30ec\u30d9\u30eb\u3067\u3082\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u51fa\u529b\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u306b\u5bfe\u3059\u308b\u30d5\u30a1\u30a4\u30f3\u30b0\u30ec\u30a4\u30f3\u5236\u5fa1\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @outputBuffering disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @outputBuffering enabled\n     */\n    public function testThatPrintsSomething() {\n        // ...\n    }\n}\n</code></pre>
    2.33 +#PhpUnitAnnotationsProvider.name=PHPUnit
    2.34 +#TestTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@test</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u30c6\u30b9\u30c8\u3067\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u540d\u306b\u63a5\u982d\u8f9e\u3092\u4ed8\u3051\u308b\u304b\u308f\u308a\u306b\u3001\u30e1\u30bd\u30c3\u30c9\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30fb\u30d6\u30ed\u30c3\u30af\u5185\u3067<code>@test</code>\u6ce8\u91c8\u3092\u4f7f\u7528\u3057\u3066\u305d\u308c\u3092\u30c6\u30b9\u30c8\u30fb\u30e1\u30bd\u30c3\u30c9\u3068\u3057\u3066\u30de\u30fc\u30af\u3067\u304d\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @test\n */\npublic function initialBalanceShouldBe0() {\n    $this->assertEquals(0, $this->ba->getBalance());\n}\n</code></pre>
    2.35  
     3.1 --- a/src/ja/php/php-project/php-project/org/netbeans/modules/php/project/ui/options/Bundle_ja.properties	Tue Nov 20 16:21:50 2012 +0900
     3.2 +++ b/src/ja/php/php-project/php-project/org/netbeans/modules/php/project/ui/options/Bundle_ja.properties	Sat Dec 08 17:09:53 2012 +0900
     3.3 @@ -204,5 +204,5 @@
     3.4  PhpAnnotationsPanel.noteLabel.text=<html><i>\u6ce8:</i></html>
     3.5  PhpAnnotationsPanel.infoLabel.text=\u3053\u308c\u3089\u306e\u6ce8\u91c8\u306f\u30b3\u30fc\u30c9\u88dc\u5b8c\u3067\u4f7f\u7528\u53ef\u80fd\u3067\u3059\u3002
     3.6  ## sample annotation
     3.7 -SampleTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@sample</p>\n<p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p>\n<p>\u3053\u306e<code>@sample</code>\u6ce8\u91c8\u306f\u3001\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u6b63\u3057\u3044\u8a18\u8ff0\u65b9\u6cd5\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p>\n<pre><code>\n/**\n * @sample(param1, param2 = value1)\n */\npublic function test($a, $b) {\n    return $a + $b;\n}\n</code></pre>\n
     3.8 +#SampleTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@sample</p>\n<p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p>\n<p>\u3053\u306e<code>@sample</code>\u6ce8\u91c8\u306f\u3001\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u6b63\u3057\u3044\u8a18\u8ff0\u65b9\u6cd5\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u4f8b</p>\n<pre><code>\n/**\n * @sample(param1, param2 = value1)\n */\npublic function test($a, $b) {\n    return $a + $b;\n}\n</code></pre>\n
     3.9  
     4.1 --- a/src/ja/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/extra/Bundle_ja.properties	Tue Nov 20 16:21:50 2012 +0900
     4.2 +++ b/src/ja/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/extra/Bundle_ja.properties	Sat Dec 08 17:09:53 2012 +0900
     4.3 @@ -38,10 +38,10 @@
     4.4  #
     4.5  # Portions Copyrighted 2012 Sun Microsystems, Inc.
     4.6  
     4.7 -RouteTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Route</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p><code>@Route</code>\u6ce8\u91c8\u306f\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3092\u4f7f\u7528\u3057\u3066\u30eb\u30fc\u30c8\u30fb\u30d1\u30bf\u30fc\u30f3\u3092\u30de\u30c3\u30d7\u3057\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\n\nclass PostController extends Controller {\n    /**\n     * @Route("/")\n     */\n    public function indexAction() {\n        // ...\n    }\n}\n</code></pre>\n<p><code>Post</code>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306e<code>index</code>\u30a2\u30af\u30b7\u30e7\u30f3\u304c<code>/</code> URL\u306b\u30de\u30c3\u30d7\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u6b21\u306eYAML\u69cb\u6210\u306b\u76f8\u5f53\u3057\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nblog_home:\n    pattern:  /\n    defaults: { _controller: SensioBlogBundle:Post:index }\n</code></pre>\n<p>\u30eb\u30fc\u30c8\u30fb\u30d1\u30bf\u30fc\u30f3\u3068\u540c\u69d8\u306b\u3001\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u3001\u8981\u4ef6\u304a\u3088\u3073\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @Route("/{id}", requirements={"id" = "d+"}, defaults={"foo" = "bar"})\n */\npublic function showAction($id) {\n}\n</code></pre>\n<p>\u8ffd\u52a0\u306e<code>@Route</code>\u6ce8\u91c8\u3092\u5b9a\u7fa9\u3057\u3066\u3001\u8907\u6570\u306eURL\u3092\u4e00\u81f4\u3055\u305b\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @Route("/", defaults={"id" = 1})\n * @Route("/{id}")\n */\npublic function showAction($id) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u30a2\u30af\u30c6\u30a3\u30d6\u5316</p><p>\u4ed6\u306e\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u30fb\u30ea\u30bd\u30fc\u30b9\u3068\u3057\u3066\u30a2\u30af\u30c6\u30a3\u30d6\u306b\u3059\u308b\u306b\u306f\u3001\u30eb\u30fc\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059(\u6ce8\u91c8\u578b\u306b\u6ce8\u610f)\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n# app/config/routing.yml\n\n# import routes from a controller class\npost:\n    resource: "@SensioBlogBundle/Controller/PostController.php"\n    type:     annotation\n</code></pre>\n<p>\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5168\u4f53\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n# import routes from a controller directory\nblog:\n    resource: "@SensioBlogBundle/Controller"\n    type:     annotation\n</code></pre>\n<p>\u4ed6\u306e\u30ea\u30bd\u30fc\u30b9\u306b\u3064\u3044\u3066\u306f\u3001\u6307\u5b9a\u3055\u308c\u305f\u63a5\u982d\u8f9e\u306e\u4e0b\u306b\u30eb\u30fc\u30c8\u3092\u30de\u30a6\u30f3\u30c8\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\npost:\n    resource: "@SensioBlogBundle/Controller/PostController.php"\n    prefix:   /blog\n    type:     annotation\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u30eb\u30fc\u30c8\u540d</p><p><code>@Route</code>\u6ce8\u91c8\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30eb\u30fc\u30c8\u306f\u3001\u30d0\u30f3\u30c9\u30eb\u540d\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u540d\u304a\u3088\u3073\u30a2\u30af\u30b7\u30e7\u30f3\u540d\u3067\u69cb\u6210\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u540d\u304c\u4ed8\u3051\u3089\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u524d\u8ff0\u306e\u4f8b\u3067\u306f<code>sensio_blog_post_index</code>\u306b\u306a\u308a\u307e\u3059\u3002</p><p><code>name</code>\u5c5e\u6027\u3092\u4f7f\u7528\u3057\u3066\u3001\u3053\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30eb\u30fc\u30c8\u540d\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @Route("/", name="blog_home")\n */\npublic function indexAction() {\n    // ...\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u30eb\u30fc\u30c8\u63a5\u982d\u8f9e</p><p>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fb\u30af\u30e9\u30b9\u306e<code>@Route</code>\u6ce8\u91c8\u3067\u306f\u3059\u3079\u3066\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u30fb\u30eb\u30fc\u30c8\u306e\u63a5\u982d\u8f9e\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @Route("/blog")\n */\nclass PostController extends Controller {\n    /**\n     * @Route("/{id}")\n     */\n    public function showAction($id) {\n    }\n}\n</code></pre>\n<p>\u3053\u308c\u3067<code>show</code>\u30a2\u30af\u30b7\u30e7\u30f3\u304c<code>/blog/{id}</code>\u30d1\u30bf\u30fc\u30f3\u306b\u30de\u30c3\u30d7\u3055\u308c\u307e\u3057\u305f\u3002</p>
     4.8 -MethodTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Method</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u30eb\u30fc\u30c8\u306b\u8a31\u53ef\u3055\u308c\u3066\u3044\u308bHTTP\u30e1\u30bd\u30c3\u30c9\u3092\u6307\u5b9a\u3059\u308b\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8<code>@Method</code>\u6ce8\u91c8\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001<code>Method</code>\u6ce8\u91c8\u540d\u524d\u7a7a\u9593\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationMethod;\n\n/**\n* @Route("/blog")\n*/\nclass PostController extends Controller {\n/**\n* @Route("/edit/{id}")\n* @Method({"GET", "POST"})\n*/\npublic function editAction($id) {\n}\n}\n</code></pre>\n<p>\u4f7f\u7528\u3055\u308c\u308bHTTP\u30e1\u30bd\u30c3\u30c9\u304c<code>GET</code>\u307e\u305f\u306f<code>POST</code>\u3067\u3042\u308b\u5834\u5408\u3001<code>edit</code>\u30a2\u30af\u30b7\u30e7\u30f3\u306f<code>/blog/edit/{id}</code>\u30d1\u30bf\u30fc\u30f3\u306b\u30de\u30c3\u30d7\u3055\u308c\u307e\u3059\u3002</p><p><code>@Method</code>\u6ce8\u91c8\u306f\u3001\u30a2\u30af\u30b7\u30e7\u30f3\u306b<code>@Route</code>\u3067\u6ce8\u91c8\u304c\u4ed8\u3051\u3089\u308c\u308b\u5834\u5408\u306b\u306e\u307f\u8003\u616e\u3055\u308c\u307e\u3059\u3002</p>
     4.9 -ParamConverterTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@ParamConverter</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p><code>@ParamConverter</code>\u6ce8\u91c8\u306f\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u30fb\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5909\u63db\u3059\u308b<i>converters</i>\u3092\u30b3\u30fc\u30eb\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u30ea\u30af\u30a8\u30b9\u30c8\u5c5e\u6027\u3068\u3057\u3066\u683c\u7d0d\u3055\u308c\u308b\u305f\u3081\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fb\u30e1\u30bd\u30c3\u30c9\u5f15\u6570\u3068\u3057\u3066\u6ce8\u5165\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationParamConverter;\n\n/**\n * @Route("/blog/{id}")\n * @ParamConverter("post", class="SensioBlogBundle:Post")\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>\u5185\u90e8\u7684\u306b\u6b21\u306e\u8907\u6570\u306e\u3053\u3068\u304c\u767a\u751f\u3057\u307e\u3059:</p><ul><li>\u30b3\u30f3\u30d0\u30fc\u30bf\u306f<code>SensioBlogBundle:Post</code>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30ea\u30af\u30a8\u30b9\u30c8\u5c5e\u6027\u304b\u3089\u53d6\u5f97\u3057\u3088\u3046\u3068\u3057\u307e\u3059(\u30ea\u30af\u30a8\u30b9\u30c8\u5c5e\u6027\u306f\u30eb\u30fc\u30c8\u30fb\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u304b\u3089\u306e\u3082\u306e\u3067\u3059 -- \u3053\u3053\u3067\u306f<code>id</code>)\u3002</li><li><code>Post</code>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u3001<code>404</code> <code>Response</code>\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002</li><li><code>Post</code>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u898b\u3064\u304b\u3063\u305f\u5834\u5408\u3001\u65b0\u898f<code>post</code>\u30ea\u30af\u30a8\u30b9\u30c8\u5c5e\u6027\u304c\u5b9a\u7fa9\u3055\u308c\u307e\u3059(<code>$request->attributes->get('post')</code>\u7d4c\u7531\u3067\u30a2\u30af\u30bb\u30b9\u53ef\u80fd)\u3002</li><li>\u4ed6\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u5c5e\u6027\u306b\u3064\u3044\u3066\u306f\u3001\u30e1\u30bd\u30c3\u30c9\u7f72\u540d\u306b\u5b58\u5728\u3059\u308b\u3068\u304d\u306f\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306b\u81ea\u52d5\u7684\u306b\u6ce8\u5165\u3055\u308c\u307e\u3059\u3002</li></ul><p>\u524d\u8ff0\u306e\u4f8b\u306e\u3088\u3046\u306b\u30bf\u30a4\u30d7\u30fb\u30d2\u30f3\u30c6\u30a3\u30f3\u30b0\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f\u3001<code>@ParamConverter</code>\u6ce8\u91c8\u3092\u307e\u3068\u3081\u3066\u7701\u7565\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n// automatic with method signature\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u7d44\u8fbc\u307f\u30b3\u30f3\u30d0\u30fc\u30bf</p><p>\u30d0\u30f3\u30c9\u30eb\u306b\u306f\u3001<code>Doctrine</code>\u30b3\u30f3\u30d0\u30fc\u30bf\u3068\u3044\u3046\u7d44\u8fbc\u307f\u30b3\u30f3\u30d0\u30fc\u30bf\u304c1\u3064\u306e\u307f\u3042\u308a\u307e\u3059\u3002</p><p><b><code>Doctrine</code>\u30b3\u30f3\u30d0\u30fc\u30bf</b></p><p>\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001<code>Doctrine</code>\u30b3\u30f3\u30d0\u30fc\u30bf\u3067\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u30fb\u30de\u30cd\u30fc\u30b8\u30e3\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f<code>entity_manager</code>\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u69cb\u6210\u3055\u308c\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationParamConverter;\n\n/**\n * @Route("/blog/{id}")\n * @ParamConverter("post", class="SensioBlogBundle:Post", options={"entity_manager" = "foo"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u30b3\u30f3\u30d0\u30fc\u30bf\u306e\u4f5c\u6210</p><p>\u3059\u3079\u3066\u306e\u30b3\u30f3\u30d0\u30fc\u30bf\u306f<code>ParamConverterInterface</code>\u3092\u5b9f\u88c5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nnamespace SensioBundleFrameworkExtraBundleRequestParamConverter;\n\nuse SensioBundleFrameworkExtraBundleConfigurationConfigurationInterface;\nuse SymfonyComponentHttpFoundationRequest;\n\ninterface ParamConverterInterface {\n    function apply(Request $request, ConfigurationInterface $configuration);\n\n    function supports(ConfigurationInterface $configuration);\n}\n</code></pre>\n<p><code>supports()</code>\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u7279\u5b9a\u306e\u69cb\u6210(<code>ParamConverter</code>\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9)\u3092\u5909\u63db\u3067\u304d\u308b\u3068\u304d\u306f<code>true</code>\u3092\u8fd4\u3059\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002</p><p><code>ParamConverter</code>\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u306f\u3001\u6ce8\u91c8\u306b\u95a2\u3059\u308b3\u3064\u306e\u60c5\u5831\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059:</p><table border="0"><tr><td valign="top"><b><code>name</code></b></td><td>\u5c5e\u6027\u540d\u3002</td></tr><tr><td valign="top"><b><code>class</code></b></td><td>\u5c5e\u6027\u30af\u30e9\u30b9\u540d(\u30af\u30e9\u30b9\u540d\u3092\u8868\u3059\u4efb\u610f\u306e\u6587\u5b57\u5217\u306b\u3067\u304d\u307e\u3059)\u3002</td></tr><tr><td valign="top"><b><code>options</code></b></td><td>\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u914d\u5217\u3002</td></tr></table>\n<p><code>apply()</code>\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u69cb\u6210\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3044\u3064\u3067\u3082\u30b3\u30fc\u30eb\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u5c5e\u6027\u306b\u57fa\u3065\u304d\u3001\u30af\u30e9\u30b9<code>$configuration->getClass()</code>\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4fdd\u5b58\u3059\u308b<code>$configuration->getName()</code>\u3068\u3044\u3046\u540d\u524d\u306e\u5c5e\u6027\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002</p>
    4.10 +#RouteTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Route</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p><code>@Route</code>\u6ce8\u91c8\u306f\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3092\u4f7f\u7528\u3057\u3066\u30eb\u30fc\u30c8\u30fb\u30d1\u30bf\u30fc\u30f3\u3092\u30de\u30c3\u30d7\u3057\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\n\nclass PostController extends Controller {\n    /**\n     * @Route("/")\n     */\n    public function indexAction() {\n        // ...\n    }\n}\n</code></pre>\n<p><code>Post</code>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306e<code>index</code>\u30a2\u30af\u30b7\u30e7\u30f3\u304c<code>/</code> URL\u306b\u30de\u30c3\u30d7\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u6b21\u306eYAML\u69cb\u6210\u306b\u76f8\u5f53\u3057\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nblog_home:\n    pattern:  /\n    defaults: { _controller: SensioBlogBundle:Post:index }\n</code></pre>\n<p>\u30eb\u30fc\u30c8\u30fb\u30d1\u30bf\u30fc\u30f3\u3068\u540c\u69d8\u306b\u3001\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u3001\u8981\u4ef6\u304a\u3088\u3073\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @Route("/{id}", requirements={"id" = "d+"}, defaults={"foo" = "bar"})\n */\npublic function showAction($id) {\n}\n</code></pre>\n<p>\u8ffd\u52a0\u306e<code>@Route</code>\u6ce8\u91c8\u3092\u5b9a\u7fa9\u3057\u3066\u3001\u8907\u6570\u306eURL\u3092\u4e00\u81f4\u3055\u305b\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @Route("/", defaults={"id" = 1})\n * @Route("/{id}")\n */\npublic function showAction($id) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u30a2\u30af\u30c6\u30a3\u30d6\u5316</p><p>\u4ed6\u306e\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u30fb\u30ea\u30bd\u30fc\u30b9\u3068\u3057\u3066\u30a2\u30af\u30c6\u30a3\u30d6\u306b\u3059\u308b\u306b\u306f\u3001\u30eb\u30fc\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059(\u6ce8\u91c8\u578b\u306b\u6ce8\u610f)\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n# app/config/routing.yml\n\n# import routes from a controller class\npost:\n    resource: "@SensioBlogBundle/Controller/PostController.php"\n    type:     annotation\n</code></pre>\n<p>\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5168\u4f53\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n# import routes from a controller directory\nblog:\n    resource: "@SensioBlogBundle/Controller"\n    type:     annotation\n</code></pre>\n<p>\u4ed6\u306e\u30ea\u30bd\u30fc\u30b9\u306b\u3064\u3044\u3066\u306f\u3001\u6307\u5b9a\u3055\u308c\u305f\u63a5\u982d\u8f9e\u306e\u4e0b\u306b\u30eb\u30fc\u30c8\u3092\u30de\u30a6\u30f3\u30c8\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\npost:\n    resource: "@SensioBlogBundle/Controller/PostController.php"\n    prefix:   /blog\n    type:     annotation\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u30eb\u30fc\u30c8\u540d</p><p><code>@Route</code>\u6ce8\u91c8\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30eb\u30fc\u30c8\u306f\u3001\u30d0\u30f3\u30c9\u30eb\u540d\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u540d\u304a\u3088\u3073\u30a2\u30af\u30b7\u30e7\u30f3\u540d\u3067\u69cb\u6210\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u540d\u304c\u4ed8\u3051\u3089\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u524d\u8ff0\u306e\u4f8b\u3067\u306f<code>sensio_blog_post_index</code>\u306b\u306a\u308a\u307e\u3059\u3002</p><p><code>name</code>\u5c5e\u6027\u3092\u4f7f\u7528\u3057\u3066\u3001\u3053\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30eb\u30fc\u30c8\u540d\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @Route("/", name="blog_home")\n */\npublic function indexAction() {\n    // ...\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u30eb\u30fc\u30c8\u63a5\u982d\u8f9e</p><p>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fb\u30af\u30e9\u30b9\u306e<code>@Route</code>\u6ce8\u91c8\u3067\u306f\u3059\u3079\u3066\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u30fb\u30eb\u30fc\u30c8\u306e\u63a5\u982d\u8f9e\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @Route("/blog")\n */\nclass PostController extends Controller {\n    /**\n     * @Route("/{id}")\n     */\n    public function showAction($id) {\n    }\n}\n</code></pre>\n<p>\u3053\u308c\u3067<code>show</code>\u30a2\u30af\u30b7\u30e7\u30f3\u304c<code>/blog/{id}</code>\u30d1\u30bf\u30fc\u30f3\u306b\u30de\u30c3\u30d7\u3055\u308c\u307e\u3057\u305f\u3002</p>
    4.11 +#MethodTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Method</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u30eb\u30fc\u30c8\u306b\u8a31\u53ef\u3055\u308c\u3066\u3044\u308bHTTP\u30e1\u30bd\u30c3\u30c9\u3092\u6307\u5b9a\u3059\u308b\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8<code>@Method</code>\u6ce8\u91c8\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001<code>Method</code>\u6ce8\u91c8\u540d\u524d\u7a7a\u9593\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationMethod;\n\n/**\n* @Route("/blog")\n*/\nclass PostController extends Controller {\n/**\n* @Route("/edit/{id}")\n* @Method({"GET", "POST"})\n*/\npublic function editAction($id) {\n}\n}\n</code></pre>\n<p>\u4f7f\u7528\u3055\u308c\u308bHTTP\u30e1\u30bd\u30c3\u30c9\u304c<code>GET</code>\u307e\u305f\u306f<code>POST</code>\u3067\u3042\u308b\u5834\u5408\u3001<code>edit</code>\u30a2\u30af\u30b7\u30e7\u30f3\u306f<code>/blog/edit/{id}</code>\u30d1\u30bf\u30fc\u30f3\u306b\u30de\u30c3\u30d7\u3055\u308c\u307e\u3059\u3002</p><p><code>@Method</code>\u6ce8\u91c8\u306f\u3001\u30a2\u30af\u30b7\u30e7\u30f3\u306b<code>@Route</code>\u3067\u6ce8\u91c8\u304c\u4ed8\u3051\u3089\u308c\u308b\u5834\u5408\u306b\u306e\u307f\u8003\u616e\u3055\u308c\u307e\u3059\u3002</p>
    4.12 +#ParamConverterTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@ParamConverter</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p><code>@ParamConverter</code>\u6ce8\u91c8\u306f\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u30fb\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5909\u63db\u3059\u308b<i>converters</i>\u3092\u30b3\u30fc\u30eb\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u30ea\u30af\u30a8\u30b9\u30c8\u5c5e\u6027\u3068\u3057\u3066\u683c\u7d0d\u3055\u308c\u308b\u305f\u3081\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fb\u30e1\u30bd\u30c3\u30c9\u5f15\u6570\u3068\u3057\u3066\u6ce8\u5165\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationParamConverter;\n\n/**\n * @Route("/blog/{id}")\n * @ParamConverter("post", class="SensioBlogBundle:Post")\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>\u5185\u90e8\u7684\u306b\u6b21\u306e\u8907\u6570\u306e\u3053\u3068\u304c\u767a\u751f\u3057\u307e\u3059:</p><ul><li>\u30b3\u30f3\u30d0\u30fc\u30bf\u306f<code>SensioBlogBundle:Post</code>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30ea\u30af\u30a8\u30b9\u30c8\u5c5e\u6027\u304b\u3089\u53d6\u5f97\u3057\u3088\u3046\u3068\u3057\u307e\u3059(\u30ea\u30af\u30a8\u30b9\u30c8\u5c5e\u6027\u306f\u30eb\u30fc\u30c8\u30fb\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u304b\u3089\u306e\u3082\u306e\u3067\u3059 -- \u3053\u3053\u3067\u306f<code>id</code>)\u3002</li><li><code>Post</code>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u3001<code>404</code> <code>Response</code>\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002</li><li><code>Post</code>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u898b\u3064\u304b\u3063\u305f\u5834\u5408\u3001\u65b0\u898f<code>post</code>\u30ea\u30af\u30a8\u30b9\u30c8\u5c5e\u6027\u304c\u5b9a\u7fa9\u3055\u308c\u307e\u3059(<code>$request->attributes->get('post')</code>\u7d4c\u7531\u3067\u30a2\u30af\u30bb\u30b9\u53ef\u80fd)\u3002</li><li>\u4ed6\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u5c5e\u6027\u306b\u3064\u3044\u3066\u306f\u3001\u30e1\u30bd\u30c3\u30c9\u7f72\u540d\u306b\u5b58\u5728\u3059\u308b\u3068\u304d\u306f\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306b\u81ea\u52d5\u7684\u306b\u6ce8\u5165\u3055\u308c\u307e\u3059\u3002</li></ul><p>\u524d\u8ff0\u306e\u4f8b\u306e\u3088\u3046\u306b\u30bf\u30a4\u30d7\u30fb\u30d2\u30f3\u30c6\u30a3\u30f3\u30b0\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f\u3001<code>@ParamConverter</code>\u6ce8\u91c8\u3092\u307e\u3068\u3081\u3066\u7701\u7565\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n// automatic with method signature\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u7d44\u8fbc\u307f\u30b3\u30f3\u30d0\u30fc\u30bf</p><p>\u30d0\u30f3\u30c9\u30eb\u306b\u306f\u3001<code>Doctrine</code>\u30b3\u30f3\u30d0\u30fc\u30bf\u3068\u3044\u3046\u7d44\u8fbc\u307f\u30b3\u30f3\u30d0\u30fc\u30bf\u304c1\u3064\u306e\u307f\u3042\u308a\u307e\u3059\u3002</p><p><b><code>Doctrine</code>\u30b3\u30f3\u30d0\u30fc\u30bf</b></p><p>\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001<code>Doctrine</code>\u30b3\u30f3\u30d0\u30fc\u30bf\u3067\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u30fb\u30de\u30cd\u30fc\u30b8\u30e3\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f<code>entity_manager</code>\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u69cb\u6210\u3055\u308c\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationParamConverter;\n\n/**\n * @Route("/blog/{id}")\n * @ParamConverter("post", class="SensioBlogBundle:Post", options={"entity_manager" = "foo"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u30b3\u30f3\u30d0\u30fc\u30bf\u306e\u4f5c\u6210</p><p>\u3059\u3079\u3066\u306e\u30b3\u30f3\u30d0\u30fc\u30bf\u306f<code>ParamConverterInterface</code>\u3092\u5b9f\u88c5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nnamespace SensioBundleFrameworkExtraBundleRequestParamConverter;\n\nuse SensioBundleFrameworkExtraBundleConfigurationConfigurationInterface;\nuse SymfonyComponentHttpFoundationRequest;\n\ninterface ParamConverterInterface {\n    function apply(Request $request, ConfigurationInterface $configuration);\n\n    function supports(ConfigurationInterface $configuration);\n}\n</code></pre>\n<p><code>supports()</code>\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u7279\u5b9a\u306e\u69cb\u6210(<code>ParamConverter</code>\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9)\u3092\u5909\u63db\u3067\u304d\u308b\u3068\u304d\u306f<code>true</code>\u3092\u8fd4\u3059\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002</p><p><code>ParamConverter</code>\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u306f\u3001\u6ce8\u91c8\u306b\u95a2\u3059\u308b3\u3064\u306e\u60c5\u5831\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059:</p><table border="0"><tr><td valign="top"><b><code>name</code></b></td><td>\u5c5e\u6027\u540d\u3002</td></tr><tr><td valign="top"><b><code>class</code></b></td><td>\u5c5e\u6027\u30af\u30e9\u30b9\u540d(\u30af\u30e9\u30b9\u540d\u3092\u8868\u3059\u4efb\u610f\u306e\u6587\u5b57\u5217\u306b\u3067\u304d\u307e\u3059)\u3002</td></tr><tr><td valign="top"><b><code>options</code></b></td><td>\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u914d\u5217\u3002</td></tr></table>\n<p><code>apply()</code>\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u69cb\u6210\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3044\u3064\u3067\u3082\u30b3\u30fc\u30eb\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u5c5e\u6027\u306b\u57fa\u3065\u304d\u3001\u30af\u30e9\u30b9<code>$configuration->getClass()</code>\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4fdd\u5b58\u3059\u308b<code>$configuration->getName()</code>\u3068\u3044\u3046\u540d\u524d\u306e\u5c5e\u6027\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002</p>
    4.13  Symfony2ExtraAnnotationsProvider.name=Symfony2 Extra
    4.14 -TemplateTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Template</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p><code>@Template</code>\u6ce8\u91c8\u306f\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3092\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u540d\u306b\u95a2\u9023\u4ed8\u3051\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationTemplate;\n\n/**\n * @Template("SensioBlogBundle:Post:show")\n */\npublic function showAction($id) {\n    // get the Post\n    $post = ...;\n\n    return array('post' => $post);\n}\n</code></pre>\n<p><code>@Template</code>\u6ce8\u91c8\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306f<code>Response</code>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u306f\u306a\u304f\u3001\u30d3\u30e5\u30fc\u306b\u6e21\u3059\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u914d\u5217\u3092\u8fd4\u3059\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002</p><p>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304c\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u304a\u3088\u3073\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u540d\u524d\u3092\u3068\u3063\u3066\u547d\u540d\u3055\u308c\u305f\u5834\u5408(\u524d\u8ff0\u306e\u4f8b)\u3001\u6ce8\u91c8\u5024\u3092\u7701\u7565\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @Template\n */\npublic function showAction($id) {\n    // get the Post\n    $post = ...;\n\n    return array('post' => $post);\n}\n</code></pre>\n<p>\u307e\u305f\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u6e21\u3059\u552f\u4e00\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u30e1\u30bd\u30c3\u30c9\u5f15\u6570\u3067\u3042\u308b\u5834\u5408\u3001\u914d\u5217\u3092\u8fd4\u3059\u304b\u308f\u308a\u306b<code>vars</code>\u5c5e\u6027\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f<code>@ParamConverter</code>\u6ce8\u91c8\u3068\u306e\u7d44\u5408\u305b\u3067\u975e\u5e38\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @ParamConverter("post", class="SensioBlogBundle:Post")\n * @Template("SensioBlogBundle:Post:show", vars={"post"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>\u3053\u308c\u306f\u3001\u898f\u7d04\u306b\u3088\u308a\u3001\u6b21\u306e\u69cb\u6210\u306b\u76f8\u5f53\u3057\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @Template(vars={"post"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>\u30e1\u30bd\u30c3\u30c9\u304c<code>null</code>\u3092\u8fd4\u3057\u3001<code>vars</code>\u5c5e\u6027\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u3059\u3079\u3066\u306e\u30e1\u30bd\u30c3\u30c9\u5f15\u6570\u304c\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u81ea\u52d5\u7684\u306b\u6e21\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u308c\u306f\u3055\u3089\u306b\u7c21\u6f54\u306b\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @Template\n */\npublic function showAction(Post $post) {\n}\n</code></pre>
    4.15 -CacheTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Cache</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p><code>@Cache</code>\u6ce8\u91c8\u306b\u3088\u308a\u3001HTTP\u30ad\u30e3\u30c3\u30b7\u30f3\u30b0\u306e\u5b9a\u7fa9\u304c\u5bb9\u6613\u306b\u306a\u308a\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationCache;\n\n/**\n * @Cache(expires="tomorrow")\n */\npublic function indexAction() {\n}\n</code></pre>\n<p>\u30af\u30e9\u30b9\u3067\u6ce8\u91c8\u3092\u4f7f\u7528\u3057\u3066\u3001\u3059\u3079\u3066\u306e\u30e1\u30bd\u30c3\u30c9\u306e\u30ad\u30e3\u30c3\u30b7\u30f3\u30b0\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @Cache(expires="tomorrow")\n */\nclass BlogController extends Controller {\n}\n</code></pre>\n<p>\u30af\u30e9\u30b9\u69cb\u6210\u3068\u30e1\u30bd\u30c3\u30c9\u69cb\u6210\u306e\u9593\u306b\u7af6\u5408\u304c\u3042\u308b\u5834\u5408\u3001\u30e1\u30bd\u30c3\u30c9\u69cb\u6210\u306b\u3088\u3063\u3066\u30af\u30e9\u30b9\u69cb\u6210\u304c\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3055\u308c\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @Cache(expires="tomorrow")\n */\nclass BlogController extends Controller {\n    /**\n     * @Cache(expires="+2 days")\n     */\n    public function indexAction() {\n    }\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u5c5e\u6027</p><p>\u53d7\u3051\u5165\u308c\u3089\u308c\u308b\u5c5e\u6027\u3068\u305d\u306e\u5bfe\u5fdc\u3059\u308bHTTP\u30d8\u30c3\u30c0\u30fc\u306e\u30ea\u30b9\u30c8\u3092\u793a\u3057\u307e\u3059:</p><table border="0"><tr><td><code>@Cache(expires="tomorrow")</code></td><td><code>$response->setExpires()</code></td></tr><tr><td><code>@Cache(smaxage="15")</code></td><td><code>$response->setSharedMaxAge()</code></td></tr><tr><td><code>@Cache(maxage="15")</code></td><td><code>$response->setMaxAge()</code></td></tr></table>
    4.16 +#TemplateTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Template</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p><code>@Template</code>\u6ce8\u91c8\u306f\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3092\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u540d\u306b\u95a2\u9023\u4ed8\u3051\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationTemplate;\n\n/**\n * @Template("SensioBlogBundle:Post:show")\n */\npublic function showAction($id) {\n    // get the Post\n    $post = ...;\n\n    return array('post' => $post);\n}\n</code></pre>\n<p><code>@Template</code>\u6ce8\u91c8\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306f<code>Response</code>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u306f\u306a\u304f\u3001\u30d3\u30e5\u30fc\u306b\u6e21\u3059\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u914d\u5217\u3092\u8fd4\u3059\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002</p><p>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304c\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u304a\u3088\u3073\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u540d\u524d\u3092\u3068\u3063\u3066\u547d\u540d\u3055\u308c\u305f\u5834\u5408(\u524d\u8ff0\u306e\u4f8b)\u3001\u6ce8\u91c8\u5024\u3092\u7701\u7565\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @Template\n */\npublic function showAction($id) {\n    // get the Post\n    $post = ...;\n\n    return array('post' => $post);\n}\n</code></pre>\n<p>\u307e\u305f\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u6e21\u3059\u552f\u4e00\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u30e1\u30bd\u30c3\u30c9\u5f15\u6570\u3067\u3042\u308b\u5834\u5408\u3001\u914d\u5217\u3092\u8fd4\u3059\u304b\u308f\u308a\u306b<code>vars</code>\u5c5e\u6027\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f<code>@ParamConverter</code>\u6ce8\u91c8\u3068\u306e\u7d44\u5408\u305b\u3067\u975e\u5e38\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @ParamConverter("post", class="SensioBlogBundle:Post")\n * @Template("SensioBlogBundle:Post:show", vars={"post"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>\u3053\u308c\u306f\u3001\u898f\u7d04\u306b\u3088\u308a\u3001\u6b21\u306e\u69cb\u6210\u306b\u76f8\u5f53\u3057\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @Template(vars={"post"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>\u30e1\u30bd\u30c3\u30c9\u304c<code>null</code>\u3092\u8fd4\u3057\u3001<code>vars</code>\u5c5e\u6027\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u3059\u3079\u3066\u306e\u30e1\u30bd\u30c3\u30c9\u5f15\u6570\u304c\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u81ea\u52d5\u7684\u306b\u6e21\u3055\u308c\u308b\u305f\u3081\u3001\u3053\u308c\u306f\u3055\u3089\u306b\u7c21\u6f54\u306b\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @Template\n */\npublic function showAction(Post $post) {\n}\n</code></pre>
    4.17 +#CacheTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Cache</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p><code>@Cache</code>\u6ce8\u91c8\u306b\u3088\u308a\u3001HTTP\u30ad\u30e3\u30c3\u30b7\u30f3\u30b0\u306e\u5b9a\u7fa9\u304c\u5bb9\u6613\u306b\u306a\u308a\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationCache;\n\n/**\n * @Cache(expires="tomorrow")\n */\npublic function indexAction() {\n}\n</code></pre>\n<p>\u30af\u30e9\u30b9\u3067\u6ce8\u91c8\u3092\u4f7f\u7528\u3057\u3066\u3001\u3059\u3079\u3066\u306e\u30e1\u30bd\u30c3\u30c9\u306e\u30ad\u30e3\u30c3\u30b7\u30f3\u30b0\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @Cache(expires="tomorrow")\n */\nclass BlogController extends Controller {\n}\n</code></pre>\n<p>\u30af\u30e9\u30b9\u69cb\u6210\u3068\u30e1\u30bd\u30c3\u30c9\u69cb\u6210\u306e\u9593\u306b\u7af6\u5408\u304c\u3042\u308b\u5834\u5408\u3001\u30e1\u30bd\u30c3\u30c9\u69cb\u6210\u306b\u3088\u3063\u3066\u30af\u30e9\u30b9\u69cb\u6210\u304c\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3055\u308c\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\n/**\n * @Cache(expires="tomorrow")\n */\nclass BlogController extends Controller {\n    /**\n     * @Cache(expires="+2 days")\n     */\n    public function indexAction() {\n    }\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u5c5e\u6027</p><p>\u53d7\u3051\u5165\u308c\u3089\u308c\u308b\u5c5e\u6027\u3068\u305d\u306e\u5bfe\u5fdc\u3059\u308bHTTP\u30d8\u30c3\u30c0\u30fc\u306e\u30ea\u30b9\u30c8\u3092\u793a\u3057\u307e\u3059:</p><table border="0"><tr><td><code>@Cache(expires="tomorrow")</code></td><td><code>$response->setExpires()</code></td></tr><tr><td><code>@Cache(smaxage="15")</code></td><td><code>$response->setSharedMaxAge()</code></td></tr><tr><td><code>@Cache(maxage="15")</code></td><td><code>$response->setMaxAge()</code></td></tr></table>
    4.18  
     5.1 --- a/src/ja/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/security/Bundle_ja.properties	Tue Nov 20 16:21:50 2012 +0900
     5.2 +++ b/src/ja/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/security/Bundle_ja.properties	Sat Dec 08 17:09:53 2012 +0900
     5.3 @@ -38,11 +38,11 @@
     5.4  #
     5.5  # Portions Copyrighted 2012 Sun Microsystems, Inc.
     5.6  
     5.7 -PreAuthorizeTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@PreAuthorize</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u3053\u306e\u6ce8\u91c8\u3067\u306f\u3001\u30e1\u30bd\u30c3\u30c9\u3092\u547c\u3073\u51fa\u3059\u524d\u306b\u5b9f\u884c\u3055\u308c\u308b\u5f0f\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationPreAuthorize;\n\nclass MyService {\n    /**\n     * @PreAuthorize("hasRole('A') or (hasRole('B') and hasRole('C'))")\n     */\n    public function secureMethod() {\n        // ...\n    }\n}\n</code></pre>
     5.8 -SecureTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Secure</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u3053\u306e\u6ce8\u91c8\u3067\u306f\u3001\u30e1\u30bd\u30c3\u30c9\u306e\u547c\u51fa\u3057\u304c\u8a31\u53ef\u3055\u308c\u308b\u30e6\u30fc\u30b6\u30fc\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecure;\n\nclass MyService {\n    /**\n     * @Secure(roles="ROLE_USER, ROLE_FOO, ROLE_ADMIN")\n     */\n    public function secureMethod() {\n        // ...\n    }\n}\n</code></pre>
     5.9 -SecureParamTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SecureParam</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u3053\u306e\u6ce8\u91c8\u3067\u306f\u3001\u30e1\u30bd\u30c3\u30c9\u306b\u6e21\u3055\u308c\u308b\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u5236\u9650\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u30c9\u30e1\u30a4\u30f3\u30fb\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u3042\u308b\u5834\u5408\u306b\u306e\u307f\u5f79\u7acb\u3061\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecureParam;\n\nclass MyService {\n    /**\n     * @SecureParam(name="comment", permissions="EDIT, DELETE")\n     * @SecureParam(name="post", permissions="OWNER")\n     */\n    public function secureMethod($comment, $post) {\n        // ...\n    }\n}\n</code></pre>
    5.10 -SecureReturnTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SecureReturn</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u3053\u306e\u6ce8\u91c8\u3067\u306f\u3001\u30e1\u30bd\u30c3\u30c9\u306b\u3088\u3063\u3066\u8fd4\u3055\u308c\u308b\u5024\u306e\u5236\u9650\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u3082\u8fd4\u3055\u308c\u308b\u5024\u304c\u30c9\u30e1\u30a4\u30f3\u30fb\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u3042\u308b\u5834\u5408\u306b\u306e\u307f\u5f79\u7acb\u3061\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecureReturn;\n\nclass MyService {\n    /**\n     * @SecureReturn(permissions="VIEW")\n     */\n    public function secureMethod() {\n        // ...\n\n        return $domainObject;\n    }\n}\n</code></pre>
    5.11 -RunAsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@RunAs</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u3053\u306e\u6ce8\u91c8\u3067\u306f\u3001\u30e1\u30bd\u30c3\u30c9\u547c\u51fa\u3057\u306e\u671f\u9593\u4e2d\u306b\u306e\u307f\u8ffd\u52a0\u3055\u308c\u308b\u30ed\u30fc\u30eb\u3092\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30ed\u30fc\u30eb\u306f\u3001\u547c\u51fa\u3057\u30a2\u30af\u30bb\u30b9\u6c7a\u5b9a\u306e\u524d\u5f8c\u306b\u306f\u8003\u616e\u3055\u308c\u307e\u305b\u3093\u3002</p><p>\u901a\u5e38\u3001\u3053\u308c\u306f\u30d1\u30d6\u30ea\u30c3\u30af\u30fb\u30b5\u30fc\u30d3\u30b9\u304a\u3088\u3073\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30fb\u30b5\u30fc\u30d3\u30b9\u304c\u3042\u308b2\u5c64\u30b5\u30fc\u30d3\u30b9\u30fb\u30ec\u30a4\u30e4\u30fc\u3092\u5b9f\u88c5\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u3001\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30fb\u30b5\u30fc\u30d3\u30b9\u306f\u7279\u5b9a\u306e\u30d1\u30d6\u30ea\u30c3\u30af\u30fb\u30b5\u30fc\u30d3\u30b9\u306b\u3088\u3063\u3066\u306e\u307f\u547c\u3073\u51fa\u3055\u308c\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecure;\nuse JMSSecurityExtraBundleAnnotationRunAs;\n\nclass MyPrivateService {\n    /**\n     * @Secure(roles="ROLE_PRIVATE_SERVICE")\n     */\n    public function aMethodOnlyToBeInvokedThroughASpecificChannel() {\n        // ...\n    }\n}\n\nclass MyPublicService {\n    protected $myPrivateService;\n\n    /**\n     * @Secure(roles="ROLE_USER")\n     * @RunAs(roles="ROLE_PRIVATE_SERVICE")\n     */\n    public function canBeInvokedFromOtherServices() {\n        return $this->myPrivateService->aMethodOnlyToBeInvokedThroughASpecificChannel();\n\    }\n}\n</code></pre>
    5.12 -SatisfiesParentSecurityPolicyTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SatisfiesParentSecurityPolicy</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u3053\u308c\u306f\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30fb\u30e1\u30bf\u30c7\u30fc\u30bf\u304c\u3042\u308b\u30e1\u30bd\u30c3\u30c9\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3059\u308b\u30e1\u30bd\u30c3\u30c9\u3067\u5b9a\u7fa9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u308c\u306f\u3001\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3055\u308c\u305f\u30e1\u30bd\u30c3\u30c9\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u4eca\u5f8c\u5b9f\u65bd\u3067\u304d\u306a\u3044\u3053\u3068\u3001\u304a\u3088\u3073\u6ce8\u91c8\u3092\u4fdd\u6301\u3059\u308b\u5834\u5408\u306f\u3059\u3079\u3066\u306e\u6ce8\u91c8\u3092\u30b3\u30d4\u30fc\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3053\u3068\u3092\u78ba\u5b9f\u306b\u8a8d\u8b58\u3059\u308b\u305f\u3081\u306b\u5b58\u5728\u3057\u307e\u3059\u3002</p>
    5.13 +#PreAuthorizeTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@PreAuthorize</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u3053\u306e\u6ce8\u91c8\u3067\u306f\u3001\u30e1\u30bd\u30c3\u30c9\u3092\u547c\u3073\u51fa\u3059\u524d\u306b\u5b9f\u884c\u3055\u308c\u308b\u5f0f\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationPreAuthorize;\n\nclass MyService {\n    /**\n     * @PreAuthorize("hasRole('A') or (hasRole('B') and hasRole('C'))")\n     */\n    public function secureMethod() {\n        // ...\n    }\n}\n</code></pre>
    5.14 +#SecureTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Secure</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u3053\u306e\u6ce8\u91c8\u3067\u306f\u3001\u30e1\u30bd\u30c3\u30c9\u306e\u547c\u51fa\u3057\u304c\u8a31\u53ef\u3055\u308c\u308b\u30e6\u30fc\u30b6\u30fc\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecure;\n\nclass MyService {\n    /**\n     * @Secure(roles="ROLE_USER, ROLE_FOO, ROLE_ADMIN")\n     */\n    public function secureMethod() {\n        // ...\n    }\n}\n</code></pre>
    5.15 +#SecureParamTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SecureParam</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u3053\u306e\u6ce8\u91c8\u3067\u306f\u3001\u30e1\u30bd\u30c3\u30c9\u306b\u6e21\u3055\u308c\u308b\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u5236\u9650\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306f\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u30c9\u30e1\u30a4\u30f3\u30fb\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u3042\u308b\u5834\u5408\u306b\u306e\u307f\u5f79\u7acb\u3061\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecureParam;\n\nclass MyService {\n    /**\n     * @SecureParam(name="comment", permissions="EDIT, DELETE")\n     * @SecureParam(name="post", permissions="OWNER")\n     */\n    public function secureMethod($comment, $post) {\n        // ...\n    }\n}\n</code></pre>
    5.16 +#SecureReturnTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SecureReturn</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u3053\u306e\u6ce8\u91c8\u3067\u306f\u3001\u30e1\u30bd\u30c3\u30c9\u306b\u3088\u3063\u3066\u8fd4\u3055\u308c\u308b\u5024\u306e\u5236\u9650\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u3082\u8fd4\u3055\u308c\u308b\u5024\u304c\u30c9\u30e1\u30a4\u30f3\u30fb\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u3042\u308b\u5834\u5408\u306b\u306e\u307f\u5f79\u7acb\u3061\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecureReturn;\n\nclass MyService {\n    /**\n     * @SecureReturn(permissions="VIEW")\n     */\n    public function secureMethod() {\n        // ...\n\n        return $domainObject;\n    }\n}\n</code></pre>
    5.17 +#RunAsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@RunAs</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u3053\u306e\u6ce8\u91c8\u3067\u306f\u3001\u30e1\u30bd\u30c3\u30c9\u547c\u51fa\u3057\u306e\u671f\u9593\u4e2d\u306b\u306e\u307f\u8ffd\u52a0\u3055\u308c\u308b\u30ed\u30fc\u30eb\u3092\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30ed\u30fc\u30eb\u306f\u3001\u547c\u51fa\u3057\u30a2\u30af\u30bb\u30b9\u6c7a\u5b9a\u306e\u524d\u5f8c\u306b\u306f\u8003\u616e\u3055\u308c\u307e\u305b\u3093\u3002</p><p>\u901a\u5e38\u3001\u3053\u308c\u306f\u30d1\u30d6\u30ea\u30c3\u30af\u30fb\u30b5\u30fc\u30d3\u30b9\u304a\u3088\u3073\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30fb\u30b5\u30fc\u30d3\u30b9\u304c\u3042\u308b2\u5c64\u30b5\u30fc\u30d3\u30b9\u30fb\u30ec\u30a4\u30e4\u30fc\u3092\u5b9f\u88c5\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u3001\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30fb\u30b5\u30fc\u30d3\u30b9\u306f\u7279\u5b9a\u306e\u30d1\u30d6\u30ea\u30c3\u30af\u30fb\u30b5\u30fc\u30d3\u30b9\u306b\u3088\u3063\u3066\u306e\u307f\u547c\u3073\u51fa\u3055\u308c\u307e\u3059\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u4f8b</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecure;\nuse JMSSecurityExtraBundleAnnotationRunAs;\n\nclass MyPrivateService {\n    /**\n     * @Secure(roles="ROLE_PRIVATE_SERVICE")\n     */\n    public function aMethodOnlyToBeInvokedThroughASpecificChannel() {\n        // ...\n    }\n}\n\nclass MyPublicService {\n    protected $myPrivateService;\n\n    /**\n     * @Secure(roles="ROLE_USER")\n     * @RunAs(roles="ROLE_PRIVATE_SERVICE")\n     */\n    public function canBeInvokedFromOtherServices() {\n        return $this->myPrivateService->aMethodOnlyToBeInvokedThroughASpecificChannel();\n\    }\n}\n</code></pre>
    5.18 +#SatisfiesParentSecurityPolicyTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SatisfiesParentSecurityPolicy</p><p style="font-weight: bold; font-size: 1.1em">\u8aac\u660e</p><p>\u3053\u308c\u306f\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30fb\u30e1\u30bf\u30c7\u30fc\u30bf\u304c\u3042\u308b\u30e1\u30bd\u30c3\u30c9\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3059\u308b\u30e1\u30bd\u30c3\u30c9\u3067\u5b9a\u7fa9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u308c\u306f\u3001\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3055\u308c\u305f\u30e1\u30bd\u30c3\u30c9\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u4eca\u5f8c\u5b9f\u65bd\u3067\u304d\u306a\u3044\u3053\u3068\u3001\u304a\u3088\u3073\u6ce8\u91c8\u3092\u4fdd\u6301\u3059\u308b\u5834\u5408\u306f\u3059\u3079\u3066\u306e\u6ce8\u91c8\u3092\u30b3\u30d4\u30fc\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3053\u3068\u3092\u78ba\u5b9f\u306b\u8a8d\u8b58\u3059\u308b\u305f\u3081\u306b\u5b58\u5728\u3057\u307e\u3059\u3002</p>
    5.19  Symfony2SecurityAnnotationsProvider.name=Symfony2\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3
    5.20  
     6.1 --- a/src/ja/webcommon/web-clientproject/web-clientproject/org/netbeans/modules/web/clientproject/sites/Bundle_ja.properties	Tue Nov 20 16:21:50 2012 +0900
     6.2 +++ b/src/ja/webcommon/web-clientproject/web-clientproject/org/netbeans/modules/web/clientproject/sites/Bundle_ja.properties	Sat Dec 08 17:09:53 2012 +0900
     6.3 @@ -38,31 +38,31 @@
     6.4  #
     6.5  # Portions Copyrighted 2012 Sun Microsystems, Inc.
     6.6  
     6.7 -BootstrapSiteInitializr.name=Initializr: \u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7
     6.8 +#BootstrapSiteInitializr.name=Initializr: \u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7
     6.9  ClassicSiteInitializr.name=Initializr: \u30af\u30e9\u30b7\u30c3\u30af
    6.10  LBL_SiteZipPanel_Select=\u9078\u629e
    6.11  LBL_SiteZipPanel_Title=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30fb\u30a2\u30fc\u30ab\u30a4\u30d6\u30fb\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e
    6.12 -ResponsiveSiteInitializr.name=Initializr: \u30ec\u30b9\u30dd\u30f3\u30b7\u30d6
    6.13 +#ResponsiveSiteInitializr.name=Initializr: \u30ec\u30b9\u30dd\u30f3\u30b7\u30d6
    6.14  SiteAngularJsSeed.description=AngularJS\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7528\u306e\u30b5\u30a4\u30c8\u30fb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3002
    6.15 -SiteAngularJsSeed.name=AngularJS\u30b7\u30fc\u30c9
    6.16 +#SiteAngularJsSeed.name=AngularJS\u30b7\u30fc\u30c9
    6.17  SiteHelper.error.emptyZip=\u30b5\u30a4\u30c8\u30fb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u542b\u3080ZIP\u30d5\u30a1\u30a4\u30eb\u304c\u7a7a\u3067\u3042\u308b\u304b\u3001\u305d\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002
    6.18  # {0} - file name
    6.19  SiteHelper.progress.download=\u30d5\u30a1\u30a4\u30eb{0}\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u3044\u307e\u3059
    6.20  # {0} - file name
    6.21  SiteHelper.progress.unzip=\u30d5\u30a1\u30a4\u30eb{0}\u3092\u89e3\u51cd\u3057\u3066\u3044\u307e\u3059
    6.22  SiteHtml5Boilerplate.description=html5boilerplate.com\u306e\u30b5\u30a4\u30c8\u30fb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3002\u30d0\u30fc\u30b8\u30e7\u30f3: 3.0.2
    6.23 -SiteHtml5Boilerplate.name=HTML5 Boilerplate v3.0.2
    6.24 +#SiteHtml5Boilerplate.name=HTML5 Boilerplate v3.0.2
    6.25  SiteHtml5BoilerplateV4.description=html5boilerplate.com\u306e\u30b5\u30a4\u30c8\u30fb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3002\u30d0\u30fc\u30b8\u30e7\u30f3: 4.0.0
    6.26 -SiteHtml5BoilerplateV4.name=HTML5 Boilerplate v4.0.0
    6.27 +#SiteHtml5BoilerplateV4.name=HTML5 Boilerplate v4.0.0
    6.28  SiteInitializr.description=initializr.com\u306e\u30b5\u30a4\u30c8\u30fb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3002
    6.29  SiteInitializrPanel.jLabel1.text=initializr.com\u306e\u30b5\u30a4\u30c8\u30fb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8:
    6.30 -SiteInitializrPanel.classicRadioButton.text=\u30af\u30e9\u30b7\u30c3\u30af
    6.31 -SiteInitializrPanel.responsiveRadioButton.text=\u30ec\u30b9\u30dd\u30f3\u30b7\u30d6
    6.32 -SiteInitializrPanel.bootstrapRadioButton.text=\u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d72
    6.33 +#SiteInitializrPanel.classicRadioButton.text=\u30af\u30e9\u30b7\u30c3\u30af
    6.34 +#SiteInitializrPanel.responsiveRadioButton.text=\u30ec\u30b9\u30dd\u30f3\u30b7\u30d6
    6.35 +#SiteInitializrPanel.bootstrapRadioButton.text=\u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d72
    6.36  SiteMobileBoilerplate.description=html5boilerplate.com/mobile\u306e\u30b5\u30a4\u30c8\u30fb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3002\u30d0\u30fc\u30b8\u30e7\u30f3: 3.0
    6.37 -SiteMobileBoilerplate.name=\u30e2\u30d0\u30a4\u30eb\u30fb\u30dc\u30a4\u30e9\u30fc\u30d7\u30ec\u30fc\u30c8
    6.38 +#SiteMobileBoilerplate.name=\u30e2\u30d0\u30a4\u30eb\u30fb\u30dc\u30a4\u30e9\u30fc\u30d7\u30ec\u30fc\u30c8
    6.39  SiteTwitterBootstrap.description=twitter.github.com/bootstrap\u306e\u30b5\u30a4\u30c8\u30fb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8
    6.40 -SiteTwitterBootstrap.name=Twitter\u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7
    6.41 +#SiteTwitterBootstrap.name=Twitter\u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7
    6.42  SiteZip.error.template.invalid=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30fb\u30d5\u30a1\u30a4\u30eb\u304c\u7121\u52b9\u3067\u3059(http://...\u307e\u305f\u306f\u30ed\u30b1\u30fc\u30eb\u30fb\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u3067\u3059)\u3002
    6.43  SiteZip.error.template.missing=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30fb\u30d5\u30a1\u30a4\u30eb\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
    6.44  SiteZip.error.template.notZip=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30fb\u30d5\u30a1\u30a4\u30eb\u306fZIP\u30a2\u30fc\u30ab\u30a4\u30d6(*.zip)\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
     7.1 --- a/src/pt_BR/ide/tasklist-todo/tasklist-todo/org/netbeans/modules/tasklist/todo/settings/Bundle_pt_BR.properties	Tue Nov 20 16:21:50 2012 +0900
     7.2 +++ b/src/pt_BR/ide/tasklist-todo/tasklist-todo/org/netbeans/modules/tasklist/todo/settings/Bundle_pt_BR.properties	Sat Dec 08 17:09:53 2012 +0900
     7.3 @@ -11,5 +11,5 @@
     7.4  LBL_Options=Itens de A\u00e7\u00e3o
     7.5  HINT_Options=Op\u00e7\u00f5es de itens de Tarefas na janela Itens de A\u00e7\u00e3o.
     7.6  
     7.7 -KW_ToDo=ToDo,@todo,ToDos,FIXME,PENDING,Itens de A\u00e7\u00e3o,lista de tarefas,Lista de Tarefas
     7.8 +#KW_ToDo=ToDo,@todo,ToDos,FIXME,PENDING,Itens de A\u00e7\u00e3o,lista de tarefas,Lista de Tarefas
     7.9  
     8.1 --- a/src/pt_BR/php/php-project/php-project/org/netbeans/modules/php/project/phpunit/annotations/Bundle_pt_BR.properties	Tue Nov 20 16:21:50 2012 +0900
     8.2 +++ b/src/pt_BR/php/php-project/php-project/org/netbeans/modules/php/project/phpunit/annotations/Bundle_pt_BR.properties	Sat Dec 08 17:09:53 2012 +0900
     8.3 @@ -38,18 +38,18 @@
     8.4  #
     8.5  # Portions Copyrighted 2012 Sun Microsystems, Inc.
     8.6  
     8.7 -AssertTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@assert</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>\u00c9 poss\u00edvel usar a anota\u00e7\u00e3o <code>@assert</code> no bloqueio da documenta\u00e7\u00e3o de um m\u00e9todo para gerar automaticamente testes simples, mas significativos, em vez de casos de teste incompletos ao usar o Skeleton Generator.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n\\ * @assert (0, 0) == 0\n\\ */\npublic function add($a, $b) {\n\\    return $a + $b;\n}\n</code></pre>\n<p>Essas anota\u00e7\u00f5es s\u00e3o transformadas no c\u00f3digo de teste, como </p>\n<pre><code>\n/**\n\\ * Gerado de @assert (0, 0) == 0.\n\\ */\npublic function testAdd() {\n\\    $o = new Calculator;\n\\    $this->assertEquals(0, $o->add(0, 0));\n}\n</code></pre>
     8.8 -BackupGlobalsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@backupGlobals</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>As opera\u00e7\u00f5es de backup e restaura\u00e7\u00e3o para vari\u00e1veis globais podem ser completamente desativadas para todos os testes de uma classe de caso de teste.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n\\ * @backupGlobals disabled\n\\ */\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\    // ...\n}\n</code></pre>\n<p>A anota\u00e7\u00e3o <code>@backupGlobals</code> tamb\u00e9m pode ser usada no n\u00edvel do m\u00e9todo de teste. Isso possibilita uma configura\u00e7\u00e3o refinada das opera\u00e7\u00f5es de backup e restaura\u00e7\u00e3o.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre></code>\n/**\n\\ * @backupGlobals disabled\n\\ */\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\    /**\n\\     * @backupGlobals enabled\n\\     */\n\\    public function testThatInteractsWithGlobalVariables() {\n\\        // ...\n\\    }\n}\n</code></pre>
     8.9 -BackupStaticAttributesTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@backupStaticAttributes</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>As opera\u00e7\u00f5es de backup e restaura\u00e7\u00e3o para atributos est\u00e1ticos de classes podem ser completamente desativadas para todos os testes de uma classe de caso de teste.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n\\ * @backupStaticAttributes disabled\n\\ */\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\    // ...\n}\n</code></pre>\n<p>A anota\u00e7\u00e3o <code>@backupStaticAttributes</code> tamb\u00e9m pode ser usada no n\u00edvel do m\u00e9todo de teste. Isso possibilita uma configura\u00e7\u00e3o refinada das opera\u00e7\u00f5es de backup e restaura\u00e7\u00e3o.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre></code>\n/**\n\\ * @backupStaticAttributes disabled\n\\ */\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\    /**\n\\     * @backupStaticAttibutes enabled\n\\     */\n\\    public function testThatInteractsWithGlobalVariables() {\n\\        // ...\n\\    }\n}\n</code></pre>
    8.10 -CodeCoverageIgnoreTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@codeCoverageIgnore</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>As anota\u00e7\u00f5es <code>@codeCoverageIgnore</code> podem ser usadas para excluir linhas de c\u00f3digo da an\u00e1lise de cobertura.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n\\ * @codeCoverageIgnore\n\\ */\nclass Foo {\n\\    public function bar() {\n\\    }\n}\n\nclass Bar {\n\\    /**\n\\     * @codeCoverageIgnore\n\\     */\n\\    public function foo() {\n\\    }\n}\n</code></pre>
    8.11 -CoversTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@covers</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3on</p><p>A anota\u00e7\u00e3o <code>@covers</code> pode ser usada no c\u00f3digo de teste para especificar qual(is) m\u00e9todo(s) um m\u00e9todo de teste deseja testar.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n\\ * @covers BankAccount::getBalance\n\\ */\npublic function testBalanceIsInitiallyZero() {\n\\    $this->assertEquals(0, $this->ba->getBalance());\n}\n</code></pre>\n<p>Caso seja fornecido, somente as informa\u00e7\u00f5es m\u00e9dias do c\u00f3digo para o(s) m\u00e9todos(s) especificados ser\u00e3o considerados.</p>\n<table border="0"><tr><th align="left">Anota\u00e7\u00e3o</th><th align="left">Descri\u00e7\u00e3o</th></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::methodName</code></td><td align="left">Especifica que o m\u00e9todo de teste anotado abrange o m\u00e9todo especificado.</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName</code></td><td align="left">Especifica que o m\u00e9todo de teste anotado abrange todos os m\u00e9todos de dada classe.</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName&lt;extended&gt;</code></td><td align="left" valign="top">Especifica que o m\u00e9todo de teste anotado abrange todos os m\u00e9todos de dada classe e sua(s) classe(s) e Interface(s) pai.</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;public&gt;</code></td><td align="left">Especifica que o m\u00e9todo de teste anotado abrange todos os m\u00e9todos p\u00fablicos de dada classe.</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;protected&gt;</code></td><td align="left">Especifica que o m\u00e9todo de teste anotado abrange todos os m\u00e9todos protegidos de dada classe.</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;private&gt;</code></td><td align="left">Especifica que o m\u00e9todo de teste anotado abrange todos os m\u00e9todos privados de dada classe.</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;!public&gt;</code></td><td align="left">Especifica que o m\u00e9todo de teste anotado abrange todos os m\u00e9todos de dada classe que n\u00e3o s\u00e3o p\u00fablicos.</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;!protected&gt;</code></td><td align="left">Especifica que o m\u00e9todo de teste anotado abrange todos os m\u00e9todos de dada classe que n\u00e3o foram protegidos.</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;!private&gt;</code></td><td align="left">Especifica que o m\u00e9todo de teste anotado abrange todos os m\u00e9todos de dada classe que n\u00e3o s\u00e3o privados.</td></tr></table>
    8.12 -DataProviderTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@dataProvider</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>Um m\u00e9todo de teste pode aceitar argumentos arbitr\u00e1rios. Esses argumentos ser\u00e3o fornecidos por um m\u00e9todo do provedor de dados. O m\u00e9todo do provedor de dados a ser utilizado \u00e9 especificado usando a anota\u00e7\u00e3o <code>@dataProvider</code>.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nclass DataTest extends PHPUnit_Framework_TestCase {\n\\    /**\n\\     * @dataProvider provider\n\\     */\n\\    public function testAdd($a, $b, $c) {\n\\        $this->assertEquals($c, $a + $b);\n\\    }\n\n\\    public function provider() {\n\\        return array(\n\\          array(0, 0, 0),\n\\          array(0, 1, 1),\n\\          array(1, 0, 1),\n\\          array(1, 1, 3)\n\\        );\n\\    }\n}\n</code></pre>
    8.13 -DependsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@depends</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>PHPUnit suporta a declara\u00e7\u00e3o de depend\u00eancia expl\u00edcita entre m\u00e9todos de teste. Essas depend\u00eancias n\u00e3o definem a ordem em que os m\u00e9todos de teste ser\u00e3o executados, mas permitem o retorno de uma inst\u00e2ncia da corre\u00e7\u00e3o do teste por um produtor e pass\u00e1-lo para os consumidores dependentes.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nclass DependencyFailureTest extends PHPUnit_Framework_TestCase {\n\\    public function testOne() {\n\\        $this->assertTrue(FALSE);\n\\    }\n\n\\    /**\n\\     * @depends testOne\n\\     */\n\\    public function testTwo() {\n\\    }\n}\n</code></pre>
    8.14 -ExpectedExceptionTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedException</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>Use a anota\u00e7\u00e3o <code>@expectedException</code> para testar se uma exce\u00e7\u00e3o \u00e9 gerada dentro do c\u00f3digo testado.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nclass ExceptionTest extends PHPUnit_Framework_TestCase {\n\\    /**\n\\     * @expectedException InvalidArgumentException\n\\     */\n\\    public function testException() {\n\\    }\n}\n</code></pre>
    8.15 -ExpectedExceptionCodeTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedExceptionCode</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>A anota\u00e7\u00e3o <code>@expectedExceptionCode</code>, em conjunto com o <code>@expectedException</code>, permite fazer afirma\u00e7\u00f5es no c\u00f3digo de erro de uma exce\u00e7\u00e3o gerada, tornando poss\u00edvel limitar uma exce\u00e7\u00e3o espec\u00edfica.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\    /**\n\\     * @expectedException     MyException\n\\     * @expectedExceptionCode 20\n\\     */\n\\    public function testExceptionHasErrorcode20() {\n\\        throw new MyException('Some Message', 20);\n\\    }\n}\n</code></pre>
    8.16 -ExpectedExceptionMessageTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedExceptionMessage</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>A anota\u00e7\u00e3o <code>@expectedExceptionMessage</code> funciona de maneira semelhante a <code>@expectedExceptionCode</code>, visto que ela permite fazer uma afirma\u00e7\u00e3o sobre a mensagem de erro de uma exce\u00e7\u00e3o.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\    /**\n\\     * @expectedException        MyException\n\\     * @expectedExceptionMessage Some Message\n\\     */\n\\    public function testExceptionHasRightMessage() {\n\\        throw new MyException('Some Message', 20);\n\\    }\n}\n</code></pre>\n<p>A mensagem esperada pode ser uma substring da Mensagem de exce\u00e7\u00e3o. Isso pode ser \u00fatil para apenas afirmar que certo nome ou par\u00e2metro que foi passado aparece na exce\u00e7\u00e3o e n\u00e3o fixa toda a mensagem de exce\u00e7\u00e3o no teste.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\     /**\n\\      * @expectedException        MyException\n\\      * @expectedExceptionMessage broken\n\\      */\n\\     public function testExceptionHasRightMessage() {\n\\         $param = "broken";\n\\         throw new MyException('Invalid parameter "'.$param.'".', 20);\n\\     }\n}\n</code></pre>
    8.17 -GroupTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@group</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>Um teste pode ser marcado como pertencente a um ou mais grupos usando a anota\u00e7\u00e3o <code>@group</code>.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\    /**\n\\     * @group specification\n\\     */\n\\    public function testSomething() {\n\\    }\n\n\\    /**\n\\     * @group regression\n\\     * @group bug2204\n\\     */\n\\    public function testSomethingElse() {\n\\    }\n}\n</code></pre>\n<p>Testes podem ser selecionados para execu\u00e7\u00e3o baseada em grupos, usando os switches <code>--group</code> e <code>--exclude-group</code> do executor de teste da linha de comando ou usando as respectivas diretivas do arquivo de configura\u00e7\u00e3o XML.</p>
    8.18 -OutputBufferingTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@outputBuffering</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>A anota\u00e7\u00e3o <code>@outputBuffering</code> pode ser usada para controlar o buffer do PHP.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n\\ * @outputBuffering enabled\n\\ */\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\    // ...\n}\n</code></pre>\n<p>A anota\u00e7\u00e3o <code>@outputBuffering</code> tamb\u00e9m pode ser usada no n\u00edvel do m\u00e9todo de teste. Isso permite ter um controle refinado do buffer de sa\u00edda.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n\\ * @outputBuffering disabled\n\\ */\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\    /**\n\\     * @outputBuffering enabled\n\\     */\n\\    public function testThatPrintsSomething() {\n\\        // ...\n\\    }\n}\n</code></pre>
    8.19 -PhpUnitAnnotationsProvider.name=PHPUnit
    8.20 -TestTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@test</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>Como alternativa para prefixar seus nomes de m\u00e9todos de teste com teste, voc\u00ea pode usar a anota\u00e7\u00e3o <code>@test</code> em um bloqueio de documentos do m\u00e9todo para marc\u00e1-lo como um m\u00e9todo de teste.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n\\ * @test\n\\ */\npublic function initialBalanceShouldBe0() {\n\\    $this->assertEquals(0, $this->ba->getBalance());\n}\n</code></pre>
    8.21 +#AssertTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@assert</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>\u00c9 poss\u00edvel usar a anota\u00e7\u00e3o <code>@assert</code> no bloqueio da documenta\u00e7\u00e3o de um m\u00e9todo para gerar automaticamente testes simples, mas significativos, em vez de casos de teste incompletos ao usar o Skeleton Generator.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n\\ * @assert (0, 0) == 0\n\\ */\npublic function add($a, $b) {\n\\    return $a + $b;\n}\n</code></pre>\n<p>Essas anota\u00e7\u00f5es s\u00e3o transformadas no c\u00f3digo de teste, como </p>\n<pre><code>\n/**\n\\ * Gerado de @assert (0, 0) == 0.\n\\ */\npublic function testAdd() {\n\\    $o = new Calculator;\n\\    $this->assertEquals(0, $o->add(0, 0));\n}\n</code></pre>
    8.22 +#BackupGlobalsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@backupGlobals</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>As opera\u00e7\u00f5es de backup e restaura\u00e7\u00e3o para vari\u00e1veis globais podem ser completamente desativadas para todos os testes de uma classe de caso de teste.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n\\ * @backupGlobals disabled\n\\ */\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\    // ...\n}\n</code></pre>\n<p>A anota\u00e7\u00e3o <code>@backupGlobals</code> tamb\u00e9m pode ser usada no n\u00edvel do m\u00e9todo de teste. Isso possibilita uma configura\u00e7\u00e3o refinada das opera\u00e7\u00f5es de backup e restaura\u00e7\u00e3o.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre></code>\n/**\n\\ * @backupGlobals disabled\n\\ */\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\    /**\n\\     * @backupGlobals enabled\n\\     */\n\\    public function testThatInteractsWithGlobalVariables() {\n\\        // ...\n\\    }\n}\n</code></pre>
    8.23 +#BackupStaticAttributesTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@backupStaticAttributes</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>As opera\u00e7\u00f5es de backup e restaura\u00e7\u00e3o para atributos est\u00e1ticos de classes podem ser completamente desativadas para todos os testes de uma classe de caso de teste.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n\\ * @backupStaticAttributes disabled\n\\ */\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\    // ...\n}\n</code></pre>\n<p>A anota\u00e7\u00e3o <code>@backupStaticAttributes</code> tamb\u00e9m pode ser usada no n\u00edvel do m\u00e9todo de teste. Isso possibilita uma configura\u00e7\u00e3o refinada das opera\u00e7\u00f5es de backup e restaura\u00e7\u00e3o.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre></code>\n/**\n\\ * @backupStaticAttributes disabled\n\\ */\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\    /**\n\\     * @backupStaticAttibutes enabled\n\\     */\n\\    public function testThatInteractsWithGlobalVariables() {\n\\        // ...\n\\    }\n}\n</code></pre>
    8.24 +#CodeCoverageIgnoreTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@codeCoverageIgnore</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>As anota\u00e7\u00f5es <code>@codeCoverageIgnore</code> podem ser usadas para excluir linhas de c\u00f3digo da an\u00e1lise de cobertura.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n\\ * @codeCoverageIgnore\n\\ */\nclass Foo {\n\\    public function bar() {\n\\    }\n}\n\nclass Bar {\n\\    /**\n\\     * @codeCoverageIgnore\n\\     */\n\\    public function foo() {\n\\    }\n}\n</code></pre>
    8.25 +#CoversTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@covers</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3on</p><p>A anota\u00e7\u00e3o <code>@covers</code> pode ser usada no c\u00f3digo de teste para especificar qual(is) m\u00e9todo(s) um m\u00e9todo de teste deseja testar.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n\\ * @covers BankAccount::getBalance\n\\ */\npublic function testBalanceIsInitiallyZero() {\n\\    $this->assertEquals(0, $this->ba->getBalance());\n}\n</code></pre>\n<p>Caso seja fornecido, somente as informa\u00e7\u00f5es m\u00e9dias do c\u00f3digo para o(s) m\u00e9todos(s) especificados ser\u00e3o considerados.</p>\n<table border="0"><tr><th align="left">Anota\u00e7\u00e3o</th><th align="left">Descri\u00e7\u00e3o</th></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::methodName</code></td><td align="left">Especifica que o m\u00e9todo de teste anotado abrange o m\u00e9todo especificado.</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName</code></td><td align="left">Especifica que o m\u00e9todo de teste anotado abrange todos os m\u00e9todos de dada classe.</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName&lt;extended&gt;</code></td><td align="left" valign="top">Especifica que o m\u00e9todo de teste anotado abrange todos os m\u00e9todos de dada classe e sua(s) classe(s) e Interface(s) pai.</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;public&gt;</code></td><td align="left">Especifica que o m\u00e9todo de teste anotado abrange todos os m\u00e9todos p\u00fablicos de dada classe.</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;protected&gt;</code></td><td align="left">Especifica que o m\u00e9todo de teste anotado abrange todos os m\u00e9todos protegidos de dada classe.</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;private&gt;</code></td><td align="left">Especifica que o m\u00e9todo de teste anotado abrange todos os m\u00e9todos privados de dada classe.</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;!public&gt;</code></td><td align="left">Especifica que o m\u00e9todo de teste anotado abrange todos os m\u00e9todos de dada classe que n\u00e3o s\u00e3o p\u00fablicos.</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;!protected&gt;</code></td><td align="left">Especifica que o m\u00e9todo de teste anotado abrange todos os m\u00e9todos de dada classe que n\u00e3o foram protegidos.</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;!private&gt;</code></td><td align="left">Especifica que o m\u00e9todo de teste anotado abrange todos os m\u00e9todos de dada classe que n\u00e3o s\u00e3o privados.</td></tr></table>
    8.26 +#DataProviderTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@dataProvider</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>Um m\u00e9todo de teste pode aceitar argumentos arbitr\u00e1rios. Esses argumentos ser\u00e3o fornecidos por um m\u00e9todo do provedor de dados. O m\u00e9todo do provedor de dados a ser utilizado \u00e9 especificado usando a anota\u00e7\u00e3o <code>@dataProvider</code>.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nclass DataTest extends PHPUnit_Framework_TestCase {\n\\    /**\n\\     * @dataProvider provider\n\\     */\n\\    public function testAdd($a, $b, $c) {\n\\        $this->assertEquals($c, $a + $b);\n\\    }\n\n\\    public function provider() {\n\\        return array(\n\\          array(0, 0, 0),\n\\          array(0, 1, 1),\n\\          array(1, 0, 1),\n\\          array(1, 1, 3)\n\\        );\n\\    }\n}\n</code></pre>
    8.27 +#DependsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@depends</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>PHPUnit suporta a declara\u00e7\u00e3o de depend\u00eancia expl\u00edcita entre m\u00e9todos de teste. Essas depend\u00eancias n\u00e3o definem a ordem em que os m\u00e9todos de teste ser\u00e3o executados, mas permitem o retorno de uma inst\u00e2ncia da corre\u00e7\u00e3o do teste por um produtor e pass\u00e1-lo para os consumidores dependentes.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nclass DependencyFailureTest extends PHPUnit_Framework_TestCase {\n\\    public function testOne() {\n\\        $this->assertTrue(FALSE);\n\\    }\n\n\\    /**\n\\     * @depends testOne\n\\     */\n\\    public function testTwo() {\n\\    }\n}\n</code></pre>
    8.28 +#ExpectedExceptionTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedException</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>Use a anota\u00e7\u00e3o <code>@expectedException</code> para testar se uma exce\u00e7\u00e3o \u00e9 gerada dentro do c\u00f3digo testado.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nclass ExceptionTest extends PHPUnit_Framework_TestCase {\n\\    /**\n\\     * @expectedException InvalidArgumentException\n\\     */\n\\    public function testException() {\n\\    }\n}\n</code></pre>
    8.29 +#ExpectedExceptionCodeTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedExceptionCode</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>A anota\u00e7\u00e3o <code>@expectedExceptionCode</code>, em conjunto com o <code>@expectedException</code>, permite fazer afirma\u00e7\u00f5es no c\u00f3digo de erro de uma exce\u00e7\u00e3o gerada, tornando poss\u00edvel limitar uma exce\u00e7\u00e3o espec\u00edfica.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\    /**\n\\     * @expectedException     MyException\n\\     * @expectedExceptionCode 20\n\\     */\n\\    public function testExceptionHasErrorcode20() {\n\\        throw new MyException('Some Message', 20);\n\\    }\n}\n</code></pre>
    8.30 +#ExpectedExceptionMessageTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedExceptionMessage</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>A anota\u00e7\u00e3o <code>@expectedExceptionMessage</code> funciona de maneira semelhante a <code>@expectedExceptionCode</code>, visto que ela permite fazer uma afirma\u00e7\u00e3o sobre a mensagem de erro de uma exce\u00e7\u00e3o.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\    /**\n\\     * @expectedException        MyException\n\\     * @expectedExceptionMessage Some Message\n\\     */\n\\    public function testExceptionHasRightMessage() {\n\\        throw new MyException('Some Message', 20);\n\\    }\n}\n</code></pre>\n<p>A mensagem esperada pode ser uma substring da Mensagem de exce\u00e7\u00e3o. Isso pode ser \u00fatil para apenas afirmar que certo nome ou par\u00e2metro que foi passado aparece na exce\u00e7\u00e3o e n\u00e3o fixa toda a mensagem de exce\u00e7\u00e3o no teste.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\     /**\n\\      * @expectedException        MyException\n\\      * @expectedExceptionMessage broken\n\\      */\n\\     public function testExceptionHasRightMessage() {\n\\         $param = "broken";\n\\         throw new MyException('Invalid parameter "'.$param.'".', 20);\n\\     }\n}\n</code></pre>
    8.31 +#GroupTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@group</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>Um teste pode ser marcado como pertencente a um ou mais grupos usando a anota\u00e7\u00e3o <code>@group</code>.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\    /**\n\\     * @group specification\n\\     */\n\\    public function testSomething() {\n\\    }\n\n\\    /**\n\\     * @group regression\n\\     * @group bug2204\n\\     */\n\\    public function testSomethingElse() {\n\\    }\n}\n</code></pre>\n<p>Testes podem ser selecionados para execu\u00e7\u00e3o baseada em grupos, usando os switches <code>--group</code> e <code>--exclude-group</code> do executor de teste da linha de comando ou usando as respectivas diretivas do arquivo de configura\u00e7\u00e3o XML.</p>
    8.32 +#OutputBufferingTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@outputBuffering</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>A anota\u00e7\u00e3o <code>@outputBuffering</code> pode ser usada para controlar o buffer do PHP.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n\\ * @outputBuffering enabled\n\\ */\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\    // ...\n}\n</code></pre>\n<p>A anota\u00e7\u00e3o <code>@outputBuffering</code> tamb\u00e9m pode ser usada no n\u00edvel do m\u00e9todo de teste. Isso permite ter um controle refinado do buffer de sa\u00edda.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n\\ * @outputBuffering disabled\n\\ */\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\    /**\n\\     * @outputBuffering enabled\n\\     */\n\\    public function testThatPrintsSomething() {\n\\        // ...\n\\    }\n}\n</code></pre>
    8.33 +#PhpUnitAnnotationsProvider.name=PHPUnit
    8.34 +#TestTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@test</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>Como alternativa para prefixar seus nomes de m\u00e9todos de teste com teste, voc\u00ea pode usar a anota\u00e7\u00e3o <code>@test</code> em um bloqueio de documentos do m\u00e9todo para marc\u00e1-lo como um m\u00e9todo de teste.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n\\ * @test\n\\ */\npublic function initialBalanceShouldBe0() {\n\\    $this->assertEquals(0, $this->ba->getBalance());\n}\n</code></pre>
    8.35  
     9.1 --- a/src/pt_BR/php/php-project/php-project/org/netbeans/modules/php/project/ui/options/Bundle_pt_BR.properties	Tue Nov 20 16:21:50 2012 +0900
     9.2 +++ b/src/pt_BR/php/php-project/php-project/org/netbeans/modules/php/project/ui/options/Bundle_pt_BR.properties	Sat Dec 08 17:09:53 2012 +0900
     9.3 @@ -204,5 +204,5 @@
     9.4  PhpAnnotationsPanel.noteLabel.text=<html><i>Observa\u00e7\u00e3o:</i></html>
     9.5  PhpAnnotationsPanel.infoLabel.text=Essas anota\u00e7\u00f5es est\u00e3o dispon\u00edveis na conclus\u00e3o do c\u00f3digo.
     9.6  ## sample annotation
     9.7 -SampleTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@sample</p>\n<p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p>\n<p>Esta anota\u00e7\u00e3o <code>@sample</code> mostra como gravar a documenta\u00e7\u00e3o adequadamente.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p>\n<pre><code>\n/**\n\\ * @sample(param1, param2 = value1)\n\\ */\npublic function test($a, $b) {\n\\    return $a + $b;\n}\n</code></pre>\n
     9.8 +#SampleTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@sample</p>\n<p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p>\n<p>Esta anota\u00e7\u00e3o <code>@sample</code> mostra como gravar a documenta\u00e7\u00e3o adequadamente.</p>\n<p style="font-weight: bold; font-size: 1.1em">Exemplo</p>\n<pre><code>\n/**\n\\ * @sample(param1, param2 = value1)\n\\ */\npublic function test($a, $b) {\n\\    return $a + $b;\n}\n</code></pre>\n
     9.9  
    10.1 --- a/src/pt_BR/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/extra/Bundle_pt_BR.properties	Tue Nov 20 16:21:50 2012 +0900
    10.2 +++ b/src/pt_BR/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/extra/Bundle_pt_BR.properties	Sat Dec 08 17:09:53 2012 +0900
    10.3 @@ -38,10 +38,10 @@
    10.4  #
    10.5  # Portions Copyrighted 2012 Sun Microsystems, Inc.
    10.6  
    10.7 -RouteTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Route</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>A anota\u00e7\u00e3o <code>@Route</code> \u00e9 mapeada para um padr\u00e3o de roteiro com um controlador.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfiguration\\Route;\n\nclass PostController extends Controller {\n    /**\n     * @Route("/")\n     */\n    public function indexAction() {\n         ...\n    }\n}\n</code></pre>\n<p>A a\u00e7\u00e3o <code>index</code> do controlador <code>Post</code> agora \u00e9 mapeada para o URL <code>/</code>. Isso equivale \u00e0 configura\u00e7\u00e3o YAML a seguir.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nblog_home:\n    pattern:  /\n    defaults: { _controller: SensioBlogBundle:Post:index }\n</code></pre>\n<p>Como em qualquer padr\u00e3o de roteamento, voc\u00ea pode definir placeholders, requisitos e valores default.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n * @Route("/{id}", requirements={"id" = "d+"}, defaults={"foo" = "bar"})\n */\npublic function showAction($id) {\n}\n</code></pre>\n<p>Voc\u00ea tamb\u00e9m pode fazer correspond\u00eancia com mais de um URL definindo anota\u00e7\u00f5es <code>@Route</code>adicionais.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n * @Route("/", defaults={"id" = 1})\n * @Route("/{id}")\n */\npublic function showAction($id) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">Activation</p><p>Os roteamentos precisam ser importados para estarem ativos, como qualquer outro recurso de roteamento (observe o tipo de anota\u00e7\u00e3o).</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n# app/config/routing.yml\n\n# importa roteamentos de uma classe de controlador\npost:\n\\    resource: "@SensioBlogBundle/Controller/PostController.php"\n    type:     annotation\n</code></pre>\n<p>Voc\u00ea pode tamb\u00e9m importar todo um diret\u00f3rio.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n# importa roteamentos de um diret\u00f3rio do controlador\nblog:\n    resource: "@SensioBlogBundle/Controller"\n    type:     annotation\n</code></pre>\n<p>Como acontece com qualquer outro recurso, voc\u00ea pode "montar" os roteamentos sob um determinado prefixo.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\npost:\n    resource: "@SensioBlogBundle/Controller/PostController.php"\n    prefix:   /blog\n    type:     annotation\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">Nome do Roteamento</p><p>Um roteamento definido com a anota\u00e7\u00e3o <code>@Roteamento</code> recebe um nome default composto do nome do pacote, do nome do controlador e do nome da a\u00e7\u00e3o. No exemplo acima, seria <code>sensio_blog_post_index</code>.</p><p>O atributo <code>name</code> pode ser usado para substituir esse nome de roteamento default.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n * @Route("/", name="blog_home")\n */\npublic function indexAction() {\n     ...\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">Prefixo do Roteamento</p><p>Uma anota\u00e7\u00e3o <code>@Route</code> em uma classe de controlador define um prefixo para todos os roteamentos da a\u00e7\u00e3o.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n * @Route("/blog")\n */\nclass PostController extends Controller {\n    /**\n     * @Route("/{id}")\n     */\n    public function showAction($id) {\n    }\n}\n</code></pre>\n<p>A a\u00e7\u00e3o <code>show</code> agora \u00e9 mapeada para o padr\u00e3o <code>/blog/{id}</code>.</p>
    10.8 -MethodTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Method</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>H\u00e1 uma anota\u00e7\u00e3o de atalho <code>@Method</code> para especificar o m\u00e9todo HTTP permitido para o roteamento. Para us\u00e1-lo, importe o namespace da anota\u00e7\u00e3o <code>Method</code>.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationMethod;\n\n/**\n* @Route("/blog")\n*/\nclass PostController extends Controller {\n/**\n* @Route("/edit/{id}")\n* @Method({"GET", "POST"})\n*/\npublic function editAction($id) {\n}\n}\n</code></pre>\n<p>A a\u00e7\u00e3o <code>edit</code> agora \u00e9 mapeada para o padr\u00e3o <code>/blog/edit/{id}</code> se o m\u00e9todo HTTP usado for <code>GET</code> ou <code>POST</code>.</p><p>A anota\u00e7\u00e3o <code>@Method</code> s\u00f3 \u00e9 considerada quando uma a\u00e7\u00e3o \u00e9 anotada com <code>@Route</code>.</p>
    10.9 -ParamConverterTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@ParamConverter</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>A anota\u00e7\u00e3o <code>@ParamConverter</code> chama <i>conversores</i> para converter par\u00e2metros de solicita\u00e7\u00e3o em objetos. Esses objetos s\u00e3o armazenados como atributos de solicita\u00e7\u00e3o e portanto podem ser injetados como argumentos de m\u00e9todo do controlador.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationParamConverter;\n\n/**\n * @Route("/blog/{id}")\n * @ParamConverter("post", class="SensioBlogBundle:Post")\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>V\u00e1rias coisas acontecem de forma oculta:</p><ul><li>O conversor tenta obter um objeto <code>SensioBlogBundle:Post</code> nos atributos da solicita\u00e7\u00e3o (os atributos da solicita\u00e7\u00e3o v\u00eam de placeholders de roteamento -- aqui <code>id</code>);</li><li>Se nenhum objeto <code>Postar</code> for encontrado, uma <code>Resposta</code> <code>404</code> ser\u00e1 gerada;</li><li>Se um objeto <code>Postar</code> for encontrado, um novo atributo de solicita\u00e7\u00e3o <code>postar</code> ser\u00e1 definido (acess\u00edvel via <code>$request->attributes->get('post')</code>);</li><li>Como acontece com qualquer outro atributo de solicita\u00e7\u00e3o, ele \u00e9 automaticamente injetado no controlador quando presente na assinatura do m\u00e9todo.</li></ul><p>Se voc\u00ea usar as dicas de tipo como no exemplo acima, poder\u00e1 at\u00e9 mesmo omitir totalmente a anota\u00e7\u00e3o <code>@ParamConverter</code>.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n autom\u00e1tico com assinatura de m\u00e9todo\nfun\u00e7\u00e3o p\u00fablica showAction(Post $post) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">Conversores Incorporados</p><p>O pacote s\u00f3 tem um conversor incorporado, o <code>Doctrine</code> one.</p><p><b><code>Doctrine</code> Converter</b></p><p>Por default, o conversor <code>Doctrine</code> usa o gerenciador de identidades default. Isso pode ser configurado com a op\u00e7\u00e3o <code>entity_manager</code>.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationParamConverter;\n\n/**\n * @Route("/blog/{id}")\n * @ParamConverter("post", class="SensioBlogBundle:Post", options={"entity_manager" = "foo"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">Criando um Conversor</p><p>Todos os conversores devem implementar o <code>ParamConverterInterface</code>.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nnamespace SensioBundleFrameworkExtraBundleRequestParamConverter;\n\nuse SensioBundleFrameworkExtraBundleConfigurationConfigurationInterface;\nuse SymfonyComponentHttpFoundationRequest;\n\ninterface ParamConverterInterface {\n    function apply(Request $request, ConfigurationInterface $configuration);\n\n    function supports(ConfigurationInterface $configuration);\n}\n</code></pre>\n<p>O m\u00e9todo <code>supports()</code> deve retornar <code>true</code> quando \u00e9 capaz de converter a configura\u00e7\u00e3o dada (uma inst\u00e2ncia de <code>ParamConverter</code>).</p><p>A inst\u00e2ncia <code>ParamConverter</code> tem tr\u00eas informa\u00e7\u00f5es sobre a anota\u00e7\u00e3o:</p><table border="0"><tr><td valign="top"><b><code>nome</code></b></td><td>O nome do atributo.</td></tr><tr><td valign="top"><b><code>classe</code></b></td><td>O nome da classe do atributo (pode ser qualquer string que represente um nome de classe).</td></tr><tr><td valign="top"><b><code>op\u00e7\u00f5es</code></b></td><td>Um array de op\u00e7\u00f5es.</td></tr></table>\n<p>O m\u00e9todo <code>apply()</code> \u00e9 chamado sempre que uma configura\u00e7\u00e3o \u00e9 suportada. Com base nos atributos da solicita\u00e7\u00e3o, ele deve definir um atributo chamado <code>$configuration->getName()</code>, que armazena um objeto da classe <code>$configuration->getClass()</code>.</p>
   10.10 +#RouteTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Route</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>A anota\u00e7\u00e3o <code>@Route</code> \u00e9 mapeada para um padr\u00e3o de roteiro com um controlador.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfiguration\\Route;\n\nclass PostController extends Controller {\n    /**\n     * @Route("/")\n     */\n    public function indexAction() {\n         ...\n    }\n}\n</code></pre>\n<p>A a\u00e7\u00e3o <code>index</code> do controlador <code>Post</code> agora \u00e9 mapeada para o URL <code>/</code>. Isso equivale \u00e0 configura\u00e7\u00e3o YAML a seguir.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nblog_home:\n    pattern:  /\n    defaults: { _controller: SensioBlogBundle:Post:index }\n</code></pre>\n<p>Como em qualquer padr\u00e3o de roteamento, voc\u00ea pode definir placeholders, requisitos e valores default.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n * @Route("/{id}", requirements={"id" = "d+"}, defaults={"foo" = "bar"})\n */\npublic function showAction($id) {\n}\n</code></pre>\n<p>Voc\u00ea tamb\u00e9m pode fazer correspond\u00eancia com mais de um URL definindo anota\u00e7\u00f5es <code>@Route</code>adicionais.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n * @Route("/", defaults={"id" = 1})\n * @Route("/{id}")\n */\npublic function showAction($id) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">Activation</p><p>Os roteamentos precisam ser importados para estarem ativos, como qualquer outro recurso de roteamento (observe o tipo de anota\u00e7\u00e3o).</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n# app/config/routing.yml\n\n# importa roteamentos de uma classe de controlador\npost:\n\\    resource: "@SensioBlogBundle/Controller/PostController.php"\n    type:     annotation\n</code></pre>\n<p>Voc\u00ea pode tamb\u00e9m importar todo um diret\u00f3rio.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n# importa roteamentos de um diret\u00f3rio do controlador\nblog:\n    resource: "@SensioBlogBundle/Controller"\n    type:     annotation\n</code></pre>\n<p>Como acontece com qualquer outro recurso, voc\u00ea pode "montar" os roteamentos sob um determinado prefixo.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\npost:\n    resource: "@SensioBlogBundle/Controller/PostController.php"\n    prefix:   /blog\n    type:     annotation\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">Nome do Roteamento</p><p>Um roteamento definido com a anota\u00e7\u00e3o <code>@Roteamento</code> recebe um nome default composto do nome do pacote, do nome do controlador e do nome da a\u00e7\u00e3o. No exemplo acima, seria <code>sensio_blog_post_index</code>.</p><p>O atributo <code>name</code> pode ser usado para substituir esse nome de roteamento default.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n * @Route("/", name="blog_home")\n */\npublic function indexAction() {\n     ...\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">Prefixo do Roteamento</p><p>Uma anota\u00e7\u00e3o <code>@Route</code> em uma classe de controlador define um prefixo para todos os roteamentos da a\u00e7\u00e3o.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n * @Route("/blog")\n */\nclass PostController extends Controller {\n    /**\n     * @Route("/{id}")\n     */\n    public function showAction($id) {\n    }\n}\n</code></pre>\n<p>A a\u00e7\u00e3o <code>show</code> agora \u00e9 mapeada para o padr\u00e3o <code>/blog/{id}</code>.</p>
   10.11 +#MethodTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Method</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>H\u00e1 uma anota\u00e7\u00e3o de atalho <code>@Method</code> para especificar o m\u00e9todo HTTP permitido para o roteamento. Para us\u00e1-lo, importe o namespace da anota\u00e7\u00e3o <code>Method</code>.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationMethod;\n\n/**\n* @Route("/blog")\n*/\nclass PostController extends Controller {\n/**\n* @Route("/edit/{id}")\n* @Method({"GET", "POST"})\n*/\npublic function editAction($id) {\n}\n}\n</code></pre>\n<p>A a\u00e7\u00e3o <code>edit</code> agora \u00e9 mapeada para o padr\u00e3o <code>/blog/edit/{id}</code> se o m\u00e9todo HTTP usado for <code>GET</code> ou <code>POST</code>.</p><p>A anota\u00e7\u00e3o <code>@Method</code> s\u00f3 \u00e9 considerada quando uma a\u00e7\u00e3o \u00e9 anotada com <code>@Route</code>.</p>
   10.12 +#ParamConverterTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@ParamConverter</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>A anota\u00e7\u00e3o <code>@ParamConverter</code> chama <i>conversores</i> para converter par\u00e2metros de solicita\u00e7\u00e3o em objetos. Esses objetos s\u00e3o armazenados como atributos de solicita\u00e7\u00e3o e portanto podem ser injetados como argumentos de m\u00e9todo do controlador.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationParamConverter;\n\n/**\n * @Route("/blog/{id}")\n * @ParamConverter("post", class="SensioBlogBundle:Post")\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>V\u00e1rias coisas acontecem de forma oculta:</p><ul><li>O conversor tenta obter um objeto <code>SensioBlogBundle:Post</code> nos atributos da solicita\u00e7\u00e3o (os atributos da solicita\u00e7\u00e3o v\u00eam de placeholders de roteamento -- aqui <code>id</code>);</li><li>Se nenhum objeto <code>Postar</code> for encontrado, uma <code>Resposta</code> <code>404</code> ser\u00e1 gerada;</li><li>Se um objeto <code>Postar</code> for encontrado, um novo atributo de solicita\u00e7\u00e3o <code>postar</code> ser\u00e1 definido (acess\u00edvel via <code>$request->attributes->get('post')</code>);</li><li>Como acontece com qualquer outro atributo de solicita\u00e7\u00e3o, ele \u00e9 automaticamente injetado no controlador quando presente na assinatura do m\u00e9todo.</li></ul><p>Se voc\u00ea usar as dicas de tipo como no exemplo acima, poder\u00e1 at\u00e9 mesmo omitir totalmente a anota\u00e7\u00e3o <code>@ParamConverter</code>.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n autom\u00e1tico com assinatura de m\u00e9todo\nfun\u00e7\u00e3o p\u00fablica showAction(Post $post) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">Conversores Incorporados</p><p>O pacote s\u00f3 tem um conversor incorporado, o <code>Doctrine</code> one.</p><p><b><code>Doctrine</code> Converter</b></p><p>Por default, o conversor <code>Doctrine</code> usa o gerenciador de identidades default. Isso pode ser configurado com a op\u00e7\u00e3o <code>entity_manager</code>.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationParamConverter;\n\n/**\n * @Route("/blog/{id}")\n * @ParamConverter("post", class="SensioBlogBundle:Post", options={"entity_manager" = "foo"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">Criando um Conversor</p><p>Todos os conversores devem implementar o <code>ParamConverterInterface</code>.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nnamespace SensioBundleFrameworkExtraBundleRequestParamConverter;\n\nuse SensioBundleFrameworkExtraBundleConfigurationConfigurationInterface;\nuse SymfonyComponentHttpFoundationRequest;\n\ninterface ParamConverterInterface {\n    function apply(Request $request, ConfigurationInterface $configuration);\n\n    function supports(ConfigurationInterface $configuration);\n}\n</code></pre>\n<p>O m\u00e9todo <code>supports()</code> deve retornar <code>true</code> quando \u00e9 capaz de converter a configura\u00e7\u00e3o dada (uma inst\u00e2ncia de <code>ParamConverter</code>).</p><p>A inst\u00e2ncia <code>ParamConverter</code> tem tr\u00eas informa\u00e7\u00f5es sobre a anota\u00e7\u00e3o:</p><table border="0"><tr><td valign="top"><b><code>nome</code></b></td><td>O nome do atributo.</td></tr><tr><td valign="top"><b><code>classe</code></b></td><td>O nome da classe do atributo (pode ser qualquer string que represente um nome de classe).</td></tr><tr><td valign="top"><b><code>op\u00e7\u00f5es</code></b></td><td>Um array de op\u00e7\u00f5es.</td></tr></table>\n<p>O m\u00e9todo <code>apply()</code> \u00e9 chamado sempre que uma configura\u00e7\u00e3o \u00e9 suportada. Com base nos atributos da solicita\u00e7\u00e3o, ele deve definir um atributo chamado <code>$configuration->getName()</code>, que armazena um objeto da classe <code>$configuration->getClass()</code>.</p>
   10.13  Symfony2ExtraAnnotationsProvider.name=Extra Symfony2
   10.14 -TemplateTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Template</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>A anota\u00e7\u00e3o <code>@Template</code> associa um controlador com um nome de modelo. </p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationTemplate;\n\n/**\n * @Template("SensioBlogBundle:Post:show")\n */\npublic function showAction($id) {\n     get the Post\n    $post = ...;\n\n    return array('post' => $post);\n}\n</code></pre>\n<p>Ao usar a anota\u00e7\u00e3o <code>@Template</code>, o controlador deve retornar um array de par\u00e2metros para passar \u00e0 view em vez de um objeto <code>Response</code>.</p><p>Se o modelo for nomeado de acordo com os nomes do controlador e da a\u00e7\u00e3o, o que \u00e9 o caso do exemplo acima, voc\u00ea poder\u00e1 at\u00e9 mesmo omitir o valor da anota\u00e7\u00e3o.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n * @Template\n */\npublic function showAction($id) {\n     get the Post\n    $post = ...;\n\n    return array('post' => $post);\n}\n</code></pre>\n<p>E, se os \u00fanicos par\u00e2metros a serem passados ao modelo forem argumentos de m\u00e9todo, voc\u00ea poder\u00e1 usar o atributo <code>vars</code> em vez de retornar um array. Isso \u00e9 muito \u00fatil em combina\u00e7\u00e3o com a anota\u00e7\u00e3o <code>@ParamConverter</code>.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n * @ParamConverter("post", class="SensioBlogBundle:Post")\n * @Template("SensioBlogBundle:Post:show", vars={"post"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>que, gra\u00e7as \u00e0s conven\u00e7\u00f5es, equivale \u00e0 configura\u00e7\u00e3o a seguir.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n * @Template(vars={"post"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>Voc\u00ea pode ser ainda mais conciso, j\u00e1 que todos os argumentos do m\u00e9todo s\u00e3o automaticamente passados ao modelo se o m\u00e9todo retornar <code>null</code> e nenhum atributo <code>vars</code> for definido.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n * @Template\n */\npublic function showAction(Post $post) {\n}\n</code></pre>
   10.15 -CacheTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Cache</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>A anota\u00e7\u00e3o <code>@Cache</code> facilita a defini\u00e7\u00e3o do cache HTTP.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationCache;\n\n/**\n * @Cache(expires="tomorrow")\n */\npublic function indexAction() {\n}\n</code></pre>\n<p>Voc\u00ea tamb\u00e9m pode usar a anota\u00e7\u00e3o em uma classe para definir o cache para todos os m\u00e9todos.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n * @Cache(expires="tomorrow")\n */\nclass BlogController extends Controller {\n}\n</code></pre>\n<p>Quando houver um conflito entre a configura\u00e7\u00e3o da classe e a configura\u00e7\u00e3o do m\u00e9todo, o \u00faltimo substitui o primeiro.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n * @Cache(expires="tomorrow")\n */\nclass BlogController extends Controller {\n    /**\n     * @Cache(expires="+2 days")\n     */\n    public function indexAction() {\n    }\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">Atributos</p><p>Aqui est\u00e1 uma lista de atributos aceitos e seu equivalente de cabe\u00e7alho HTTP:</p><table border="0"><tr><td><code>@Cache(expires="tomorrow")</code></td><td><code>$response->setExpires()</code></td></tr><tr><td><code>@Cache(smaxage="15")</code></td><td><code>$response->setSharedMaxAge()</code></td></tr><tr><td><code>@Cache(maxage="15")</code></td><td><code>$response->setMaxAge()</code></td></tr></table>
   10.16 +#TemplateTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Template</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>A anota\u00e7\u00e3o <code>@Template</code> associa um controlador com um nome de modelo. </p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationTemplate;\n\n/**\n * @Template("SensioBlogBundle:Post:show")\n */\npublic function showAction($id) {\n     get the Post\n    $post = ...;\n\n    return array('post' => $post);\n}\n</code></pre>\n<p>Ao usar a anota\u00e7\u00e3o <code>@Template</code>, o controlador deve retornar um array de par\u00e2metros para passar \u00e0 view em vez de um objeto <code>Response</code>.</p><p>Se o modelo for nomeado de acordo com os nomes do controlador e da a\u00e7\u00e3o, o que \u00e9 o caso do exemplo acima, voc\u00ea poder\u00e1 at\u00e9 mesmo omitir o valor da anota\u00e7\u00e3o.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n * @Template\n */\npublic function showAction($id) {\n     get the Post\n    $post = ...;\n\n    return array('post' => $post);\n}\n</code></pre>\n<p>E, se os \u00fanicos par\u00e2metros a serem passados ao modelo forem argumentos de m\u00e9todo, voc\u00ea poder\u00e1 usar o atributo <code>vars</code> em vez de retornar um array. Isso \u00e9 muito \u00fatil em combina\u00e7\u00e3o com a anota\u00e7\u00e3o <code>@ParamConverter</code>.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n * @ParamConverter("post", class="SensioBlogBundle:Post")\n * @Template("SensioBlogBundle:Post:show", vars={"post"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>que, gra\u00e7as \u00e0s conven\u00e7\u00f5es, equivale \u00e0 configura\u00e7\u00e3o a seguir.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n * @Template(vars={"post"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>Voc\u00ea pode ser ainda mais conciso, j\u00e1 que todos os argumentos do m\u00e9todo s\u00e3o automaticamente passados ao modelo se o m\u00e9todo retornar <code>null</code> e nenhum atributo <code>vars</code> for definido.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n * @Template\n */\npublic function showAction(Post $post) {\n}\n</code></pre>
   10.17 +#CacheTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Cache</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>A anota\u00e7\u00e3o <code>@Cache</code> facilita a defini\u00e7\u00e3o do cache HTTP.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationCache;\n\n/**\n * @Cache(expires="tomorrow")\n */\npublic function indexAction() {\n}\n</code></pre>\n<p>Voc\u00ea tamb\u00e9m pode usar a anota\u00e7\u00e3o em uma classe para definir o cache para todos os m\u00e9todos.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n * @Cache(expires="tomorrow")\n */\nclass BlogController extends Controller {\n}\n</code></pre>\n<p>Quando houver um conflito entre a configura\u00e7\u00e3o da classe e a configura\u00e7\u00e3o do m\u00e9todo, o \u00faltimo substitui o primeiro.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\n/**\n * @Cache(expires="tomorrow")\n */\nclass BlogController extends Controller {\n    /**\n     * @Cache(expires="+2 days")\n     */\n    public function indexAction() {\n    }\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">Atributos</p><p>Aqui est\u00e1 uma lista de atributos aceitos e seu equivalente de cabe\u00e7alho HTTP:</p><table border="0"><tr><td><code>@Cache(expires="tomorrow")</code></td><td><code>$response->setExpires()</code></td></tr><tr><td><code>@Cache(smaxage="15")</code></td><td><code>$response->setSharedMaxAge()</code></td></tr><tr><td><code>@Cache(maxage="15")</code></td><td><code>$response->setMaxAge()</code></td></tr></table>
   10.18  
    11.1 --- a/src/pt_BR/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/security/Bundle_pt_BR.properties	Tue Nov 20 16:21:50 2012 +0900
    11.2 +++ b/src/pt_BR/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/security/Bundle_pt_BR.properties	Sat Dec 08 17:09:53 2012 +0900
    11.3 @@ -38,11 +38,11 @@
    11.4  #
    11.5  # Portions Copyrighted 2012 Sun Microsystems, Inc.
    11.6  
    11.7 -PreAuthorizeTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@PreAuthorize</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>Esta anota\u00e7\u00e3o permite definir uma express\u00e3o que \u00e9 executada antes de invocar um m\u00e9todo.</p><p style="font-weight: bold; font-size: 1.1em">Exemple</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationPreAuthorize;\n\nclass MyService {\n    /**\n     * @PreAuthorize("hasRole('A') ou (hasRole('B') e hasRole('C'))")\n     */\n    public function secureMethod() {\n        // ...\n    }\n}\n</code></pre>
    11.8 -SecureTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Secure</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3on</p><p>Esta anota\u00e7\u00e3o permite definir quem tem permiss\u00e3o para invocar um m\u00e9todo.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecure;\n\nclass MyService {\n    /**\n     * @Secure(roles="ROLE_USER, ROLE_FOO, ROLE_ADMIN")\n     */\n    public function secureMethod() {\n        // ...\n    }\n}\n</code></pre>
    11.9 -SecureParamTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SecureParam</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>Esta anota\u00e7\u00e3o permite definir restri\u00e7\u00f5es para os par\u00e2metros que s\u00e3o e passados para o m\u00e9todo. Isso s\u00f3 \u00e9 \u00fatil se os par\u00e2metros forem objetos de dom\u00ednio.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecureParam;\n\nclass MyService {\n    /**\n     * @SecureParam(name="comment", permissions="EDIT, DELETE")\n     * @SecureParam(name="post", permissions="OWNER")\n     */\n    public function secureMethod($comment, $post) {\n        // ...\n    }\n}\n</code></pre>
   11.10 -SecureReturnTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SecureReturn</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>Esta anota\u00e7\u00e3o permite definir restri\u00e7\u00f5es para o valor que \u00e9 retornado pelo m\u00e9todo. Isso tamb\u00e9m \u00e9 \u00fatil apenas se o valor retornado for um objeto de dom\u00ednio.</p><p style="font-weight: bold; font-size: 1.1em">Example</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecureReturn;\n\nclass MyService {\n    /**\n     * @SecureReturn(permissions="VIEW")\n     */\n    public function secureMethod() {\n        // ...\n\n        return $domainObject;\n    }\n}\n</code></pre>
   11.11 -RunAsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@RunAs</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>Esta anota\u00e7\u00e3o permite especificar atribui\u00e7\u00f5es que s\u00e3o adicionadas apenas durante a invoca\u00e7\u00e3o do m\u00e9todo. Essas atribui\u00e7\u00f5es n\u00e3o ser\u00e3o levadas em considera\u00e7\u00e3o para antes ou depois das decis\u00f5es de acesso de invoca\u00e7\u00e3o.</p><p>Isso \u00e9 normalmente usado para implementar uma camada de servi\u00e7o de duas camadas em que voc\u00ea tem servi\u00e7os p\u00fablicos e privados e os servi\u00e7os privados s\u00f3 dever\u00e3o ser invocados por meio de um servi\u00e7o p\u00fablico espec\u00edfico.</p><p style="font-weight: bold; font-size: 1.1em">Example</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecure;\nuse JMSSecurityExtraBundleAnnotationRunAs;\n\nclass MyPrivateService {\n    /**\n     * @Secure(roles="ROLE_PRIVATE_SERVICE")\n     */\n    public function aMethodOnlyToBeInvokedThroughASpecificChannel() {\n        // ...\n    }\n}\n\nclass MyPublicService {\n    protected $myPrivateService;\n\n    /**\n     * @Secure(roles="ROLE_USER")\n     * @RunAs(roles="ROLE_PRIVATE_SERVICE")\n     */\n    public function canBeInvokedFromOtherServices() {\n        return $this->myPrivateService->aMethodOnlyToBeInvokedThroughASpecificChannel();\n    }\n}\n</code></pre>
   11.12 -SatisfiesParentSecurityPolicyTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SatisfiesParentSecurityPolicy</p><p style="font-weight: bold; font-size: 1.1em">Description</p><p>This must be defined on a method that overrides a method which has security metadata. It is there to ensure that you are aware the security of the overridden method cannot be enforced anymore, and that you must copy over all annotations if you want to keep them.</p>
   11.13 +#PreAuthorizeTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@PreAuthorize</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>Esta anota\u00e7\u00e3o permite definir uma express\u00e3o que \u00e9 executada antes de invocar um m\u00e9todo.</p><p style="font-weight: bold; font-size: 1.1em">Exemple</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationPreAuthorize;\n\nclass MyService {\n    /**\n     * @PreAuthorize("hasRole('A') ou (hasRole('B') e hasRole('C'))")\n     */\n    public function secureMethod() {\n        // ...\n    }\n}\n</code></pre>
   11.14 +#SecureTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Secure</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3on</p><p>Esta anota\u00e7\u00e3o permite definir quem tem permiss\u00e3o para invocar um m\u00e9todo.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecure;\n\nclass MyService {\n    /**\n     * @Secure(roles="ROLE_USER, ROLE_FOO, ROLE_ADMIN")\n     */\n    public function secureMethod() {\n        // ...\n    }\n}\n</code></pre>
   11.15 +#SecureParamTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SecureParam</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>Esta anota\u00e7\u00e3o permite definir restri\u00e7\u00f5es para os par\u00e2metros que s\u00e3o e passados para o m\u00e9todo. Isso s\u00f3 \u00e9 \u00fatil se os par\u00e2metros forem objetos de dom\u00ednio.</p><p style="font-weight: bold; font-size: 1.1em">Exemplo</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecureParam;\n\nclass MyService {\n    /**\n     * @SecureParam(name="comment", permissions="EDIT, DELETE")\n     * @SecureParam(name="post", permissions="OWNER")\n     */\n    public function secureMethod($comment, $post) {\n        // ...\n    }\n}\n</code></pre>
   11.16 +#SecureReturnTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SecureReturn</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>Esta anota\u00e7\u00e3o permite definir restri\u00e7\u00f5es para o valor que \u00e9 retornado pelo m\u00e9todo. Isso tamb\u00e9m \u00e9 \u00fatil apenas se o valor retornado for um objeto de dom\u00ednio.</p><p style="font-weight: bold; font-size: 1.1em">Example</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecureReturn;\n\nclass MyService {\n    /**\n     * @SecureReturn(permissions="VIEW")\n     */\n    public function secureMethod() {\n        // ...\n\n        return $domainObject;\n    }\n}\n</code></pre>
   11.17 +#RunAsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@RunAs</p><p style="font-weight: bold; font-size: 1.1em">Descri\u00e7\u00e3o</p><p>Esta anota\u00e7\u00e3o permite especificar atribui\u00e7\u00f5es que s\u00e3o adicionadas apenas durante a invoca\u00e7\u00e3o do m\u00e9todo. Essas atribui\u00e7\u00f5es n\u00e3o ser\u00e3o levadas em considera\u00e7\u00e3o para antes ou depois das decis\u00f5es de acesso de invoca\u00e7\u00e3o.</p><p>Isso \u00e9 normalmente usado para implementar uma camada de servi\u00e7o de duas camadas em que voc\u00ea tem servi\u00e7os p\u00fablicos e privados e os servi\u00e7os privados s\u00f3 dever\u00e3o ser invocados por meio de um servi\u00e7o p\u00fablico espec\u00edfico.</p><p style="font-weight: bold; font-size: 1.1em">Example</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecure;\nuse JMSSecurityExtraBundleAnnotationRunAs;\n\nclass MyPrivateService {\n    /**\n     * @Secure(roles="ROLE_PRIVATE_SERVICE")\n     */\n    public function aMethodOnlyToBeInvokedThroughASpecificChannel() {\n        // ...\n    }\n}\n\nclass MyPublicService {\n    protected $myPrivateService;\n\n    /**\n     * @Secure(roles="ROLE_USER")\n     * @RunAs(roles="ROLE_PRIVATE_SERVICE")\n     */\n    public function canBeInvokedFromOtherServices() {\n        return $this->myPrivateService->aMethodOnlyToBeInvokedThroughASpecificChannel();\n    }\n}\n</code></pre>
   11.18 +#SatisfiesParentSecurityPolicyTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SatisfiesParentSecurityPolicy</p><p style="font-weight: bold; font-size: 1.1em">Description</p><p>This must be defined on a method that overrides a method which has security metadata. It is there to ensure that you are aware the security of the overridden method cannot be enforced anymore, and that you must copy over all annotations if you want to keep them.</p>
   11.19  Symfony2SecurityAnnotationsProvider.name=Seguran\u00e7a Symfony2
   11.20  
    12.1 --- a/src/pt_BR/webcommon/web-clientproject/web-clientproject/org/netbeans/modules/web/clientproject/sites/Bundle_pt_BR.properties	Tue Nov 20 16:21:50 2012 +0900
    12.2 +++ b/src/pt_BR/webcommon/web-clientproject/web-clientproject/org/netbeans/modules/web/clientproject/sites/Bundle_pt_BR.properties	Sat Dec 08 17:09:53 2012 +0900
    12.3 @@ -38,31 +38,31 @@
    12.4  #
    12.5  # Portions Copyrighted 2012 Sun Microsystems, Inc.
    12.6  
    12.7 -BootstrapSiteInitializr.name=Initializr: Bootstrap
    12.8 +#BootstrapSiteInitializr.name=Initializr: Bootstrap
    12.9  ClassicSiteInitializr.name=Initializr: Cl\u00e1ssico
   12.10  LBL_SiteZipPanel_Select=Selecionar
   12.11  LBL_SiteZipPanel_Title=Selecionar Arquivo Compactado do Modelo
   12.12 -ResponsiveSiteInitializr.name=Initializr: Responsivo
   12.13 +#ResponsiveSiteInitializr.name=Initializr: Responsivo
   12.14  SiteAngularJsSeed.description=Modelo de site para projetos AngularJS.
   12.15 -SiteAngularJsSeed.name=Semente do AngularJS
   12.16 +#SiteAngularJsSeed.name=Semente do AngularJS
   12.17  SiteHelper.error.emptyZip=O arquivo ZIP com modelo de site est\u00e1 vazio ou o download falhou.
   12.18  # {0} - file name
   12.19  SiteHelper.progress.download=Fazendo download do arquivo {0}
   12.20  # {0} - file name
   12.21  SiteHelper.progress.unzip=Descompactando o arquivo {0}
   12.22  SiteHtml5Boilerplate.description=Modelo de site de html5boilerplate.com. Vers\u00e3o: 3.0.2
   12.23 -SiteHtml5Boilerplate.name=HTML5 Boilerplate v3.0.2
   12.24 +#SiteHtml5Boilerplate.name=HTML5 Boilerplate v3.0.2
   12.25  SiteHtml5BoilerplateV4.description=Modelo de site de html5boilerplate.com. Vers\u00e3o: 4.0.0
   12.26 -SiteHtml5BoilerplateV4.name=HTML5 Boilerplate v4.0.0
   12.27 +#SiteHtml5BoilerplateV4.name=HTML5 Boilerplate v4.0.0
   12.28  SiteInitializr.description=Modelo de site de initializr.com.
   12.29  SiteInitializrPanel.jLabel1.text=Modelo de site de initializr.com:
   12.30 -SiteInitializrPanel.classicRadioButton.text=Cl\u00e1ssico
   12.31 -SiteInitializrPanel.responsiveRadioButton.text=Responsivo
   12.32 -SiteInitializrPanel.bootstrapRadioButton.text=Bootstrap 2
   12.33 +#SiteInitializrPanel.classicRadioButton.text=Cl\u00e1ssico
   12.34 +#SiteInitializrPanel.responsiveRadioButton.text=Responsivo
   12.35 +#SiteInitializrPanel.bootstrapRadioButton.text=Bootstrap 2
   12.36  SiteMobileBoilerplate.description=Modelo de site de html5boilerplate.com/mobile. Vers\u00e3o: 3.0
   12.37 -SiteMobileBoilerplate.name=Boilerplate M\u00f3vel
   12.38 +#SiteMobileBoilerplate.name=Boilerplate M\u00f3vel
   12.39  SiteTwitterBootstrap.description=Modelo de site de twitter.github.com/bootstrap
   12.40 -SiteTwitterBootstrap.name=Bootstrap do Twitter
   12.41 +#SiteTwitterBootstrap.name=Bootstrap do Twitter
   12.42  SiteZip.error.template.invalid=O arquivo de modelo \u00e9 inv\u00e1lido (http://... ou arquivo local esperado).
   12.43  SiteZip.error.template.missing=O arquivo de modelo deve ser especificado.
   12.44  SiteZip.error.template.notZip=O arquivo de modelo deve ser um arquivo compactado ZIP (*.zip).
    13.1 --- a/src/ru/ide/tasklist-todo/tasklist-todo/org/netbeans/modules/tasklist/todo/settings/Bundle_ru.properties	Tue Nov 20 16:21:50 2012 +0900
    13.2 +++ b/src/ru/ide/tasklist-todo/tasklist-todo/org/netbeans/modules/tasklist/todo/settings/Bundle_ru.properties	Sat Dec 08 17:09:53 2012 +0900
    13.3 @@ -11,5 +11,5 @@
    13.4  LBL_Options=\u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439
    13.5  HINT_Options=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 ToDo \u0432 \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432\u043e\u043c \u043e\u043a\u043d\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439.
    13.6  
    13.7 -KW_ToDo=\u0417\u0430\u0434\u0430\u0447\u0430, @\u0437\u0430\u0434\u0430\u0447\u0430, \u0417\u0430\u0434\u0430\u0447\u0438, FIXME, PENDING, \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439, \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0434\u0430\u0447, \u0421\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0434\u0430\u0447
    13.8 +#KW_ToDo=\u0417\u0430\u0434\u0430\u0447\u0430, @\u0437\u0430\u0434\u0430\u0447\u0430, \u0417\u0430\u0434\u0430\u0447\u0438, FIXME, PENDING, \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439, \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0434\u0430\u0447, \u0421\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0434\u0430\u0447
    13.9  
    14.1 --- a/src/ru/php/php-project/php-project/org/netbeans/modules/php/project/phpunit/annotations/Bundle_ru.properties	Tue Nov 20 16:21:50 2012 +0900
    14.2 +++ b/src/ru/php/php-project/php-project/org/netbeans/modules/php/project/phpunit/annotations/Bundle_ru.properties	Sat Dec 08 17:09:53 2012 +0900
    14.3 @@ -38,18 +38,18 @@
    14.4  #
    14.5  # Portions Copyrighted 2012 Sun Microsystems, Inc.
    14.6  
    14.7 -AssertTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@assert</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0412 \u0431\u043b\u043e\u043a\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>@assert</code> \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0445, \u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u043f\u043e\u043b\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @assert (0, 0) == 0\n */\npublic function add($a, $b) {\n return $a + $b;\n}\n</code></pre>\n<p>\u042d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 \u043a\u043e\u0434 \u0442\u0435\u0441\u0442\u0430, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e</p>\n<pre><code>\n/**\n * Generated from @assert (0, 0) == 0.\n */\npublic function testAdd() {\n $o = new Calculator;\n $this->assertEquals(0, $o->add(0, 0));\n}\n</code></pre>
    14.8 -BackupGlobalsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@backupGlobals</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0435\u0441\u0442\u043e\u0432, \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432 \u043a\u043b\u0430\u0441\u0441 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @backupGlobals disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n // ...\n}\n</code></pre>\n<p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>@backupGlobals</code> \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u0435\u043b\u043a\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439.</p>\n<p style="font-weight: bold; font-size: 1.1em">Example</p><pre></code>\n/**\n\\ * @backupGlobals disabled\n\\ */\nclass MyTest extends PHPUnit_Framework_TestCase {\n /**\n * @backupGlobals enabled\n */\n public function testThatInteractsWithGlobalVariables() {\n // ...\n }\n}\n</code></pre>
    14.9 -BackupStaticAttributesTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@backupStaticAttributes</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0435\u0441\u0442\u043e\u0432, \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432 \u043a\u043b\u0430\u0441\u0441 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @backupStaticAttributes disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n // ...\n}\n</code></pre>\n<p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>@backupStaticAttributes</code> \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u042d\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u0435\u043b\u043a\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439.</p>\n<p style="font-weight: bold; font-size: 1.1em">Example</p><pre><code>\n/**\n\\ * @backupStaticAttributes disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n /**\n * @backupStaticAttributes enabled\n */\n public function testThatInteractsWithStaticAttributes() {\n // ...\n }\n}\n</code></pre>
   14.10 -CodeCoverageIgnoreTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@codeCoverageIgnore</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>@codeCoverageIgnore</code> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u0438\u0437 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u0434\u0430 \u0442\u0435\u0441\u0442\u0430\u043c\u0438.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n\\ * @codeCoverageIgnore\n */\nclass Foo {\n public function bar() {\n }\n}\n\nclass Bar {\n /**\n * @codeCoverageIgnore\n */\n public function foo() {\n }\n}\n</code></pre>
   14.11 -CoversTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@covers</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>@covers</code> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u043e\u0434\u0435 \u0442\u0435\u0441\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0442\u0435\u0441\u0442\u0430.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n\\ * @covers BankAccount::getBalance\n\\ */\npublic function testBalanceIsInitiallyZero() {\n\\ $this->assertEquals(0, $this->ba->getBalance());\n}\n</code></pre>\n<p>\u041f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u044d\u0442\u043e\u0439 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0438 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432.</p>\n<table border="0"><tr><th align="left">\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f</th><th align="left">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</th></tr><tr><td align="left" valign="top"><code>@covers\u00a0;ClassName::methodName</code></td><td align="left">\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434.</td></tr><tr><td align="left" valign="top"><code>@covers\u00a0;ClassName</code></td><td align="left">\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430.</td></tr><tr><td align="left" valign="top"><code>@covers\u00a0;ClassName&lt;extended&gt;</code></td><td align="left" valign="top">\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0435\u0433\u043e \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432.</td></tr><tr><td align="left" valign="top"><code>@covers\u00a0;ClassName::&lt;public&gt;</code></td><td align="left">\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430.</td></tr><tr><td align="left" valign="top"><code>@covers\u00a0;ClassName::&lt;protected&gt;</code></td><td align="left">\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430.</td></tr><tr><td align="left" valign="top"><code>@covers\u00a0;ClassName::&lt;private&gt;</code></td><td align="left">\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u0447\u0430\u0441\u0442\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430.</td></tr><tr><td align="left" valign="top"><code>@covers\u00a0;ClassName::&lt;!public&gt;</code></td><td align="left">\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438.</td></tr><tr><td align="left" valign="top"><code>@covers\u00a0;ClassName::&lt;!protected&gt;</code></td><td align="left">\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u043c\u0438.</td></tr><tr><td align="left" valign="top"><code>@covers\u00a0;ClassName::&lt;!private&gt;</code></td><td align="left">\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0447\u0430\u0441\u0442\u043d\u044b\u043c\u0438.</td></tr></table>
   14.12 -DataProviderTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@dataProvider</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u041c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b. \u042d\u0442\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 <code>@dataProvider</code>.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nclass DataTest extends PHPUnit_Framework_TestCase {\n /**\n * @dataProvider provider\n */\n public function testAdd($a, $b, $c) {\n $this->assertEquals($c, $a + $b);\n }\n\n public function provider() {\n return array(\n array(0, 0, 0),\n array(0, 1, 1),\n array(1, 0, 1),\n array(1, 1, 3)\n );\n }\n}\n</code></pre>
   14.13 -DependsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@depends</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>PHPUnit \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u044f\u0432\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 \u0442\u0435\u0441\u0442\u0430. \u042d\u0442\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0442\u0435\u0441\u0442\u0430, \u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0442\u0435\u0441\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044e \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u043c.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nclass DependencyFailureTest extends PHPUnit_Framework_TestCase {\n public function testOne() {\n $this->assertTrue(FALSE);\n }\n\n /**\n * @depends testOne\n */\n public function testTwo() {\n }\n}\n</code></pre>
   14.14 -ExpectedExceptionTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedException</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>@expectedException</code>, \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nclass ExceptionTest extends PHPUnit_Framework_TestCase {\n /**\n * @expectedException InvalidArgumentException\n */\n public function testException() {\n }\n}\n</code></pre>
   14.15 -ExpectedExceptionCodeTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedExceptionCode</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@expectedExceptionCode</code> \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 <code>@expectedException</code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e \u043a\u043e\u0434\u0443 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0435\u0433\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\ /**\n\\ * @expectedException MyException\n\\ * @expectedExceptionCode 20\n\\ */\n\\ public function testExceptionHasErrorcode20() {\n\\ throw new MyException('Some Message', 20);\n\\ }\n}\n</code></pre>
   14.16 -ExpectedExceptionMessageTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedExceptionMessage</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@expectedExceptionMessage</code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e <code>@expectedExceptionCode</code>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044e \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n /**\n * @expectedException MyException\n * @expectedExceptionMessage Some Message\n */\n public function testExceptionHasRightMessage() {\n throw new MyException('Some Message', 20);\n }\n}\n</code></pre>\n<p>\u041e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u043e\u0439 Message \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043d\u0435 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u044f\u0441\u044c \u043f\u0440\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u043e\u0431 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n /**\n * @expectedException MyException\n * @expectedExceptionMessage broken\n */\n public function testExceptionHasRightMessage() {\n $param = "broken";\n throw new MyException('Invalid parameter "'.$param.'".', 20);\n }\n}\n</code></pre>
   14.17 -GroupTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@group</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0435\u0433\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u0435\u0441\u0442 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043a \u043e\u0434\u043d\u043e\u0439 \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0433\u0440\u0443\u043f\u043f\u0430\u043c, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@group</code>.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n   /**\n     * @group specification\n     */\n    public function testSomething() {\n    }\n\n    /**\n     * @group regression\n     * @group bug2204\n     */\n    public function testSomethingElse() {\n    }\n}\n</code></pre>\n<p>\u041c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0433\u0440\u0443\u043f\u043f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0438 <code>-group</code> \u0438 <code>-exclude-group</code> \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043b\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432 \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 XML.</p>
   14.18 -OutputBufferingTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@outputBuffering</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>@outputBuffering</code> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0432\u044b\u0432\u043e\u0434\u0430 PHP.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @outputBuffering enabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    // ...\n}\n</code></pre>\n<p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>@outputBuffering</code> \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0432\u043e\u0434\u0430 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u0435\u043b\u043a\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439.</p>\n<p style="font-weight: bold; font-size: 1.1em">Example</p><pre><code>\n/**\n * @outputBuffering disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @outputBuffering enabled\n     */\n    public function testThatPrintsSomething() {\n        // ...\n    }\n}\n</code></pre>
   14.19 -PhpUnitAnnotationsProvider.name=PHPUnit
   14.20 -TestTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@test</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0412\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u0432 \u0438\u043c\u0435\u043d \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0442\u0435\u0441\u0442\u0430 \u0434\u043b\u044f \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0442\u0435\u0441\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>@test</code> \u0432 \u0431\u043b\u043e\u043a\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @test\n */\npublic function initialBalanceShouldBe0() {\n    $this->assertEquals(0, $this->ba->getBalance());\n}\n</code></pre>
   14.21 +#AssertTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@assert</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0412 \u0431\u043b\u043e\u043a\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>@assert</code> \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0445, \u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u043f\u043e\u043b\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @assert (0, 0) == 0\n */\npublic function add($a, $b) {\n return $a + $b;\n}\n</code></pre>\n<p>\u042d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 \u043a\u043e\u0434 \u0442\u0435\u0441\u0442\u0430, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e</p>\n<pre><code>\n/**\n * Generated from @assert (0, 0) == 0.\n */\npublic function testAdd() {\n $o = new Calculator;\n $this->assertEquals(0, $o->add(0, 0));\n}\n</code></pre>
   14.22 +#BackupGlobalsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@backupGlobals</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0435\u0441\u0442\u043e\u0432, \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432 \u043a\u043b\u0430\u0441\u0441 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @backupGlobals disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n // ...\n}\n</code></pre>\n<p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>@backupGlobals</code> \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u0435\u043b\u043a\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439.</p>\n<p style="font-weight: bold; font-size: 1.1em">Example</p><pre></code>\n/**\n\\ * @backupGlobals disabled\n\\ */\nclass MyTest extends PHPUnit_Framework_TestCase {\n /**\n * @backupGlobals enabled\n */\n public function testThatInteractsWithGlobalVariables() {\n // ...\n }\n}\n</code></pre>
   14.23 +#BackupStaticAttributesTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@backupStaticAttributes</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0435\u0441\u0442\u043e\u0432, \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432 \u043a\u043b\u0430\u0441\u0441 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @backupStaticAttributes disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n // ...\n}\n</code></pre>\n<p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>@backupStaticAttributes</code> \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u042d\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u0435\u043b\u043a\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439.</p>\n<p style="font-weight: bold; font-size: 1.1em">Example</p><pre><code>\n/**\n\\ * @backupStaticAttributes disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n /**\n * @backupStaticAttributes enabled\n */\n public function testThatInteractsWithStaticAttributes() {\n // ...\n }\n}\n</code></pre>
   14.24 +#CodeCoverageIgnoreTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@codeCoverageIgnore</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>@codeCoverageIgnore</code> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u0438\u0437 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u0434\u0430 \u0442\u0435\u0441\u0442\u0430\u043c\u0438.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n\\ * @codeCoverageIgnore\n */\nclass Foo {\n public function bar() {\n }\n}\n\nclass Bar {\n /**\n * @codeCoverageIgnore\n */\n public function foo() {\n }\n}\n</code></pre>
   14.25 +#CoversTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@covers</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>@covers</code> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u043e\u0434\u0435 \u0442\u0435\u0441\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0442\u0435\u0441\u0442\u0430.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n\\ * @covers BankAccount::getBalance\n\\ */\npublic function testBalanceIsInitiallyZero() {\n\\ $this->assertEquals(0, $this->ba->getBalance());\n}\n</code></pre>\n<p>\u041f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u044d\u0442\u043e\u0439 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0438 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432.</p>\n<table border="0"><tr><th align="left">\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f</th><th align="left">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</th></tr><tr><td align="left" valign="top"><code>@covers\u00a0;ClassName::methodName</code></td><td align="left">\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434.</td></tr><tr><td align="left" valign="top"><code>@covers\u00a0;ClassName</code></td><td align="left">\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430.</td></tr><tr><td align="left" valign="top"><code>@covers\u00a0;ClassName&lt;extended&gt;</code></td><td align="left" valign="top">\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0435\u0433\u043e \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432.</td></tr><tr><td align="left" valign="top"><code>@covers\u00a0;ClassName::&lt;public&gt;</code></td><td align="left">\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430.</td></tr><tr><td align="left" valign="top"><code>@covers\u00a0;ClassName::&lt;protected&gt;</code></td><td align="left">\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430.</td></tr><tr><td align="left" valign="top"><code>@covers\u00a0;ClassName::&lt;private&gt;</code></td><td align="left">\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u0447\u0430\u0441\u0442\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430.</td></tr><tr><td align="left" valign="top"><code>@covers\u00a0;ClassName::&lt;!public&gt;</code></td><td align="left">\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438.</td></tr><tr><td align="left" valign="top"><code>@covers\u00a0;ClassName::&lt;!protected&gt;</code></td><td align="left">\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u043c\u0438.</td></tr><tr><td align="left" valign="top"><code>@covers\u00a0;ClassName::&lt;!private&gt;</code></td><td align="left">\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0447\u0430\u0441\u0442\u043d\u044b\u043c\u0438.</td></tr></table>
   14.26 +#DataProviderTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@dataProvider</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u041c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b. \u042d\u0442\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 <code>@dataProvider</code>.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nclass DataTest extends PHPUnit_Framework_TestCase {\n /**\n * @dataProvider provider\n */\n public function testAdd($a, $b, $c) {\n $this->assertEquals($c, $a + $b);\n }\n\n public function provider() {\n return array(\n array(0, 0, 0),\n array(0, 1, 1),\n array(1, 0, 1),\n array(1, 1, 3)\n );\n }\n}\n</code></pre>
   14.27 +#DependsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@depends</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>PHPUnit \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u044f\u0432\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 \u0442\u0435\u0441\u0442\u0430. \u042d\u0442\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0442\u0435\u0441\u0442\u0430, \u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0442\u0435\u0441\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044e \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u043c.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nclass DependencyFailureTest extends PHPUnit_Framework_TestCase {\n public function testOne() {\n $this->assertTrue(FALSE);\n }\n\n /**\n * @depends testOne\n */\n public function testTwo() {\n }\n}\n</code></pre>
   14.28 +#ExpectedExceptionTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedException</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>@expectedException</code>, \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nclass ExceptionTest extends PHPUnit_Framework_TestCase {\n /**\n * @expectedException InvalidArgumentException\n */\n public function testException() {\n }\n}\n</code></pre>
   14.29 +#ExpectedExceptionCodeTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedExceptionCode</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@expectedExceptionCode</code> \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 <code>@expectedException</code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e \u043a\u043e\u0434\u0443 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0435\u0433\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n\\ /**\n\\ * @expectedException MyException\n\\ * @expectedExceptionCode 20\n\\ */\n\\ public function testExceptionHasErrorcode20() {\n\\ throw new MyException('Some Message', 20);\n\\ }\n}\n</code></pre>
   14.30 +#ExpectedExceptionMessageTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedExceptionMessage</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@expectedExceptionMessage</code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e <code>@expectedExceptionCode</code>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044e \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n /**\n * @expectedException MyException\n * @expectedExceptionMessage Some Message\n */\n public function testExceptionHasRightMessage() {\n throw new MyException('Some Message', 20);\n }\n}\n</code></pre>\n<p>\u041e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u043e\u0439 Message \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043d\u0435 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u044f\u0441\u044c \u043f\u0440\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u043e\u0431 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n /**\n * @expectedException MyException\n * @expectedExceptionMessage broken\n */\n public function testExceptionHasRightMessage() {\n $param = "broken";\n throw new MyException('Invalid parameter "'.$param.'".', 20);\n }\n}\n</code></pre>
   14.31 +#GroupTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@group</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0435\u0433\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u0435\u0441\u0442 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043a \u043e\u0434\u043d\u043e\u0439 \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0433\u0440\u0443\u043f\u043f\u0430\u043c, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@group</code>.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n   /**\n     * @group specification\n     */\n    public function testSomething() {\n    }\n\n    /**\n     * @group regression\n     * @group bug2204\n     */\n    public function testSomethingElse() {\n    }\n}\n</code></pre>\n<p>\u041c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0433\u0440\u0443\u043f\u043f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0438 <code>-group</code> \u0438 <code>-exclude-group</code> \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043b\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432 \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 XML.</p>
   14.32 +#OutputBufferingTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@outputBuffering</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>@outputBuffering</code> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0432\u044b\u0432\u043e\u0434\u0430 PHP.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @outputBuffering enabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    // ...\n}\n</code></pre>\n<p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>@outputBuffering</code> \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0432\u043e\u0434\u0430 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u0435\u043b\u043a\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439.</p>\n<p style="font-weight: bold; font-size: 1.1em">Example</p><pre><code>\n/**\n * @outputBuffering disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @outputBuffering enabled\n     */\n    public function testThatPrintsSomething() {\n        // ...\n    }\n}\n</code></pre>
   14.33 +#PhpUnitAnnotationsProvider.name=PHPUnit
   14.34 +#TestTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@test</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0412\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u0432 \u0438\u043c\u0435\u043d \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0442\u0435\u0441\u0442\u0430 \u0434\u043b\u044f \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0442\u0435\u0441\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>@test</code> \u0432 \u0431\u043b\u043e\u043a\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @test\n */\npublic function initialBalanceShouldBe0() {\n    $this->assertEquals(0, $this->ba->getBalance());\n}\n</code></pre>
   14.35  
    15.1 --- a/src/ru/php/php-project/php-project/org/netbeans/modules/php/project/ui/options/Bundle_ru.properties	Tue Nov 20 16:21:50 2012 +0900
    15.2 +++ b/src/ru/php/php-project/php-project/org/netbeans/modules/php/project/ui/options/Bundle_ru.properties	Sat Dec 08 17:09:53 2012 +0900
    15.3 @@ -204,5 +204,5 @@
    15.4  PhpAnnotationsPanel.noteLabel.text=<html><i>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435.</i></html>
    15.5  PhpAnnotationsPanel.infoLabel.text=\u042d\u0442\u0438 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u0430\u0432\u0442\u043e\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u043a\u043e\u0434\u0430.
    15.6  ## sample annotation
    15.7 -SampleTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@sample</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p>\n<p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@sample</code> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p>\n<pre><code>\n/**\n * @sample(param1, param2 = value1)\n */\npublic function test($a, $b) {\n    return $a + $b;\n}\n</code></pre>\n
    15.8 +#SampleTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@sample</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p>\n<p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@sample</code> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438.</p>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p>\n<pre><code>\n/**\n * @sample(param1, param2 = value1)\n */\npublic function test($a, $b) {\n    return $a + $b;\n}\n</code></pre>\n
    15.9  
    16.1 --- a/src/ru/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/extra/Bundle_ru.properties	Tue Nov 20 16:21:50 2012 +0900
    16.2 +++ b/src/ru/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/extra/Bundle_ru.properties	Sat Dec 08 17:09:53 2012 +0900
    16.3 @@ -38,10 +38,10 @@
    16.4  #
    16.5  # Portions Copyrighted 2012 Sun Microsystems, Inc.
    16.6  
    16.7 -RouteTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Route</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@Route</code> \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\n\nclass PostController extends Controller {\n    /**\n     * @Route("/")\n     */\n    public function indexAction() {\n        // ...\n    }\n}\n</code></pre>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 <code></code> \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 <code>Post</code> \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 URL-\u0430\u0434\u0440\u0435\u0441 <code>/</code>.  \u042d\u0442\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 YAML.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nblog_home:\n    pattern:  /\n    defaults: { _controller: SensioBlogBundle:Post:index }\n</code></pre>\n<p>\u041a\u0430\u043a \u0432 \u043b\u044e\u0431\u043e\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043c\u0435\u0442\u043a\u0438-\u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u0438, \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @Route("/{id}", requirements={"id" = "d+"}, defaults={"foo" = "bar"})\n */\npublic function showAction($id) {\n}\n</code></pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0433\u043e URL-\u0430\u0434\u0440\u0435\u0441\u0430, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 <code>@Route</code>.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @Route("/", defaults={"id" = 1})\n * @Route("/{id}")\n */\npublic function showAction($id) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f</p><p>\u0414\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043a\u0430\u043a \u043b\u044e\u0431\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 (\u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0439\u0442\u0435 \u0442\u0438\u043f \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438).</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n# app/config/routing.yml\n\n# \u0438\u043c\u043f\u043e\u0440\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0438\u0437 \u043a\u043b\u0430\u0441\u0441\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\npost:\n    resource: "@SensioBlogBundle/Controller/PostController.php"\n    type:     annotation\n</code></pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0446\u0435\u043b\u0438\u043a\u043e\u043c.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n# \u0438\u043c\u043f\u043e\u0440\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\nblog:\n    resource: "@SensioBlogBundle/Controller"\n    type:     annotation\n</code></pre>\n<p>\u041a\u0430\u043a \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u043c\u043e\u0436\u043d\u043e "\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c" \u043f\u043e\u0434 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\npost:\n    resource: "@SensioBlogBundle/Controller/PostController.php"\n    prefix:   /blog\n    type:     annotation\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u0418\u043c\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430</p><p>\u041c\u0430\u0440\u0448\u0440\u0443\u0442, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 <code>@Route</code> >, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u043c\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0438\u0437 \u0438\u043c\u0435\u043d\u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0438\u043c\u0435\u043d\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438 \u0438\u043c\u0435\u043d\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0414\u043b\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 <code>sensio_blog_post_index</code>.</p><p>\u0414\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u043c\u0435\u043d\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>name</code>.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @Route("/", name="blog_home")\n */\npublic function indexAction() {\n    // ...\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0435\u0444\u0438\u043a\u0441 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@Route</code> \u043a\u043b\u0430\u0441\u0441\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @Route("/blog")\n */\nclass PostController extends Controller {\n    /**\n     * @Route("/{id}")\n     */\n    public function showAction($id) {\n    }\n}\n</code></pre>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 <code>show</code> \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d <code>/blog/{id}</code>.</p>
    16.8 -MethodTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Method</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u042d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@Method</code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u0430 HTTP, \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043b\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430. \u0414\u043b\u044f \u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 <code>Method</code>.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationMethod;\n\n/**\n* @Route("/blog")\n*/\nclass PostController extends Controller {\n/**\n* @Route("/edit/{id}")\n* @Method({"GET", "POST"})\n*/\npublic function editAction($id) {\n}\n}\n</code></pre>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 <code>edit</code> \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c <code>/blog/edit/{id}</code>, \u0435\u0441\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 HTTP \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 <code>GET</code> \u0438\u043b\u0438 <code>POST</code>.</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@Method</code> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>@Route</code>.</p>
    16.9 -ParamConverterTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@ParamConverter</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@ParamConverter</code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <i>\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438</i> \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u042d\u0442\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043a\u0430\u043a \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0432\u043d\u0435\u0434\u0440\u044f\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u0435\u0442\u043e\u0434\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.</p><p style="font-weight: bold; font-size: 1.1em">Example</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationParamConverter;\n\n/**\n * @Route("/blog/{id}")\n * @ParamConverter("post", class="SensioBlogBundle:Post")\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432:</p><ul><li>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0437 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 <code>SensioBlogBundle:Post</code> (\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u0435\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 - \u0437\u0434\u0435\u0441\u044c <code>id</code>);</li><li>\u0415\u0441\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 <code>Post</code> \u043d\u0430\u0439\u0442\u0438 \u043d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f <code>404</code> <code>Response</code> ;</li><li>\u0415\u0441\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 <code>Post</code> \u043d\u0430\u0439\u0434\u0435\u043d, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 <code>post</code> (\u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>$request->attributes->get('post')</code>);</li><li>\u041a\u0430\u043a \u0438 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043e\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0435 \u043c\u0435\u0442\u043e\u0434\u0430.</li></ul><p>\u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043e\u043a \u0442\u0438\u043f\u043e\u0432, \u043a\u0430\u043a \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>@ParamConverter</code>.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n// \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u043e\u0439 \u043c\u0435\u0442\u043e\u0434\u0430\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438</p><p>\u041d\u0430\u0431\u043e\u0440 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438\u043c\u0435\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, <code>Doctrine</code>.</p><p><b><code>Doctrine</code> \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c </b></p><p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c <code>Doctrine</code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439. \u041e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <code>entity_manager</code>.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationParamConverter;\n\n/**\n * @Route("/blog/{id}")\n * @ParamConverter("post", class="SensioBlogBundle:Post", options={"entity_manager" = "foo"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439</p><p>\u0412\u0441\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>ParamConverterInterface</code>.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nnamespace SensioBundleFrameworkExtraBundleRequestParamConverter;\n\nuse SensioBundleFrameworkExtraBundleConfigurationConfigurationInterface;\nuse SymfonyComponentHttpFoundationRequest;\n\ninterface ParamConverterInterface {\n    function apply(Request $request, ConfigurationInterface $configuration);\n\n    function supports(ConfigurationInterface $configuration);\n}\n</code></pre>\n<p>\u041c\u0435\u0442\u043e\u0434 <code>supports()</code> \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u0435\u0440\u043d\u0443\u0442\u044c <code>true</code>, \u0435\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c (\u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 <code>ParamConverter</code>).</p><p>\u042d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 <code>ParamConverter</code> \u0438\u043c\u0435\u0435\u0442 \u0442\u0440\u0438 \u0432\u0438\u0434\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438: </p><table border="0"><tr><td valign="top"><b><code>name</code></b></td><td>\u0418\u043c\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430.</td></tr><tr><td valign="top"><b><code>class</code></b></td><td>\u0418\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 (\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u0438\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430).</td></tr><tr><td valign="top"><b><code>options</code></b></td><td>\u041c\u0430\u0441\u0441\u0438\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.</td></tr></table>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 <code>apply()</code>. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0441 \u0438\u043c\u0435\u043d\u0435\u043d\u0435\u043c <code>$configuration->getName()</code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <code>$configuration->getClass()</code>.</p>
   16.10 +#RouteTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Route</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@Route</code> \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\n\nclass PostController extends Controller {\n    /**\n     * @Route("/")\n     */\n    public function indexAction() {\n        // ...\n    }\n}\n</code></pre>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 <code></code> \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 <code>Post</code> \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 URL-\u0430\u0434\u0440\u0435\u0441 <code>/</code>.  \u042d\u0442\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 YAML.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nblog_home:\n    pattern:  /\n    defaults: { _controller: SensioBlogBundle:Post:index }\n</code></pre>\n<p>\u041a\u0430\u043a \u0432 \u043b\u044e\u0431\u043e\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043c\u0435\u0442\u043a\u0438-\u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u0438, \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @Route("/{id}", requirements={"id" = "d+"}, defaults={"foo" = "bar"})\n */\npublic function showAction($id) {\n}\n</code></pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0433\u043e URL-\u0430\u0434\u0440\u0435\u0441\u0430, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 <code>@Route</code>.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @Route("/", defaults={"id" = 1})\n * @Route("/{id}")\n */\npublic function showAction($id) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f</p><p>\u0414\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043a\u0430\u043a \u043b\u044e\u0431\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 (\u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0439\u0442\u0435 \u0442\u0438\u043f \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438).</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n# app/config/routing.yml\n\n# \u0438\u043c\u043f\u043e\u0440\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0438\u0437 \u043a\u043b\u0430\u0441\u0441\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\npost:\n    resource: "@SensioBlogBundle/Controller/PostController.php"\n    type:     annotation\n</code></pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0446\u0435\u043b\u0438\u043a\u043e\u043c.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n# \u0438\u043c\u043f\u043e\u0440\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\nblog:\n    resource: "@SensioBlogBundle/Controller"\n    type:     annotation\n</code></pre>\n<p>\u041a\u0430\u043a \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u043c\u043e\u0436\u043d\u043e "\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c" \u043f\u043e\u0434 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\npost:\n    resource: "@SensioBlogBundle/Controller/PostController.php"\n    prefix:   /blog\n    type:     annotation\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u0418\u043c\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430</p><p>\u041c\u0430\u0440\u0448\u0440\u0443\u0442, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 <code>@Route</code> >, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u043c\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0438\u0437 \u0438\u043c\u0435\u043d\u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0438\u043c\u0435\u043d\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438 \u0438\u043c\u0435\u043d\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0414\u043b\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 <code>sensio_blog_post_index</code>.</p><p>\u0414\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u043c\u0435\u043d\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>name</code>.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @Route("/", name="blog_home")\n */\npublic function indexAction() {\n    // ...\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0435\u0444\u0438\u043a\u0441 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@Route</code> \u043a\u043b\u0430\u0441\u0441\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @Route("/blog")\n */\nclass PostController extends Controller {\n    /**\n     * @Route("/{id}")\n     */\n    public function showAction($id) {\n    }\n}\n</code></pre>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 <code>show</code> \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d <code>/blog/{id}</code>.</p>
   16.11 +#MethodTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Method</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u042d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@Method</code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u0430 HTTP, \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043b\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430. \u0414\u043b\u044f \u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 <code>Method</code>.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationMethod;\n\n/**\n* @Route("/blog")\n*/\nclass PostController extends Controller {\n/**\n* @Route("/edit/{id}")\n* @Method({"GET", "POST"})\n*/\npublic function editAction($id) {\n}\n}\n</code></pre>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 <code>edit</code> \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c <code>/blog/edit/{id}</code>, \u0435\u0441\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 HTTP \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 <code>GET</code> \u0438\u043b\u0438 <code>POST</code>.</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@Method</code> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>@Route</code>.</p>
   16.12 +#ParamConverterTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@ParamConverter</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@ParamConverter</code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <i>\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438</i> \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u042d\u0442\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043a\u0430\u043a \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0432\u043d\u0435\u0434\u0440\u044f\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u0435\u0442\u043e\u0434\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.</p><p style="font-weight: bold; font-size: 1.1em">Example</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationParamConverter;\n\n/**\n * @Route("/blog/{id}")\n * @ParamConverter("post", class="SensioBlogBundle:Post")\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432:</p><ul><li>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0437 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 <code>SensioBlogBundle:Post</code> (\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u0435\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 - \u0437\u0434\u0435\u0441\u044c <code>id</code>);</li><li>\u0415\u0441\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 <code>Post</code> \u043d\u0430\u0439\u0442\u0438 \u043d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f <code>404</code> <code>Response</code> ;</li><li>\u0415\u0441\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 <code>Post</code> \u043d\u0430\u0439\u0434\u0435\u043d, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 <code>post</code> (\u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>$request->attributes->get('post')</code>);</li><li>\u041a\u0430\u043a \u0438 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043e\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0435 \u043c\u0435\u0442\u043e\u0434\u0430.</li></ul><p>\u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043e\u043a \u0442\u0438\u043f\u043e\u0432, \u043a\u0430\u043a \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>@ParamConverter</code>.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n// \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u043e\u0439 \u043c\u0435\u0442\u043e\u0434\u0430\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438</p><p>\u041d\u0430\u0431\u043e\u0440 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438\u043c\u0435\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, <code>Doctrine</code>.</p><p><b><code>Doctrine</code> \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c </b></p><p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c <code>Doctrine</code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439. \u041e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <code>entity_manager</code>.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationParamConverter;\n\n/**\n * @Route("/blog/{id}")\n * @ParamConverter("post", class="SensioBlogBundle:Post", options={"entity_manager" = "foo"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439</p><p>\u0412\u0441\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>ParamConverterInterface</code>.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nnamespace SensioBundleFrameworkExtraBundleRequestParamConverter;\n\nuse SensioBundleFrameworkExtraBundleConfigurationConfigurationInterface;\nuse SymfonyComponentHttpFoundationRequest;\n\ninterface ParamConverterInterface {\n    function apply(Request $request, ConfigurationInterface $configuration);\n\n    function supports(ConfigurationInterface $configuration);\n}\n</code></pre>\n<p>\u041c\u0435\u0442\u043e\u0434 <code>supports()</code> \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u0435\u0440\u043d\u0443\u0442\u044c <code>true</code>, \u0435\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c (\u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 <code>ParamConverter</code>).</p><p>\u042d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 <code>ParamConverter</code> \u0438\u043c\u0435\u0435\u0442 \u0442\u0440\u0438 \u0432\u0438\u0434\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438: </p><table border="0"><tr><td valign="top"><b><code>name</code></b></td><td>\u0418\u043c\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430.</td></tr><tr><td valign="top"><b><code>class</code></b></td><td>\u0418\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 (\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u0438\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430).</td></tr><tr><td valign="top"><b><code>options</code></b></td><td>\u041c\u0430\u0441\u0441\u0438\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.</td></tr></table>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 <code>apply()</code>. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0441 \u0438\u043c\u0435\u043d\u0435\u043d\u0435\u043c <code>$configuration->getName()</code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <code>$configuration->getClass()</code>.</p>
   16.13  Symfony2ExtraAnnotationsProvider.name=\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 Symfony2
   16.14 -TemplateTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Template</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@Template</code> \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u0430.</p><p style="font-weight: bold; font-size: 1.1em">Example</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationTemplate;\n\n/**\n * @Template("SensioBlogBundle:Post:show")\n */\npublic function showAction($id) {\n    // get the Post\n    $post = ...;\n\n    return array('post' => $post);\n}\n</code></pre>\n<p>\u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 <code>@Template</code> \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>Response</code> \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435.</p><p>\u0415\u0441\u043b\u0438 \u0448\u0430\u0431\u043b\u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u043c\u044f \u043f\u043e\u0441\u043b\u0435 \u0438\u043c\u0435\u043d \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043a\u0430\u043a \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435, \u043c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @Template\n */\npublic function showAction($id) {\n    // get the Post\n    $post = ...;\n\n    return array('post' => $post);\n}\n</code></pre>\n<p>\u0415\u0441\u043b\u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d - \u044d\u0442\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u0435\u0442\u043e\u0434\u0430, \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>vars</code>. \u042d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0438 \u0441 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0435\u0439 <code>@ParamConverter</code>.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @ParamConverter("post", class="SensioBlogBundle:Post")\n * @Template("SensioBlogBundle:Post:show", vars={"post"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>\u0447\u0442\u043e, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @Template(vars={"post"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0449\u0435 \u043a\u043e\u0440\u043e\u0447\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0435\u0441\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>null</code> \u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>vars</code> \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d, \u0432\u0441\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u0435\u0442\u043e\u0434\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u0448\u0430\u0431\u043b\u043e\u043d.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @Template\n */\npublic function showAction(Post $post) {\n}\n</code></pre>
   16.15 -CacheTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Cache</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@Cache</code> \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 HTTP.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440.</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationCache;\n\n/**\n * @Cache(expires="tomorrow")\n */\npublic function indexAction() {\n}\n</code></pre>\n<p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u043c, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440.</p><pre><code>\n/**\n * @Cache(expires="tomorrow")\n */\nclass BlogController extends Controller {\n}\n</code></pre>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430 \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u043c\u0435\u0442\u043e\u0434\u0430, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0432\u0443\u044e.</p><p style="font-weight: bold; font-size: 1.1em">Example</p><pre><code>\n/**\n * @Cache(expires="tomorrow")\n */\nclass BlogController extends Controller {\n    /**\n     * @Cache(expires="+2 days")\n     */\n    public function indexAction() {\n    }\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">Attributes</p><p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0438 \u0438\u0445 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043e\u0432 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u0445 HTTP:</p><table border="0"><tr><td><code>@Cache(expires="tomorrow")</code></td><td><code>$response->setExpires()</code></td></tr><tr><td><code>@Cache(smaxage="15")</code></td><td><code>$response->setSharedMaxAge()</code></td></tr><tr><td><code>@Cache(maxage="15")</code></td><td><code>$response->setMaxAge()</code></td></tr></table>
   16.16 +#TemplateTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Template</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@Template</code> \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u0430.</p><p style="font-weight: bold; font-size: 1.1em">Example</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationTemplate;\n\n/**\n * @Template("SensioBlogBundle:Post:show")\n */\npublic function showAction($id) {\n    // get the Post\n    $post = ...;\n\n    return array('post' => $post);\n}\n</code></pre>\n<p>\u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 <code>@Template</code> \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>Response</code> \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435.</p><p>\u0415\u0441\u043b\u0438 \u0448\u0430\u0431\u043b\u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u043c\u044f \u043f\u043e\u0441\u043b\u0435 \u0438\u043c\u0435\u043d \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043a\u0430\u043a \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435, \u043c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @Template\n */\npublic function showAction($id) {\n    // get the Post\n    $post = ...;\n\n    return array('post' => $post);\n}\n</code></pre>\n<p>\u0415\u0441\u043b\u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d - \u044d\u0442\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u0435\u0442\u043e\u0434\u0430, \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>vars</code>. \u042d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0438 \u0441 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0435\u0439 <code>@ParamConverter</code>.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @ParamConverter("post", class="SensioBlogBundle:Post")\n * @Template("SensioBlogBundle:Post:show", vars={"post"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>\u0447\u0442\u043e, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @Template(vars={"post"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0449\u0435 \u043a\u043e\u0440\u043e\u0447\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0435\u0441\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>null</code> \u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>vars</code> \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d, \u0432\u0441\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u0435\u0442\u043e\u0434\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u0448\u0430\u0431\u043b\u043e\u043d.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\n/**\n * @Template\n */\npublic function showAction(Post $post) {\n}\n</code></pre>
   16.17 +#CacheTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Cache</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>@Cache</code> \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 HTTP.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440.</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationCache;\n\n/**\n * @Cache(expires="tomorrow")\n */\npublic function indexAction() {\n}\n</code></pre>\n<p>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u043c, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440.</p><pre><code>\n/**\n * @Cache(expires="tomorrow")\n */\nclass BlogController extends Controller {\n}\n</code></pre>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430 \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u043c\u0435\u0442\u043e\u0434\u0430, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0432\u0443\u044e.</p><p style="font-weight: bold; font-size: 1.1em">Example</p><pre><code>\n/**\n * @Cache(expires="tomorrow")\n */\nclass BlogController extends Controller {\n    /**\n     * @Cache(expires="+2 days")\n     */\n    public function indexAction() {\n    }\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">Attributes</p><p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0438 \u0438\u0445 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043e\u0432 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u0445 HTTP:</p><table border="0"><tr><td><code>@Cache(expires="tomorrow")</code></td><td><code>$response->setExpires()</code></td></tr><tr><td><code>@Cache(smaxage="15")</code></td><td><code>$response->setSharedMaxAge()</code></td></tr><tr><td><code>@Cache(maxage="15")</code></td><td><code>$response->setMaxAge()</code></td></tr></table>
   16.18  
    17.1 --- a/src/ru/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/security/Bundle_ru.properties	Tue Nov 20 16:21:50 2012 +0900
    17.2 +++ b/src/ru/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/security/Bundle_ru.properties	Sat Dec 08 17:09:53 2012 +0900
    17.3 @@ -38,11 +38,11 @@
    17.4  #
    17.5  # Portions Copyrighted 2012 Sun Microsystems, Inc.
    17.6  
    17.7 -PreAuthorizeTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@PreAuthorize</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u042d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationPreAuthorize;\n\nclass MyService {\n    /**\n     * @PreAuthorize("hasRole('A') or (hasRole('B') and hasRole('C'))")\n     */\n    public function secureMethod() {\n        // ...\n    }\n}\n</code></pre>
    17.8 -SecureTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Secure</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u042d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043a\u0442\u043e \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0430\u0432\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecure;\n\nclass MyService {\n    /**\n     * @Secure(roles="ROLE_USER, ROLE_FOO, ROLE_ADMIN")\n     */\n    public function secureMethod() {\n        // ...\n    }\n}\n</code></pre>
    17.9 -SecureParamTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SecureParam</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u042d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0432 \u043c\u0435\u0442\u043e\u0434 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u041e\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0434\u043e\u043c\u0435\u043d\u0430.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecureParam;\n\nclass MyService {\n    /**\n     * @SecureParam(name="comment", permissions="EDIT, DELETE")\n     * @SecureParam(name="post", permissions="OWNER")\n     */\n    public function secureMethod($comment, $post) {\n        // ...\n    }\n}\n</code></pre>
   17.10 -SecureReturnTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SecureReturn</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u042d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041e\u043d\u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0434\u043e\u043c\u0435\u043d\u0430.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecureReturn;\n\nclass MyService {\n    /**\n     * @SecureReturn(permissions="VIEW")\n     */\n    public function secureMethod() {\n        // ...\n\n        return $domainObject;\n    }\n}\n</code></pre>
   17.11 -RunAsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@RunAs</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u042d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0440\u043e\u043b\u0438, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430. \u042d\u0442\u0438 \u0440\u043e\u043b\u0438 \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0432\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u0434\u043e \u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430.</p><p>\u041e\u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043b\u0443\u0436\u0431 \u0434\u0432\u0443\u0445 \u0443\u0440\u043e\u0432\u043d\u0435\u0439, \u043a\u043e\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0438 \u0447\u0430\u0441\u0442\u043d\u044b\u0435 \u0441\u043b\u0443\u0436\u0431\u044b, \u0438 \u0447\u0430\u0441\u0442\u043d\u044b\u0435 \u0441\u043b\u0443\u0436\u0431\u044b \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u043b\u0443\u0436\u0431\u044b.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecure;\nuse JMSSecurityExtraBundleAnnotationRunAs;\n\nclass MyPrivateService {\n    /**\n     * @Secure(roles="ROLE_PRIVATE_SERVICE")\n     */\n    public function aMethodOnlyToBeInvokedThroughASpecificChannel() {\n        // ...\n    }\n}\n\nclass MyPublicService {\n    protected $myPrivateService;\n\n    /**\n     * @Secure(roles="ROLE_USER")\n     * @RunAs(roles="ROLE_PRIVATE_SERVICE")\n     */\n    public function canBeInvokedFromOtherServices() {\n        return $this->myPrivateService->aMethodOnlyToBeInvokedThroughASpecificChannel();\n    }\n}\n</code></pre>
   17.12 -SatisfiesParentSecurityPolicyTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SatisfiesParentSecurityPolicy</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u042d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043c\u0435\u0442\u043e\u0434, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u0430\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u0438\u043b\u0435\u043d\u0430, \u0438 \u0447\u0442\u043e \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0445 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c.</p>
   17.13 +#PreAuthorizeTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@PreAuthorize</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u042d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationPreAuthorize;\n\nclass MyService {\n    /**\n     * @PreAuthorize("hasRole('A') or (hasRole('B') and hasRole('C'))")\n     */\n    public function secureMethod() {\n        // ...\n    }\n}\n</code></pre>
   17.14 +#SecureTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Secure</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u042d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043a\u0442\u043e \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0430\u0432\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecure;\n\nclass MyService {\n    /**\n     * @Secure(roles="ROLE_USER, ROLE_FOO, ROLE_ADMIN")\n     */\n    public function secureMethod() {\n        // ...\n    }\n}\n</code></pre>
   17.15 +#SecureParamTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SecureParam</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u042d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0432 \u043c\u0435\u0442\u043e\u0434 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u041e\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0434\u043e\u043c\u0435\u043d\u0430.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecureParam;\n\nclass MyService {\n    /**\n     * @SecureParam(name="comment", permissions="EDIT, DELETE")\n     * @SecureParam(name="post", permissions="OWNER")\n     */\n    public function secureMethod($comment, $post) {\n        // ...\n    }\n}\n</code></pre>
   17.16 +#SecureReturnTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SecureReturn</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u042d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041e\u043d\u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0434\u043e\u043c\u0435\u043d\u0430.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecureReturn;\n\nclass MyService {\n    /**\n     * @SecureReturn(permissions="VIEW")\n     */\n    public function secureMethod() {\n        // ...\n\n        return $domainObject;\n    }\n}\n</code></pre>
   17.17 +#RunAsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@RunAs</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u042d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0440\u043e\u043b\u0438, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430. \u042d\u0442\u0438 \u0440\u043e\u043b\u0438 \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0432\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u0434\u043e \u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430.</p><p>\u041e\u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043b\u0443\u0436\u0431 \u0434\u0432\u0443\u0445 \u0443\u0440\u043e\u0432\u043d\u0435\u0439, \u043a\u043e\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0438 \u0447\u0430\u0441\u0442\u043d\u044b\u0435 \u0441\u043b\u0443\u0436\u0431\u044b, \u0438 \u0447\u0430\u0441\u0442\u043d\u044b\u0435 \u0441\u043b\u0443\u0436\u0431\u044b \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u043b\u0443\u0436\u0431\u044b.</p><p style="font-weight: bold; font-size: 1.1em">\u041f\u0440\u0438\u043c\u0435\u0440</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecure;\nuse JMSSecurityExtraBundleAnnotationRunAs;\n\nclass MyPrivateService {\n    /**\n     * @Secure(roles="ROLE_PRIVATE_SERVICE")\n     */\n    public function aMethodOnlyToBeInvokedThroughASpecificChannel() {\n        // ...\n    }\n}\n\nclass MyPublicService {\n    protected $myPrivateService;\n\n    /**\n     * @Secure(roles="ROLE_USER")\n     * @RunAs(roles="ROLE_PRIVATE_SERVICE")\n     */\n    public function canBeInvokedFromOtherServices() {\n        return $this->myPrivateService->aMethodOnlyToBeInvokedThroughASpecificChannel();\n    }\n}\n</code></pre>
   17.18 +#SatisfiesParentSecurityPolicyTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SatisfiesParentSecurityPolicy</p><p style="font-weight: bold; font-size: 1.1em">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435</p><p>\u042d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043c\u0435\u0442\u043e\u0434, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u0430\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u0438\u043b\u0435\u043d\u0430, \u0438 \u0447\u0442\u043e \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0445 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c.</p>
   17.19  Symfony2SecurityAnnotationsProvider.name=\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c Symfony2
   17.20  
    18.1 --- a/src/ru/webcommon/web-clientproject/web-clientproject/org/netbeans/modules/web/clientproject/sites/Bundle_ru.properties	Tue Nov 20 16:21:50 2012 +0900
    18.2 +++ b/src/ru/webcommon/web-clientproject/web-clientproject/org/netbeans/modules/web/clientproject/sites/Bundle_ru.properties	Sat Dec 08 17:09:53 2012 +0900
    18.3 @@ -38,31 +38,31 @@
    18.4  #
    18.5  # Portions Copyrighted 2012 Sun Microsystems, Inc.
    18.6  
    18.7 -BootstrapSiteInitializr.name=\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440: Bootstrap
    18.8 +#BootstrapSiteInitializr.name=\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440: Bootstrap
    18.9  ClassicSiteInitializr.name=\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440: Classic
   18.10  LBL_SiteZipPanel_Select=\u0412\u044b\u0431\u0440\u0430\u0442\u044c
   18.11  LBL_SiteZipPanel_Title=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0430\u0440\u0445\u0438\u0432\u0430
   18.12 -ResponsiveSiteInitializr.name=\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440: Responsive
   18.13 +#ResponsiveSiteInitializr.name=\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440: Responsive
   18.14  SiteAngularJsSeed.description=\u0428\u0430\u0431\u043b\u043e\u043d \u0441\u0430\u0439\u0442\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 AngularJS
   18.15 -SiteAngularJsSeed.name=AngularJS Seed
   18.16 +#SiteAngularJsSeed.name=AngularJS Seed
   18.17  SiteHelper.error.emptyZip=ZIP-\u0444\u0430\u0439\u043b \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c \u0441\u0430\u0439\u0442\u0430 \u043f\u0443\u0441\u0442\u043e\u0439 \u0438\u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a \u0441\u0431\u043e\u0439 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 ZIP-\u0444\u0430\u0439\u043b\u0430.
   18.18  # {0} - file name
   18.19  SiteHelper.progress.download=\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0444\u0430\u0439\u043b\u0430 {0}
   18.20  # {0} - file name
   18.21  SiteHelper.progress.unzip=\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 {0} \u0438\u0437 zip-\u0430\u0440\u0445\u0438\u0432\u0430
   18.22  SiteHtml5Boilerplate.description=\u0428\u0430\u0431\u043b\u043e\u043d \u0441\u0430\u0439\u0442\u0430 \u0438\u0437 html5boilerplate.com. \u0412\u0435\u0440\u0441\u0438\u044f: 3.0.2
   18.23 -SiteHtml5Boilerplate.name=HTML5 Boilerplate v3.0.2
   18.24 +#SiteHtml5Boilerplate.name=HTML5 Boilerplate v3.0.2
   18.25  SiteHtml5BoilerplateV4.description=\u0428\u0430\u0431\u043b\u043e\u043d \u0441\u0430\u0439\u0442\u0430 \u0438\u0437 html5boilerplate.com. \u0412\u0435\u0440\u0441\u0438\u044f: 4.0.0
   18.26 -SiteHtml5BoilerplateV4.name=HTML5 Boilerplate v4.0.0
   18.27 +#SiteHtml5BoilerplateV4.name=HTML5 Boilerplate v4.0.0
   18.28  SiteInitializr.description=\u0428\u0430\u0431\u043b\u043e\u043d \u0441\u0430\u0439\u0442\u0430 \u0438\u0437 initializr.com.
   18.29  SiteInitializrPanel.jLabel1.text=\u0428\u0430\u0431\u043b\u043e\u043d \u0441\u0430\u0439\u0442\u0430 \u0438\u0437 initializr.com:
   18.30 -SiteInitializrPanel.classicRadioButton.text=\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439
   18.31 -SiteInitializrPanel.responsiveRadioButton.text=\u041e\u0442\u0432\u0435\u0447\u0430\u0435\u0442
   18.32 -SiteInitializrPanel.bootstrapRadioButton.text=Bootstrap 2
   18.33 +#SiteInitializrPanel.classicRadioButton.text=\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439
   18.34 +#SiteInitializrPanel.responsiveRadioButton.text=\u041e\u0442\u0432\u0435\u0447\u0430\u0435\u0442
   18.35 +#SiteInitializrPanel.bootstrapRadioButton.text=Bootstrap 2
   18.36  SiteMobileBoilerplate.description=\u0428\u0430\u0431\u043b\u043e\u043d \u0441\u0430\u0439\u0442\u0430 \u0438\u0437 html5boilerplate.com/mobile. \u0412\u0435\u0440\u0441\u0438\u044f: 3.0
   18.37 -SiteMobileBoilerplate.name=Mobile Boilerplate
   18.38 +#SiteMobileBoilerplate.name=Mobile Boilerplate
   18.39  SiteTwitterBootstrap.description=\u0428\u0430\u0431\u043b\u043e\u043d \u0441\u0430\u0439\u0442\u0430 \u0438\u0437 twitter.github.com/bootstrap
   18.40 -SiteTwitterBootstrap.name=Twitter Bootstrap
   18.41 +#SiteTwitterBootstrap.name=Twitter Bootstrap
   18.42  SiteZip.error.template.invalid=\u0424\u0430\u0439\u043b \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c (\u043e\u0436\u0438\u0434\u0430\u043b\u043e\u0441\u044c http://... \u0438\u043b\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b).
   18.43  SiteZip.error.template.missing=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0448\u0430\u0431\u043b\u043e\u043d\u0430.
   18.44  SiteZip.error.template.notZip=\u0424\u0430\u0439\u043b \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f ZIP-\u0430\u0440\u0445\u0438\u0432\u043e\u043c (*.zip).
    19.1 --- a/src/zh_CN/ide/tasklist-todo/tasklist-todo/org/netbeans/modules/tasklist/todo/settings/Bundle_zh_CN.properties	Tue Nov 20 16:21:50 2012 +0900
    19.2 +++ b/src/zh_CN/ide/tasklist-todo/tasklist-todo/org/netbeans/modules/tasklist/todo/settings/Bundle_zh_CN.properties	Sat Dec 08 17:09:53 2012 +0900
    19.3 @@ -11,5 +11,5 @@
    19.4  LBL_Options=\u64cd\u4f5c\u9879
    19.5  HINT_Options=\u201c\u64cd\u4f5c\u9879\u201d\u7a97\u53e3\u4e2d ToDo \u9879\u7684\u9009\u9879\u3002
    19.6  
    19.7 -KW_ToDo=ToDo,@todo,ToDos,FIXME,PENDING,\u64cd\u4f5c\u9879,\u4efb\u52a1\u5217\u8868,\u4efb\u52a1\u5217\u8868
    19.8 +#KW_ToDo=ToDo,@todo,ToDos,FIXME,PENDING,\u64cd\u4f5c\u9879,\u4efb\u52a1\u5217\u8868,\u4efb\u52a1\u5217\u8868
    19.9  
    20.1 --- a/src/zh_CN/php/php-project/php-project/org/netbeans/modules/php/project/phpunit/annotations/Bundle_zh_CN.properties	Tue Nov 20 16:21:50 2012 +0900
    20.2 +++ b/src/zh_CN/php/php-project/php-project/org/netbeans/modules/php/project/phpunit/annotations/Bundle_zh_CN.properties	Sat Dec 08 17:09:53 2012 +0900
    20.3 @@ -38,18 +38,18 @@
    20.4  #
    20.5  # Portions Copyrighted 2012 Sun Microsystems, Inc.
    20.6  
    20.7 -AssertTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@assert</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u53ef\u4ee5\u5728\u65b9\u6cd5\u7684\u6587\u6863\u5757\u4e2d\u4f7f\u7528 <code>@assert</code> \u6807\u6ce8\u6765\u81ea\u52a8\u751f\u6210\u7b80\u5355\u800c\u6709\u610f\u4e49\u7684\u6d4b\u8bd5, \u800c\u4e0d\u662f\u4f7f\u7528\u6846\u67b6\u751f\u6210\u5668\u65f6\u7684\u4e0d\u5b8c\u6574\u6d4b\u8bd5\u7528\u4f8b\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @assert (0, 0) == 0\n */\npublic function add($a, $b) {\n    return $a + $b;\n}\n</code></pre>\n<p>\u8fd9\u4e9b\u6807\u6ce8\u8f6c\u6362\u5230\u6d4b\u8bd5\u4ee3\u7801\u4e2d, \u4f8b\u5982 </p>\n<pre><code>\n/**\n * Generated from @assert (0, 0) == 0.\n */\npublic function testAdd() {\n    $o = new Calculator;\n    $this->assertEquals(0, $o->add(0, 0));\n}\n</code></pre>
    20.8 -BackupGlobalsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@backupGlobals</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u53ef\u4ee5\u9488\u5bf9\u67d0\u4e2a\u6d4b\u8bd5\u7528\u4f8b\u7c7b\u7684\u6240\u6709\u6d4b\u8bd5\u5f7b\u5e95\u7981\u7528\u5168\u5c40\u53d8\u91cf\u7684\u5907\u4efd\u548c\u8fd8\u539f\u64cd\u4f5c\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @backupGlobals disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    // ...\n}\n</code></pre>\n<p><code>@backupGlobals</code> \u6807\u6ce8\u4e5f\u53ef\u5728\u6d4b\u8bd5\u65b9\u6cd5\u7ea7\u522b\u4e0a\u4f7f\u7528\u3002\u8fd9\u5c06\u5141\u8bb8\u5907\u4efd\u548c\u8fd8\u539f\u64cd\u4f5c\u7684\u7ec6\u7c92\u5ea6\u914d\u7f6e\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre></code>\n/**\n * @backupGlobals disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @backupGlobals enabled\n     */\n    public function testThatInteractsWithGlobalVariables() {\n        // ...\n    }\n}\n</code></pre>
    20.9 -BackupStaticAttributesTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@backupStaticAttributes</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u53ef\u4ee5\u9488\u5bf9\u67d0\u4e2a\u6d4b\u8bd5\u7528\u4f8b\u7c7b\u7684\u6240\u6709\u6d4b\u8bd5\u5f7b\u5e95\u7981\u7528\u7c7b\u7684\u9759\u6001\u5c5e\u6027\u7684\u5907\u4efd\u548c\u8fd8\u539f\u64cd\u4f5c\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @backupStaticAttributes disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    // ...\n}\n</code></pre>\n<p><code>@backupStaticAttributes</code> \u6807\u6ce8\u4e5f\u53ef\u5728\u6d4b\u8bd5\u65b9\u6cd5\u7ea7\u522b\u4e0a\u4f7f\u7528\u3002\u8fd9\u5c06\u5141\u8bb8\u5907\u4efd\u548c\u8fd8\u539f\u64cd\u4f5c\u7684\u7ec6\u7c92\u5ea6\u914d\u7f6e\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @backupStaticAttributes disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @backupStaticAttributes enabled\n     */\n    public function testThatInteractsWithStaticAttributes() {\n        // ...\n    }\n}\n</code></pre>
   20.10 -CodeCoverageIgnoreTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@codeCoverageIgnore</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p><code>@codeCoverageIgnore</code> \u6807\u6ce8\u53ef\u7528\u4e8e\u5728\u8986\u76d6\u5206\u6790\u4e2d\u6392\u9664\u4ee3\u7801\u884c\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @codeCoverageIgnore\n */\nclass Foo {\n    public function bar() {\n    }\n}\n\nclass Bar {\n    /**\n     * @codeCoverageIgnore\n     */\n    public function foo() {\n    }\n}\n</code></pre>
   20.11 -CoversTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@covers</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p><code>@covers</code> \u6807\u6ce8\u53ef\u5728\u6d4b\u8bd5\u4ee3\u7801\u4e2d\u7528\u4e8e\u6307\u5b9a\u6d4b\u8bd5\u65b9\u6cd5\u8981\u6d4b\u8bd5\u54ea\u4e9b\u65b9\u6cd5\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @covers BankAccount::getBalance\n */\npublic function testBalanceIsInitiallyZero() {\n    $this->assertEquals(0, $this->ba->getBalance());\n}\n</code></pre>\n<p>\u5982\u679c\u63d0\u4f9b, \u5219\u5c06\u53ea\u8003\u8651\u6307\u5b9a\u65b9\u6cd5\u7684\u4ee3\u7801\u8986\u76d6\u4fe1\u606f\u3002</p>\n<table border="0"><tr><th align="left">\u6807\u6ce8</th><th align="left">\u63cf\u8ff0</th></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::methodName</code></td><td align="left">\u6307\u5b9a\u6807\u6ce8\u7684\u6d4b\u8bd5\u65b9\u6cd5\u5c06\u8986\u76d6\u6307\u5b9a\u65b9\u6cd5\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName</code></td><td align="left">\u6307\u5b9a\u6807\u6ce8\u7684\u6d4b\u8bd5\u65b9\u6cd5\u5c06\u8986\u76d6\u7ed9\u5b9a\u7c7b\u7684\u6240\u6709\u65b9\u6cd5\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName&lt;extended&gt;</code></td><td align="left" valign="top">\u6307\u5b9a\u6807\u6ce8\u7684\u6d4b\u8bd5\u65b9\u6cd5\u5c06\u8986\u76d6\u7ed9\u5b9a\u7c7b\u53ca\u5176\u7236\u7c7b\u548c\u63a5\u53e3\u7684\u6240\u6709\u65b9\u6cd5\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;public&gt;</code></td><td align="left">\u6307\u5b9a\u6807\u6ce8\u7684\u6d4b\u8bd5\u65b9\u6cd5\u5c06\u8986\u76d6\u7ed9\u5b9a\u7c7b\u7684\u6240\u6709\u516c\u5171\u65b9\u6cd5\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;protected&gt;</code></td><td align="left">\u6307\u5b9a\u6807\u6ce8\u7684\u6d4b\u8bd5\u65b9\u6cd5\u5c06\u8986\u76d6\u7ed9\u5b9a\u7c7b\u7684\u6240\u6709\u53d7\u4fdd\u62a4\u7684\u65b9\u6cd5\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;private&gt;</code></td><td align="left">\u6307\u5b9a\u6807\u6ce8\u7684\u6d4b\u8bd5\u65b9\u6cd5\u5c06\u8986\u76d6\u7ed9\u5b9a\u7c7b\u7684\u6240\u6709\u79c1\u6709\u65b9\u6cd5\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;!public&gt;</code></td><td align="left">\u6307\u5b9a\u6807\u6ce8\u7684\u65b9\u6cd5\u5c06\u8986\u76d6\u7ed9\u5b9a\u7c7b\u5e76\u975e\u516c\u5171\u7684\u6240\u6709\u65b9\u6cd5\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;!protected&gt;</code></td><td align="left">\u6307\u5b9a\u6807\u6ce8\u7684\u6d4b\u8bd5\u65b9\u6cd5\u5c06\u8986\u76d6\u7ed9\u5b9a\u7c7b\u672a\u53d7\u4fdd\u62a4\u7684\u6240\u6709\u65b9\u6cd5\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;!private&gt;</code></td><td align="left">\u6307\u5b9a\u6807\u6ce8\u7684\u6d4b\u8bd5\u65b9\u6cd5\u5c06\u8986\u76d6\u7ed9\u5b9a\u7c7b\u5e76\u975e\u79c1\u6709\u7684\u6240\u6709\u65b9\u6cd5\u3002</td></tr></table>
   20.12 -DataProviderTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@dataProvider</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u6d4b\u8bd5\u65b9\u6cd5\u53ef\u4ee5\u63a5\u53d7\u4efb\u610f\u53c2\u6570\u3002\u8fd9\u4e9b\u53c2\u6570\u7531\u6570\u636e\u63d0\u4f9b\u5668\u65b9\u6cd5\u63d0\u4f9b\u3002\u4f7f\u7528 <code>@dataProvider</code> \u6807\u6ce8\u6307\u5b9a\u8981\u4f7f\u7528\u7684\u6570\u636e\u63d0\u4f9b\u5668\u65b9\u6cd5\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nclass DataTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @dataProvider provider\n     */\n    public function testAdd($a, $b, $c) {\n        $this->assertEquals($c, $a + $b);\n    }\n\n    public function provider() {\n        return array(\n          array(0, 0, 0),\n          array(0, 1, 1),\n          array(1, 0, 1),\n          array(1, 1, 3)\n        );\n    }\n}\n</code></pre>
   20.13 -DependsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@depends</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>PHPUnit \u652f\u6301\u5728\u6d4b\u8bd5\u65b9\u6cd5\u4e4b\u95f4\u58f0\u660e\u663e\u5f0f\u4f9d\u8d56\u5173\u7cfb\u3002\u8fd9\u79cd\u7c7b\u578b\u7684\u4f9d\u8d56\u5173\u7cfb\u4e0d\u5b9a\u4e49\u6d4b\u8bd5\u65b9\u6cd5\u7684\u6267\u884c\u987a\u5e8f, \u4f46\u5141\u8bb8\u751f\u6210\u5668\u8fd4\u56de\u6d4b\u8bd5\u8bbe\u5907\u5b9e\u4f8b, \u5e76\u5c06\u5176\u4f20\u9012\u5230\u76f8\u5173\u7684\u4f7f\u7528\u8005\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nclass DependencyFailureTest extends PHPUnit_Framework_TestCase {\n    public function testOne() {\n        $this->assertTrue(FALSE);\n    }\n\n    /**\n     * @depends testOne\n     */\n    public function testTwo() {\n    }\n}\n</code></pre>
   20.14 -ExpectedExceptionTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedException</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u4f7f\u7528 <code>@expectedException</code> \u6807\u6ce8\u6d4b\u8bd5\u662f\u5426\u5728\u6d4b\u8bd5\u4ee3\u7801\u5185\u90e8\u629b\u51fa\u5f02\u5e38\u9519\u8bef\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nclass ExceptionTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @expectedException InvalidArgumentException\n     */\n    public function testException() {\n    }\n}\n</code></pre>
   20.15 -ExpectedExceptionCodeTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedExceptionCode</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p><code>@expectedExceptionCode</code> \u6807\u6ce8\u4e0e <code>@expectedException</code> \u4e00\u8d77\u4f7f\u7528, \u5141\u8bb8\u5bf9\u629b\u51fa\u5f02\u5e38\u9519\u8bef\u7684\u9519\u8bef\u4ee3\u7801\u505a\u51fa\u65ad\u8a00, \u4ece\u800c\u80fd\u591f\u5c06\u8303\u56f4\u7f29\u5c0f\u5230\u7279\u5b9a\u5f02\u5e38\u9519\u8bef\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @expectedException     MyException\n     * @expectedExceptionCode 20\n     */\n    public function testExceptionHasErrorcode20() {\n        throw new MyException('Some Message', 20);\n    }\n}\n</code></pre>
   20.16 -ExpectedExceptionMessageTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedExceptionMessage</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p><code>@expectedExceptionMessage</code> \u6807\u6ce8\u7684\u4f5c\u7528\u65b9\u5f0f\u7c7b\u4f3c\u4e8e <code>@expectedExceptionCode</code>, \u4f7f\u7528\u5b83\u53ef\u4ee5\u5bf9\u5f02\u5e38\u9519\u8bef\u7684\u9519\u8bef\u6d88\u606f\u4f5c\u51fa\u65ad\u8a00\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @expectedException        MyException\n     * @expectedExceptionMessage Some Message\n     */\n    public function testExceptionHasRightMessage() {\n        throw new MyException('Some Message', 20);\n    }\n}\n</code></pre>\n<p>\u6240\u9700\u6d88\u606f\u53ef\u4ee5\u4e3a\u5f02\u5e38\u9519\u8bef\u6d88\u606f\u7684\u5b50\u5b57\u7b26\u4e32\u3002\u5f53\u53ea\u9700\u65ad\u8a00\u5f02\u5e38\u9519\u8bef\u4e2d\u663e\u793a\u4f20\u5165\u7684\u7279\u5b9a\u540d\u79f0\u6216\u53c2\u6570\u800c\u4e0d\u89c2\u5bdf\u6d4b\u8bd5\u4e2d\u7684\u5b8c\u6574\u5f02\u5e38\u9519\u8bef\u6d88\u606f\u65f6, \u6b64\u9879\u975e\u5e38\u6709\u7528\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n     /**\n      * @expectedException        MyException\n      * @expectedExceptionMessage broken\n      */\n     public function testExceptionHasRightMessage() {\n         $param = "broken";\n         throw new MyException('Invalid parameter "'.$param.'".', 20);\n     }\n}\n</code></pre>
   20.17 -GroupTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@group</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u53ef\u4ee5\u4f7f\u7528 <code>@group</code> \u6807\u6ce8\u5c06\u6d4b\u8bd5\u6807\u8bb0\u4e3a\u5c5e\u4e8e\u4e00\u4e2a\u6216\u591a\u4e2a\u7ec4\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @group specification\n     */\n    public function testSomething() {\n    }\n\n    /**\n     * @group regression\n     * @group bug2204\n     */\n    public function testSomethingElse() {\n    }\n}\n</code></pre>\n<p>\u53ef\u4ee5\u4f7f\u7528\u547d\u4ee4\u884c\u8fd0\u884c\u7a0b\u5e8f\u7684 <code>--group</code> \u548c <code>--exclude-group</code> \u5207\u6362, \u6216\u8005\u4f7f\u7528\u76f8\u5e94\u7684 XML \u914d\u7f6e\u6587\u4ef6\u6307\u4ee4, \u6839\u636e\u7ec4\u9009\u62e9\u8981\u6267\u884c\u7684\u6d4b\u8bd5\u3002</p>
   20.18 -OutputBufferingTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@outputBuffering</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p><code>@outputBuffering</code> \u6807\u6ce8\u53ef\u7528\u4e8e\u63a7\u5236 PHP \u7684\u8f93\u51fa\u7f13\u51b2\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @outputBuffering enabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    // ...\n}\n</code></pre>\n<p><code>@outputBuffering</code> \u6807\u6ce8\u4e5f\u53ef\u5728\u6d4b\u8bd5\u65b9\u6cd5\u7ea7\u522b\u4e0a\u4f7f\u7528\u3002\u8fd9\u53ef\u4ee5\u5141\u8bb8\u5bf9\u8f93\u51fa\u7f13\u51b2\u8fdb\u884c\u7ec6\u7c92\u5ea6\u63a7\u5236\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @outputBuffering disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @outputBuffering enabled\n     */\n    public function testThatPrintsSomething() {\n        // ...\n    }\n}\n</code></pre>
   20.19 -PhpUnitAnnotationsProvider.name=PHPUnit
   20.20 -TestTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@test</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u4f5c\u4e3a\u4e00\u79cd\u4f7f\u7528\u6d4b\u8bd5\u4e3a\u6d4b\u8bd5\u65b9\u6cd5\u540d\u6dfb\u52a0\u524d\u7f00\u7684\u66ff\u4ee3\u65b9\u6cd5, \u53ef\u4ee5\u5728\u65b9\u6cd5\u7684 docblock \u4e2d\u4f7f\u7528 <code>@test</code> \u6807\u6ce8\u4ee5\u5c06\u5176\u6807\u8bb0\u4e3a\u6d4b\u8bd5\u65b9\u6cd5\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @test\n */\npublic function initialBalanceShouldBe0() {\n    $this->assertEquals(0, $this->ba->getBalance());\n}\n</code></pre>
   20.21 +#AssertTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@assert</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u53ef\u4ee5\u5728\u65b9\u6cd5\u7684\u6587\u6863\u5757\u4e2d\u4f7f\u7528 <code>@assert</code> \u6807\u6ce8\u6765\u81ea\u52a8\u751f\u6210\u7b80\u5355\u800c\u6709\u610f\u4e49\u7684\u6d4b\u8bd5, \u800c\u4e0d\u662f\u4f7f\u7528\u6846\u67b6\u751f\u6210\u5668\u65f6\u7684\u4e0d\u5b8c\u6574\u6d4b\u8bd5\u7528\u4f8b\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @assert (0, 0) == 0\n */\npublic function add($a, $b) {\n    return $a + $b;\n}\n</code></pre>\n<p>\u8fd9\u4e9b\u6807\u6ce8\u8f6c\u6362\u5230\u6d4b\u8bd5\u4ee3\u7801\u4e2d, \u4f8b\u5982 </p>\n<pre><code>\n/**\n * Generated from @assert (0, 0) == 0.\n */\npublic function testAdd() {\n    $o = new Calculator;\n    $this->assertEquals(0, $o->add(0, 0));\n}\n</code></pre>
   20.22 +#BackupGlobalsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@backupGlobals</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u53ef\u4ee5\u9488\u5bf9\u67d0\u4e2a\u6d4b\u8bd5\u7528\u4f8b\u7c7b\u7684\u6240\u6709\u6d4b\u8bd5\u5f7b\u5e95\u7981\u7528\u5168\u5c40\u53d8\u91cf\u7684\u5907\u4efd\u548c\u8fd8\u539f\u64cd\u4f5c\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @backupGlobals disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    // ...\n}\n</code></pre>\n<p><code>@backupGlobals</code> \u6807\u6ce8\u4e5f\u53ef\u5728\u6d4b\u8bd5\u65b9\u6cd5\u7ea7\u522b\u4e0a\u4f7f\u7528\u3002\u8fd9\u5c06\u5141\u8bb8\u5907\u4efd\u548c\u8fd8\u539f\u64cd\u4f5c\u7684\u7ec6\u7c92\u5ea6\u914d\u7f6e\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre></code>\n/**\n * @backupGlobals disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @backupGlobals enabled\n     */\n    public function testThatInteractsWithGlobalVariables() {\n        // ...\n    }\n}\n</code></pre>
   20.23 +#BackupStaticAttributesTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@backupStaticAttributes</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u53ef\u4ee5\u9488\u5bf9\u67d0\u4e2a\u6d4b\u8bd5\u7528\u4f8b\u7c7b\u7684\u6240\u6709\u6d4b\u8bd5\u5f7b\u5e95\u7981\u7528\u7c7b\u7684\u9759\u6001\u5c5e\u6027\u7684\u5907\u4efd\u548c\u8fd8\u539f\u64cd\u4f5c\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @backupStaticAttributes disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    // ...\n}\n</code></pre>\n<p><code>@backupStaticAttributes</code> \u6807\u6ce8\u4e5f\u53ef\u5728\u6d4b\u8bd5\u65b9\u6cd5\u7ea7\u522b\u4e0a\u4f7f\u7528\u3002\u8fd9\u5c06\u5141\u8bb8\u5907\u4efd\u548c\u8fd8\u539f\u64cd\u4f5c\u7684\u7ec6\u7c92\u5ea6\u914d\u7f6e\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @backupStaticAttributes disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @backupStaticAttributes enabled\n     */\n    public function testThatInteractsWithStaticAttributes() {\n        // ...\n    }\n}\n</code></pre>
   20.24 +#CodeCoverageIgnoreTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@codeCoverageIgnore</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p><code>@codeCoverageIgnore</code> \u6807\u6ce8\u53ef\u7528\u4e8e\u5728\u8986\u76d6\u5206\u6790\u4e2d\u6392\u9664\u4ee3\u7801\u884c\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @codeCoverageIgnore\n */\nclass Foo {\n    public function bar() {\n    }\n}\n\nclass Bar {\n    /**\n     * @codeCoverageIgnore\n     */\n    public function foo() {\n    }\n}\n</code></pre>
   20.25 +#CoversTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@covers</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p><code>@covers</code> \u6807\u6ce8\u53ef\u5728\u6d4b\u8bd5\u4ee3\u7801\u4e2d\u7528\u4e8e\u6307\u5b9a\u6d4b\u8bd5\u65b9\u6cd5\u8981\u6d4b\u8bd5\u54ea\u4e9b\u65b9\u6cd5\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @covers BankAccount::getBalance\n */\npublic function testBalanceIsInitiallyZero() {\n    $this->assertEquals(0, $this->ba->getBalance());\n}\n</code></pre>\n<p>\u5982\u679c\u63d0\u4f9b, \u5219\u5c06\u53ea\u8003\u8651\u6307\u5b9a\u65b9\u6cd5\u7684\u4ee3\u7801\u8986\u76d6\u4fe1\u606f\u3002</p>\n<table border="0"><tr><th align="left">\u6807\u6ce8</th><th align="left">\u63cf\u8ff0</th></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::methodName</code></td><td align="left">\u6307\u5b9a\u6807\u6ce8\u7684\u6d4b\u8bd5\u65b9\u6cd5\u5c06\u8986\u76d6\u6307\u5b9a\u65b9\u6cd5\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName</code></td><td align="left">\u6307\u5b9a\u6807\u6ce8\u7684\u6d4b\u8bd5\u65b9\u6cd5\u5c06\u8986\u76d6\u7ed9\u5b9a\u7c7b\u7684\u6240\u6709\u65b9\u6cd5\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName&lt;extended&gt;</code></td><td align="left" valign="top">\u6307\u5b9a\u6807\u6ce8\u7684\u6d4b\u8bd5\u65b9\u6cd5\u5c06\u8986\u76d6\u7ed9\u5b9a\u7c7b\u53ca\u5176\u7236\u7c7b\u548c\u63a5\u53e3\u7684\u6240\u6709\u65b9\u6cd5\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;public&gt;</code></td><td align="left">\u6307\u5b9a\u6807\u6ce8\u7684\u6d4b\u8bd5\u65b9\u6cd5\u5c06\u8986\u76d6\u7ed9\u5b9a\u7c7b\u7684\u6240\u6709\u516c\u5171\u65b9\u6cd5\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;protected&gt;</code></td><td align="left">\u6307\u5b9a\u6807\u6ce8\u7684\u6d4b\u8bd5\u65b9\u6cd5\u5c06\u8986\u76d6\u7ed9\u5b9a\u7c7b\u7684\u6240\u6709\u53d7\u4fdd\u62a4\u7684\u65b9\u6cd5\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;private&gt;</code></td><td align="left">\u6307\u5b9a\u6807\u6ce8\u7684\u6d4b\u8bd5\u65b9\u6cd5\u5c06\u8986\u76d6\u7ed9\u5b9a\u7c7b\u7684\u6240\u6709\u79c1\u6709\u65b9\u6cd5\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;!public&gt;</code></td><td align="left">\u6307\u5b9a\u6807\u6ce8\u7684\u65b9\u6cd5\u5c06\u8986\u76d6\u7ed9\u5b9a\u7c7b\u5e76\u975e\u516c\u5171\u7684\u6240\u6709\u65b9\u6cd5\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;!protected&gt;</code></td><td align="left">\u6307\u5b9a\u6807\u6ce8\u7684\u6d4b\u8bd5\u65b9\u6cd5\u5c06\u8986\u76d6\u7ed9\u5b9a\u7c7b\u672a\u53d7\u4fdd\u62a4\u7684\u6240\u6709\u65b9\u6cd5\u3002</td></tr><tr><td align="left" valign="top"><code>@covers&nbsp;ClassName::&lt;!private&gt;</code></td><td align="left">\u6307\u5b9a\u6807\u6ce8\u7684\u6d4b\u8bd5\u65b9\u6cd5\u5c06\u8986\u76d6\u7ed9\u5b9a\u7c7b\u5e76\u975e\u79c1\u6709\u7684\u6240\u6709\u65b9\u6cd5\u3002</td></tr></table>
   20.26 +#DataProviderTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@dataProvider</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u6d4b\u8bd5\u65b9\u6cd5\u53ef\u4ee5\u63a5\u53d7\u4efb\u610f\u53c2\u6570\u3002\u8fd9\u4e9b\u53c2\u6570\u7531\u6570\u636e\u63d0\u4f9b\u5668\u65b9\u6cd5\u63d0\u4f9b\u3002\u4f7f\u7528 <code>@dataProvider</code> \u6807\u6ce8\u6307\u5b9a\u8981\u4f7f\u7528\u7684\u6570\u636e\u63d0\u4f9b\u5668\u65b9\u6cd5\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nclass DataTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @dataProvider provider\n     */\n    public function testAdd($a, $b, $c) {\n        $this->assertEquals($c, $a + $b);\n    }\n\n    public function provider() {\n        return array(\n          array(0, 0, 0),\n          array(0, 1, 1),\n          array(1, 0, 1),\n          array(1, 1, 3)\n        );\n    }\n}\n</code></pre>
   20.27 +#DependsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@depends</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>PHPUnit \u652f\u6301\u5728\u6d4b\u8bd5\u65b9\u6cd5\u4e4b\u95f4\u58f0\u660e\u663e\u5f0f\u4f9d\u8d56\u5173\u7cfb\u3002\u8fd9\u79cd\u7c7b\u578b\u7684\u4f9d\u8d56\u5173\u7cfb\u4e0d\u5b9a\u4e49\u6d4b\u8bd5\u65b9\u6cd5\u7684\u6267\u884c\u987a\u5e8f, \u4f46\u5141\u8bb8\u751f\u6210\u5668\u8fd4\u56de\u6d4b\u8bd5\u8bbe\u5907\u5b9e\u4f8b, \u5e76\u5c06\u5176\u4f20\u9012\u5230\u76f8\u5173\u7684\u4f7f\u7528\u8005\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nclass DependencyFailureTest extends PHPUnit_Framework_TestCase {\n    public function testOne() {\n        $this->assertTrue(FALSE);\n    }\n\n    /**\n     * @depends testOne\n     */\n    public function testTwo() {\n    }\n}\n</code></pre>
   20.28 +#ExpectedExceptionTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedException</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u4f7f\u7528 <code>@expectedException</code> \u6807\u6ce8\u6d4b\u8bd5\u662f\u5426\u5728\u6d4b\u8bd5\u4ee3\u7801\u5185\u90e8\u629b\u51fa\u5f02\u5e38\u9519\u8bef\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nclass ExceptionTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @expectedException InvalidArgumentException\n     */\n    public function testException() {\n    }\n}\n</code></pre>
   20.29 +#ExpectedExceptionCodeTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedExceptionCode</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p><code>@expectedExceptionCode</code> \u6807\u6ce8\u4e0e <code>@expectedException</code> \u4e00\u8d77\u4f7f\u7528, \u5141\u8bb8\u5bf9\u629b\u51fa\u5f02\u5e38\u9519\u8bef\u7684\u9519\u8bef\u4ee3\u7801\u505a\u51fa\u65ad\u8a00, \u4ece\u800c\u80fd\u591f\u5c06\u8303\u56f4\u7f29\u5c0f\u5230\u7279\u5b9a\u5f02\u5e38\u9519\u8bef\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @expectedException     MyException\n     * @expectedExceptionCode 20\n     */\n    public function testExceptionHasErrorcode20() {\n        throw new MyException('Some Message', 20);\n    }\n}\n</code></pre>
   20.30 +#ExpectedExceptionMessageTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@expectedExceptionMessage</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p><code>@expectedExceptionMessage</code> \u6807\u6ce8\u7684\u4f5c\u7528\u65b9\u5f0f\u7c7b\u4f3c\u4e8e <code>@expectedExceptionCode</code>, \u4f7f\u7528\u5b83\u53ef\u4ee5\u5bf9\u5f02\u5e38\u9519\u8bef\u7684\u9519\u8bef\u6d88\u606f\u4f5c\u51fa\u65ad\u8a00\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @expectedException        MyException\n     * @expectedExceptionMessage Some Message\n     */\n    public function testExceptionHasRightMessage() {\n        throw new MyException('Some Message', 20);\n    }\n}\n</code></pre>\n<p>\u6240\u9700\u6d88\u606f\u53ef\u4ee5\u4e3a\u5f02\u5e38\u9519\u8bef\u6d88\u606f\u7684\u5b50\u5b57\u7b26\u4e32\u3002\u5f53\u53ea\u9700\u65ad\u8a00\u5f02\u5e38\u9519\u8bef\u4e2d\u663e\u793a\u4f20\u5165\u7684\u7279\u5b9a\u540d\u79f0\u6216\u53c2\u6570\u800c\u4e0d\u89c2\u5bdf\u6d4b\u8bd5\u4e2d\u7684\u5b8c\u6574\u5f02\u5e38\u9519\u8bef\u6d88\u606f\u65f6, \u6b64\u9879\u975e\u5e38\u6709\u7528\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n     /**\n      * @expectedException        MyException\n      * @expectedExceptionMessage broken\n      */\n     public function testExceptionHasRightMessage() {\n         $param = "broken";\n         throw new MyException('Invalid parameter "'.$param.'".', 20);\n     }\n}\n</code></pre>
   20.31 +#GroupTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@group</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u53ef\u4ee5\u4f7f\u7528 <code>@group</code> \u6807\u6ce8\u5c06\u6d4b\u8bd5\u6807\u8bb0\u4e3a\u5c5e\u4e8e\u4e00\u4e2a\u6216\u591a\u4e2a\u7ec4\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @group specification\n     */\n    public function testSomething() {\n    }\n\n    /**\n     * @group regression\n     * @group bug2204\n     */\n    public function testSomethingElse() {\n    }\n}\n</code></pre>\n<p>\u53ef\u4ee5\u4f7f\u7528\u547d\u4ee4\u884c\u8fd0\u884c\u7a0b\u5e8f\u7684 <code>--group</code> \u548c <code>--exclude-group</code> \u5207\u6362, \u6216\u8005\u4f7f\u7528\u76f8\u5e94\u7684 XML \u914d\u7f6e\u6587\u4ef6\u6307\u4ee4, \u6839\u636e\u7ec4\u9009\u62e9\u8981\u6267\u884c\u7684\u6d4b\u8bd5\u3002</p>
   20.32 +#OutputBufferingTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@outputBuffering</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p><code>@outputBuffering</code> \u6807\u6ce8\u53ef\u7528\u4e8e\u63a7\u5236 PHP \u7684\u8f93\u51fa\u7f13\u51b2\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @outputBuffering enabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    // ...\n}\n</code></pre>\n<p><code>@outputBuffering</code> \u6807\u6ce8\u4e5f\u53ef\u5728\u6d4b\u8bd5\u65b9\u6cd5\u7ea7\u522b\u4e0a\u4f7f\u7528\u3002\u8fd9\u53ef\u4ee5\u5141\u8bb8\u5bf9\u8f93\u51fa\u7f13\u51b2\u8fdb\u884c\u7ec6\u7c92\u5ea6\u63a7\u5236\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @outputBuffering disabled\n */\nclass MyTest extends PHPUnit_Framework_TestCase {\n    /**\n     * @outputBuffering enabled\n     */\n    public function testThatPrintsSomething() {\n        // ...\n    }\n}\n</code></pre>
   20.33 +#PhpUnitAnnotationsProvider.name=PHPUnit
   20.34 +#TestTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@test</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u4f5c\u4e3a\u4e00\u79cd\u4f7f\u7528\u6d4b\u8bd5\u4e3a\u6d4b\u8bd5\u65b9\u6cd5\u540d\u6dfb\u52a0\u524d\u7f00\u7684\u66ff\u4ee3\u65b9\u6cd5, \u53ef\u4ee5\u5728\u65b9\u6cd5\u7684 docblock \u4e2d\u4f7f\u7528 <code>@test</code> \u6807\u6ce8\u4ee5\u5c06\u5176\u6807\u8bb0\u4e3a\u6d4b\u8bd5\u65b9\u6cd5\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @test\n */\npublic function initialBalanceShouldBe0() {\n    $this->assertEquals(0, $this->ba->getBalance());\n}\n</code></pre>
   20.35  
    21.1 --- a/src/zh_CN/php/php-project/php-project/org/netbeans/modules/php/project/ui/options/Bundle_zh_CN.properties	Tue Nov 20 16:21:50 2012 +0900
    21.2 +++ b/src/zh_CN/php/php-project/php-project/org/netbeans/modules/php/project/ui/options/Bundle_zh_CN.properties	Sat Dec 08 17:09:53 2012 +0900
    21.3 @@ -204,5 +204,5 @@
    21.4  PhpAnnotationsPanel.noteLabel.text=<html><i>\u6ce8:</i></html>
    21.5  PhpAnnotationsPanel.infoLabel.text=\u8fd9\u4e9b\u6807\u6ce8\u5728\u4ee3\u7801\u5b8c\u6210\u529f\u80fd\u4e2d\u53ef\u7528\u3002
    21.6  ## sample annotation
    21.7 -SampleTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@sample</p>\n<p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p>\n<p>\u6b64 <code>@sample</code> \u6807\u6ce8\u663e\u793a\u5982\u4f55\u6b63\u786e\u7f16\u5199\u6587\u6863\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p>\n<pre><code>\n/**\n * @sample(param1, param2 = value1)\n */\npublic function test($a, $b) {\n    return $a + $b;\n}\n</code></pre>\n
    21.8 +#SampleTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@sample</p>\n<p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p>\n<p>\u6b64 <code>@sample</code> \u6807\u6ce8\u663e\u793a\u5982\u4f55\u6b63\u786e\u7f16\u5199\u6587\u6863\u3002</p>\n<p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p>\n<pre><code>\n/**\n * @sample(param1, param2 = value1)\n */\npublic function test($a, $b) {\n    return $a + $b;\n}\n</code></pre>\n
    21.9  
    22.1 --- a/src/zh_CN/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/extra/Bundle_zh_CN.properties	Tue Nov 20 16:21:50 2012 +0900
    22.2 +++ b/src/zh_CN/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/extra/Bundle_zh_CN.properties	Sat Dec 08 17:09:53 2012 +0900
    22.3 @@ -38,10 +38,10 @@
    22.4  #
    22.5  # Portions Copyrighted 2012 Sun Microsystems, Inc.
    22.6  
    22.7 -RouteTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Route</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p><code>@Route</code> \u6807\u6ce8\u5c06\u8def\u7531\u6a21\u5f0f\u4e0e\u63a7\u5236\u5668\u8fdb\u884c\u6620\u5c04\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\n\nclass PostController extends Controller {\n    /**\n     * @Route("/")\n     */\n    public function indexAction() {\n        // ...\n    }\n}\n</code></pre>\n<p><code>Post</code> \u63a7\u5236\u5668\u7684 <code>index</code> \u64cd\u4f5c\u73b0\u5728\u6620\u5c04\u5230 <code>/</code> URL\u3002\u8fd9\u7b49\u4e8e\u4ee5\u4e0b YAML \u914d\u7f6e\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nblog_home:\n    pattern:  /\n    defaults: { _controller: SensioBlogBundle:Post:index }\n</code></pre>\n<p>\u4e0e\u4efb\u4f55\u8def\u7531\u6a21\u5f0f\u4e00\u6837, \u53ef\u4ee5\u5b9a\u4e49\u5360\u4f4d\u7b26, \u8981\u6c42\u548c\u9ed8\u8ba4\u503c\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @Route("/{id}", requirements={"id" = "d+"}, defaults={"foo" = "bar"})\n */\npublic function showAction($id) {\n}\n</code></pre>\n<p>\u8fd8\u53ef\u4ee5\u901a\u8fc7\u5b9a\u4e49\u989d\u5916\u7684 <code>@Route</code> \u6807\u6ce8\u6765\u5339\u914d\u591a\u4e2a URL\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @Route("/", defaults={"id" = 1})\n * @Route("/{id}")\n */\npublic function showAction($id) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u6fc0\u6d3b</p><p>\u9700\u8981\u5bfc\u5165\u7684\u8def\u7531\u5e94\u4e0e\u5176\u4ed6\u8def\u7531\u8d44\u6e90\u4e00\u6837\u6d3b\u52a8 (\u8bf7\u6ce8\u610f\u6807\u6ce8\u7c7b\u578b)\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n# app/config/routing.yml\n\n# \u4ece\u63a7\u5236\u5668\u7c7b\u5bfc\u5165\u8def\u7531\npost:\n    resource: "@SensioBlogBundle/Controller/PostController.php"\n    type:     annotation\n</code></pre>\n<p>\u8fd8\u53ef\u4ee5\u5bfc\u5165\u6574\u4e2a\u76ee\u5f55\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n# \u4ece\u63a7\u5236\u5668\u76ee\u5f55\u5bfc\u5165\u8def\u7531\nblog:\n    resource: "@SensioBlogBundle/Controller"\n    type:     annotation\n</code></pre>\n<p>\u5bf9\u4e8e\u4efb\u610f\u5176\u4ed6\u8d44\u6e90, \u53ef\u4ee5\u5c06\u8def\u7531 "\u88c5\u8f7d" \u5728\u7ed9\u5b9a\u524d\u7f00\u4e0b\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\npost:\n    resource: "@SensioBlogBundle/Controller/PostController.php"\n    prefix:   /blog\n    type:     annotation\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u8def\u7531\u540d\u79f0</p><p>\u4f7f\u7528 <code>@Route</code> \u6807\u6ce8\u5b9a\u4e49\u7684\u8def\u7531\u5c06\u88ab\u8d4b\u4e88\u7531\u5305\u540d\u79f0, \u63a7\u5236\u5668\u540d\u79f0\u548c\u64cd\u4f5c\u540d\u79f0\u7ec4\u6210\u7684\u9ed8\u8ba4\u540d\u79f0\u3002\u4e0a\u4f8b\u4e2d\u7684\u8be5\u540d\u79f0\u5c06\u4e3a <code>sensio_blog_post_index</code>\u3002</p><p><code>name</code> \u5c5e\u6027\u53ef\u7528\u4e8e\u8986\u76d6\u6b64\u9ed8\u8ba4\u8def\u7531\u540d\u79f0\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @Route("/", name="blog_home")\n */\npublic function indexAction() {\n    // ...\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u8def\u7531\u524d\u7f00</p><p>\u63a7\u5236\u5668\u7c7b\u4e0a\u7684 <code>@Route</code> \u6807\u6ce8\u5b9a\u4e49\u6240\u6709\u64cd\u4f5c\u8def\u7531\u7684\u524d\u7f00\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @Route("/blog")\n */\nclass PostController extends Controller {\n    /**\n     * @Route("/{id}")\n     */\n    public function showAction($id) {\n    }\n}\n</code></pre>\n<p><code>show</code> \u64cd\u4f5c\u73b0\u5728\u6620\u5c04\u5230 <code>/blog/{id}</code> \u6a21\u5f0f\u3002</p>
    22.8 -MethodTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Method</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u6709\u4e00\u4e2a\u8def\u7531\u5141\u8bb8\u7684\u4f7f\u7528 <code>@Method</code> \u6807\u6ce8\u6307\u5b9a HTTP \u65b9\u6cd5\u7684\u5feb\u6377\u65b9\u5f0f\u3002\u8981\u4f7f\u7528\u8be5\u65b9\u5f0f, \u8bf7\u5bfc\u5165 <code>Method</code> \u6807\u6ce8\u540d\u79f0\u7a7a\u95f4\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationMethod;\n\n/**\n* @Route("/blog")\n*/\nclass PostController extends Controller {\n/**\n* @Route("/edit/{id}")\n* @Method({"GET", "POST"})\n*/\npublic function editAction($id) {\n}\n}\n</code></pre>\n<p>\u5982\u679c\u4f7f\u7528\u7684 HTTP \u65b9\u6cd5\u662f <code>GET</code> \u6216 <code>POST</code>, \u5219 <code>edit</code> \u64cd\u4f5c\u73b0\u5728\u6620\u5c04\u5230 <code>/blog/edit/{id}</code> \u6a21\u5f0f\u3002</p><p>\u53ea\u6709\u5728\u4f7f\u7528 <code>@Route</code> \u6807\u6ce8\u4e86\u64cd\u4f5c\u65f6, \u624d\u8003\u8651 <code>@Method</code> \u6807\u6ce8\u3002</p>
    22.9 -ParamConverterTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@ParamConverter</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p><code>@ParamConverter</code> \u6807\u6ce8\u8c03\u7528 <i>converters</i> \u5c06\u8bf7\u6c42\u53c2\u6570\u8f6c\u6362\u4e3a\u5bf9\u8c61\u3002\u8fd9\u4e9b\u5bf9\u8c61\u4f5c\u4e3a\u8bf7\u6c42\u5c5e\u6027\u5b58\u50a8, \u56e0\u6b64\u53ef\u4ee5\u4f5c\u4e3a\u63a7\u5236\u5668\u65b9\u6cd5\u53c2\u6570\u63d2\u5165\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationParamConverter;\n\n/**\n * @Route("/blog/{id}")\n * @ParamConverter("post", class="SensioBlogBundle:Post")\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>\u5728\u8fd9\u4e00\u6a21\u5f0f\u4e0b\u53d1\u751f\u591a\u4e2a\u64cd\u4f5c: </p><ul><li>\u8f6c\u6362\u5668\u5c1d\u8bd5\u4ece\u8bf7\u6c42\u5c5e\u6027 (\u8bf7\u6c42\u5c5e\u6027\u6e90\u81ea\u8def\u7531\u5360\u4f4d\u7b26 -- \u6b64\u5904\u4e3a <code>id</code>) \u83b7\u53d6 <code>SensioBlogBundle:Post</code> \u5bf9\u8c61; </li><li>\u5982\u679c\u627e\u4e0d\u5230 <code>Post</code> \u5bf9\u8c61, \u5219\u5c06\u751f\u6210 <code>404</code> <code>Response</code>;</li><li>\u5982\u679c\u627e\u5230\u4e86 <code>Post</code> \u5bf9\u8c61, \u5219\u5c06\u5b9a\u4e49\u65b0\u7684 <code>post</code> \u8bf7\u6c42\u5c5e\u6027 (\u53ef\u901a\u8fc7 <code>$request->attributes->get('post')</code> \u8bbf\u95ee);</li><li>\u5bf9\u4e8e\u4efb\u4f55\u5176\u4ed6\u8bf7\u6c42\u5c5e\u6027, \u5982\u679c\u5b58\u5728\u4e8e\u65b9\u6cd5\u7b7e\u540d\u4e2d, \u5219\u5c06\u81ea\u52a8\u63d2\u5165\u63a7\u5236\u5668\u5185\u3002</li></ul><p>\u5982\u679c\u4f7f\u7528\u5982\u4e0a\u4f8b\u4e2d\u6240\u793a\u7684\u7c7b\u578b\u63d0\u793a, \u5219\u751a\u81f3\u53ef\u4ee5\u5c06 <code>@ParamConverter</code> \u6807\u6ce8\u4e00\u8d77\u5ffd\u7565\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n// automatic with method signature\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u5185\u7f6e\u8f6c\u6362\u5668</p><p>\u5305\u53ea\u6709\u4e00\u4e2a\u5185\u7f6e\u8f6c\u6362\u5668, \u5373 <code>Doctrine</code>\u3002</p><p><b><code>Doctrine</code> \u8f6c\u6362\u5668</b></p><p>\u9ed8\u8ba4\u60c5\u51b5\u4e0b, <code>Doctrine</code> \u8f6c\u6362\u5668\u4f7f\u7528\u9ed8\u8ba4\u5b9e\u4f53\u7ba1\u7406\u5668\u3002\u8fd9\u53ef\u4ee5\u4f7f\u7528 <code>entity_manager</code> \u9009\u9879\u914d\u7f6e\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationParamConverter;\n\n/**\n * @Route("/blog/{id}")\n * @ParamConverter("post", class="SensioBlogBundle:Post", options={"entity_manager" = "foo"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u521b\u5efa\u8f6c\u6362\u5668</p><p>\u6240\u6709\u8f6c\u6362\u5668\u5fc5\u987b\u5b9e\u73b0 <code>ParamConverterInterface</code>\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nnamespace SensioBundleFrameworkExtraBundleRequestParamConverter;\n\nuse SensioBundleFrameworkExtraBundleConfigurationConfigurationInterface;\nuse SymfonyComponentHttpFoundationRequest;\n\ninterface ParamConverterInterface {\n    function apply(Request $request, ConfigurationInterface $configuration);\n\n    function supports(ConfigurationInterface $configuration);\n}\n</code></pre>\n<p>\u5728\u80fd\u591f\u8f6c\u6362\u7ed9\u5b9a\u914d\u7f6e\u65f6 (<code>ParamConverter</code> \u5b9e\u4f8b), <code>supports()</code> \u65b9\u6cd5\u5fc5\u987b\u8fd4\u56de <code>true</code>\u3002</p><p><code>ParamConverter</code> \u5b9e\u4f8b\u6709\u4e09\u4e2a\u5173\u4e8e\u6807\u6ce8\u7684\u4fe1\u606f: </p><table border="0"><tr><td valign="top"><b><code>name</code></b></td><td>\u5c5e\u6027\u540d\u79f0\u3002</td></tr><tr><td valign="top"><b><code>class</code></b></td><td>\u5c5e\u6027\u7c7b\u540d (\u53ef\u4ee5\u4e3a\u8868\u793a\u7c7b\u540d\u7684\u4efb\u610f\u5b57\u7b26\u4e32)\u3002</td></tr><tr><td valign="top"><b><code>options</code></b></td><td>\u9009\u9879\u7684\u6570\u7ec4\u3002</td></tr></table>\n<p>\u53ea\u8981\u914d\u7f6e\u652f\u6301, \u5c31\u4f1a\u8c03\u7528 <code>apply()</code> \u65b9\u6cd5\u3002\u6839\u636e\u8bf7\u6c42\u5c5e\u6027, \u5b83\u5e94\u8bbe\u7f6e\u540d\u4e3a <code>$configuration->getName()</code> \u7684\u5c5e\u6027, \u5b58\u50a8\u7c7b <code>$configuration->getClass()</code> \u7684\u5bf9\u8c61\u3002</p>
   22.10 +#RouteTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Route</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p><code>@Route</code> \u6807\u6ce8\u5c06\u8def\u7531\u6a21\u5f0f\u4e0e\u63a7\u5236\u5668\u8fdb\u884c\u6620\u5c04\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\n\nclass PostController extends Controller {\n    /**\n     * @Route("/")\n     */\n    public function indexAction() {\n        // ...\n    }\n}\n</code></pre>\n<p><code>Post</code> \u63a7\u5236\u5668\u7684 <code>index</code> \u64cd\u4f5c\u73b0\u5728\u6620\u5c04\u5230 <code>/</code> URL\u3002\u8fd9\u7b49\u4e8e\u4ee5\u4e0b YAML \u914d\u7f6e\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nblog_home:\n    pattern:  /\n    defaults: { _controller: SensioBlogBundle:Post:index }\n</code></pre>\n<p>\u4e0e\u4efb\u4f55\u8def\u7531\u6a21\u5f0f\u4e00\u6837, \u53ef\u4ee5\u5b9a\u4e49\u5360\u4f4d\u7b26, \u8981\u6c42\u548c\u9ed8\u8ba4\u503c\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @Route("/{id}", requirements={"id" = "d+"}, defaults={"foo" = "bar"})\n */\npublic function showAction($id) {\n}\n</code></pre>\n<p>\u8fd8\u53ef\u4ee5\u901a\u8fc7\u5b9a\u4e49\u989d\u5916\u7684 <code>@Route</code> \u6807\u6ce8\u6765\u5339\u914d\u591a\u4e2a URL\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @Route("/", defaults={"id" = 1})\n * @Route("/{id}")\n */\npublic function showAction($id) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u6fc0\u6d3b</p><p>\u9700\u8981\u5bfc\u5165\u7684\u8def\u7531\u5e94\u4e0e\u5176\u4ed6\u8def\u7531\u8d44\u6e90\u4e00\u6837\u6d3b\u52a8 (\u8bf7\u6ce8\u610f\u6807\u6ce8\u7c7b\u578b)\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n# app/config/routing.yml\n\n# \u4ece\u63a7\u5236\u5668\u7c7b\u5bfc\u5165\u8def\u7531\npost:\n    resource: "@SensioBlogBundle/Controller/PostController.php"\n    type:     annotation\n</code></pre>\n<p>\u8fd8\u53ef\u4ee5\u5bfc\u5165\u6574\u4e2a\u76ee\u5f55\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n# \u4ece\u63a7\u5236\u5668\u76ee\u5f55\u5bfc\u5165\u8def\u7531\nblog:\n    resource: "@SensioBlogBundle/Controller"\n    type:     annotation\n</code></pre>\n<p>\u5bf9\u4e8e\u4efb\u610f\u5176\u4ed6\u8d44\u6e90, \u53ef\u4ee5\u5c06\u8def\u7531 "\u88c5\u8f7d" \u5728\u7ed9\u5b9a\u524d\u7f00\u4e0b\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\npost:\n    resource: "@SensioBlogBundle/Controller/PostController.php"\n    prefix:   /blog\n    type:     annotation\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u8def\u7531\u540d\u79f0</p><p>\u4f7f\u7528 <code>@Route</code> \u6807\u6ce8\u5b9a\u4e49\u7684\u8def\u7531\u5c06\u88ab\u8d4b\u4e88\u7531\u5305\u540d\u79f0, \u63a7\u5236\u5668\u540d\u79f0\u548c\u64cd\u4f5c\u540d\u79f0\u7ec4\u6210\u7684\u9ed8\u8ba4\u540d\u79f0\u3002\u4e0a\u4f8b\u4e2d\u7684\u8be5\u540d\u79f0\u5c06\u4e3a <code>sensio_blog_post_index</code>\u3002</p><p><code>name</code> \u5c5e\u6027\u53ef\u7528\u4e8e\u8986\u76d6\u6b64\u9ed8\u8ba4\u8def\u7531\u540d\u79f0\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @Route("/", name="blog_home")\n */\npublic function indexAction() {\n    // ...\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u8def\u7531\u524d\u7f00</p><p>\u63a7\u5236\u5668\u7c7b\u4e0a\u7684 <code>@Route</code> \u6807\u6ce8\u5b9a\u4e49\u6240\u6709\u64cd\u4f5c\u8def\u7531\u7684\u524d\u7f00\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @Route("/blog")\n */\nclass PostController extends Controller {\n    /**\n     * @Route("/{id}")\n     */\n    public function showAction($id) {\n    }\n}\n</code></pre>\n<p><code>show</code> \u64cd\u4f5c\u73b0\u5728\u6620\u5c04\u5230 <code>/blog/{id}</code> \u6a21\u5f0f\u3002</p>
   22.11 +#MethodTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Method</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u6709\u4e00\u4e2a\u8def\u7531\u5141\u8bb8\u7684\u4f7f\u7528 <code>@Method</code> \u6807\u6ce8\u6307\u5b9a HTTP \u65b9\u6cd5\u7684\u5feb\u6377\u65b9\u5f0f\u3002\u8981\u4f7f\u7528\u8be5\u65b9\u5f0f, \u8bf7\u5bfc\u5165 <code>Method</code> \u6807\u6ce8\u540d\u79f0\u7a7a\u95f4\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationMethod;\n\n/**\n* @Route("/blog")\n*/\nclass PostController extends Controller {\n/**\n* @Route("/edit/{id}")\n* @Method({"GET", "POST"})\n*/\npublic function editAction($id) {\n}\n}\n</code></pre>\n<p>\u5982\u679c\u4f7f\u7528\u7684 HTTP \u65b9\u6cd5\u662f <code>GET</code> \u6216 <code>POST</code>, \u5219 <code>edit</code> \u64cd\u4f5c\u73b0\u5728\u6620\u5c04\u5230 <code>/blog/edit/{id}</code> \u6a21\u5f0f\u3002</p><p>\u53ea\u6709\u5728\u4f7f\u7528 <code>@Route</code> \u6807\u6ce8\u4e86\u64cd\u4f5c\u65f6, \u624d\u8003\u8651 <code>@Method</code> \u6807\u6ce8\u3002</p>
   22.12 +#ParamConverterTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@ParamConverter</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p><code>@ParamConverter</code> \u6807\u6ce8\u8c03\u7528 <i>converters</i> \u5c06\u8bf7\u6c42\u53c2\u6570\u8f6c\u6362\u4e3a\u5bf9\u8c61\u3002\u8fd9\u4e9b\u5bf9\u8c61\u4f5c\u4e3a\u8bf7\u6c42\u5c5e\u6027\u5b58\u50a8, \u56e0\u6b64\u53ef\u4ee5\u4f5c\u4e3a\u63a7\u5236\u5668\u65b9\u6cd5\u53c2\u6570\u63d2\u5165\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationParamConverter;\n\n/**\n * @Route("/blog/{id}")\n * @ParamConverter("post", class="SensioBlogBundle:Post")\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>\u5728\u8fd9\u4e00\u6a21\u5f0f\u4e0b\u53d1\u751f\u591a\u4e2a\u64cd\u4f5c: </p><ul><li>\u8f6c\u6362\u5668\u5c1d\u8bd5\u4ece\u8bf7\u6c42\u5c5e\u6027 (\u8bf7\u6c42\u5c5e\u6027\u6e90\u81ea\u8def\u7531\u5360\u4f4d\u7b26 -- \u6b64\u5904\u4e3a <code>id</code>) \u83b7\u53d6 <code>SensioBlogBundle:Post</code> \u5bf9\u8c61; </li><li>\u5982\u679c\u627e\u4e0d\u5230 <code>Post</code> \u5bf9\u8c61, \u5219\u5c06\u751f\u6210 <code>404</code> <code>Response</code>;</li><li>\u5982\u679c\u627e\u5230\u4e86 <code>Post</code> \u5bf9\u8c61, \u5219\u5c06\u5b9a\u4e49\u65b0\u7684 <code>post</code> \u8bf7\u6c42\u5c5e\u6027 (\u53ef\u901a\u8fc7 <code>$request->attributes->get('post')</code> \u8bbf\u95ee);</li><li>\u5bf9\u4e8e\u4efb\u4f55\u5176\u4ed6\u8bf7\u6c42\u5c5e\u6027, \u5982\u679c\u5b58\u5728\u4e8e\u65b9\u6cd5\u7b7e\u540d\u4e2d, \u5219\u5c06\u81ea\u52a8\u63d2\u5165\u63a7\u5236\u5668\u5185\u3002</li></ul><p>\u5982\u679c\u4f7f\u7528\u5982\u4e0a\u4f8b\u4e2d\u6240\u793a\u7684\u7c7b\u578b\u63d0\u793a, \u5219\u751a\u81f3\u53ef\u4ee5\u5c06 <code>@ParamConverter</code> \u6807\u6ce8\u4e00\u8d77\u5ffd\u7565\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n// automatic with method signature\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u5185\u7f6e\u8f6c\u6362\u5668</p><p>\u5305\u53ea\u6709\u4e00\u4e2a\u5185\u7f6e\u8f6c\u6362\u5668, \u5373 <code>Doctrine</code>\u3002</p><p><b><code>Doctrine</code> \u8f6c\u6362\u5668</b></p><p>\u9ed8\u8ba4\u60c5\u51b5\u4e0b, <code>Doctrine</code> \u8f6c\u6362\u5668\u4f7f\u7528\u9ed8\u8ba4\u5b9e\u4f53\u7ba1\u7406\u5668\u3002\u8fd9\u53ef\u4ee5\u4f7f\u7528 <code>entity_manager</code> \u9009\u9879\u914d\u7f6e\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationRoute;\nuse SensioBundleFrameworkExtraBundleConfigurationParamConverter;\n\n/**\n * @Route("/blog/{id}")\n * @ParamConverter("post", class="SensioBlogBundle:Post", options={"entity_manager" = "foo"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u521b\u5efa\u8f6c\u6362\u5668</p><p>\u6240\u6709\u8f6c\u6362\u5668\u5fc5\u987b\u5b9e\u73b0 <code>ParamConverterInterface</code>\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nnamespace SensioBundleFrameworkExtraBundleRequestParamConverter;\n\nuse SensioBundleFrameworkExtraBundleConfigurationConfigurationInterface;\nuse SymfonyComponentHttpFoundationRequest;\n\ninterface ParamConverterInterface {\n    function apply(Request $request, ConfigurationInterface $configuration);\n\n    function supports(ConfigurationInterface $configuration);\n}\n</code></pre>\n<p>\u5728\u80fd\u591f\u8f6c\u6362\u7ed9\u5b9a\u914d\u7f6e\u65f6 (<code>ParamConverter</code> \u5b9e\u4f8b), <code>supports()</code> \u65b9\u6cd5\u5fc5\u987b\u8fd4\u56de <code>true</code>\u3002</p><p><code>ParamConverter</code> \u5b9e\u4f8b\u6709\u4e09\u4e2a\u5173\u4e8e\u6807\u6ce8\u7684\u4fe1\u606f: </p><table border="0"><tr><td valign="top"><b><code>name</code></b></td><td>\u5c5e\u6027\u540d\u79f0\u3002</td></tr><tr><td valign="top"><b><code>class</code></b></td><td>\u5c5e\u6027\u7c7b\u540d (\u53ef\u4ee5\u4e3a\u8868\u793a\u7c7b\u540d\u7684\u4efb\u610f\u5b57\u7b26\u4e32)\u3002</td></tr><tr><td valign="top"><b><code>options</code></b></td><td>\u9009\u9879\u7684\u6570\u7ec4\u3002</td></tr></table>\n<p>\u53ea\u8981\u914d\u7f6e\u652f\u6301, \u5c31\u4f1a\u8c03\u7528 <code>apply()</code> \u65b9\u6cd5\u3002\u6839\u636e\u8bf7\u6c42\u5c5e\u6027, \u5b83\u5e94\u8bbe\u7f6e\u540d\u4e3a <code>$configuration->getName()</code> \u7684\u5c5e\u6027, \u5b58\u50a8\u7c7b <code>$configuration->getClass()</code> \u7684\u5bf9\u8c61\u3002</p>
   22.13  Symfony2ExtraAnnotationsProvider.name=Symfony2 Extra
   22.14 -TemplateTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Template</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p><code>@Template</code> \u6807\u6ce8\u5c06\u63a7\u5236\u5668\u4e0e\u6a21\u677f\u540d\u5173\u8054\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationTemplate;\n\n/**\n * @Template("SensioBlogBundle:Post:show")\n */\npublic function showAction($id) {\n    // get the Post\n    $post = ...;\n\n    return array('post' => $post);\n}\n</code></pre>\n<p>\u4f7f\u7528 <code>@Template</code> \u6807\u6ce8\u65f6, \u63a7\u5236\u5668\u5e94\u8fd4\u56de\u53c2\u6570\u6570\u7ec4, \u4ee5\u5c06\u5176\u4f20\u9012\u5230\u89c6\u56fe\u800c\u975e <code>Response</code> \u5bf9\u8c61\u3002</p><p>\u5982\u679c\u6309\u7167\u63a7\u5236\u5668\u548c\u64cd\u4f5c\u540d\u547d\u540d\u4e86\u6a21\u677f (\u4e0a\u4f8b\u4e2d\u5373\u4e3a\u6b64\u60c5\u51b5), \u5219\u751a\u81f3\u53ef\u4ee5\u5ffd\u7565\u6807\u6ce8\u503c\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @Template\n */\npublic function showAction($id) {\n    // get the Post\n    $post = ...;\n\n    return array('post' => $post);\n}\n</code></pre>\n<p>\u5982\u679c\u8981\u4f20\u9012\u5230\u6a21\u677f\u7684\u552f\u4e00\u53c2\u6570\u662f\u65b9\u6cd5\u53c2\u6570, \u5219\u53ef\u4ee5\u4f7f\u7528 <code>vars</code> \u5c5e\u6027\u800c\u975e\u8fd4\u56de\u6570\u7ec4\u3002\u5728\u4e0e <code>@ParamConverter</code> \u6807\u6ce8\u7ed3\u5408\u5728\u4e00\u8d77\u65f6, \u6b64\u9879\u975e\u5e38\u6709\u7528\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @ParamConverter("post", class="SensioBlogBundle:Post")\n * @Template("SensioBlogBundle:Post:show", vars={"post"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>\u6b64\u9879\u5f97\u76ca\u4e8e\u8f6c\u6362, \u4e0e\u4ee5\u4e0b\u914d\u7f6e\u7b49\u540c\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @Template(vars={"post"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>\u53ef\u4ee5\u4f7f\u5176\u66f4\u4e3a\u7b80\u6d01, \u5982\u679c\u65b9\u6cd5\u8fd4\u56de <code>null</code> \u5e76\u4e14\u672a\u5b9a\u4e49 <code>vars</code> \u5c5e\u6027, \u5219\u6240\u6709\u65b9\u6cd5\u53c2\u6570\u5c06\u81ea\u52a8\u4f20\u9012\u5230\u6a21\u677f\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @Template\n */\npublic function showAction(Post $post) {\n}\n</code></pre>
   22.15 -CacheTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Cache</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p><code>@Cache</code> \u6807\u6ce8\u4f7f\u5176\u6613\u4e8e\u5b9a\u4e49 HTTP \u9ad8\u901f\u7f13\u5b58\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationCache;\n\n/**\n * @Cache(expires="tomorrow")\n */\npublic function indexAction() {\n}\n</code></pre>\n<p>\u8fd8\u53ef\u4ee5\u4f7f\u7528\u7c7b\u4e0a\u7684\u6807\u6ce8\u5b9a\u4e49\u6240\u6709\u65b9\u6cd5\u7684\u9ad8\u901f\u7f13\u5b58\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @Cache(expires="tomorrow")\n */\nclass BlogController extends Controller {\n}\n</code></pre>\n<p>\u5f53\u7c7b\u914d\u7f6e\u4e0e\u65b9\u6cd5\u914d\u7f6e\u4e4b\u95f4\u5b58\u5728\u51b2\u7a81\u65f6, \u540e\u8005\u5c06\u8986\u76d6\u524d\u8005\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @Cache(expires="tomorrow")\n */\nclass BlogController extends Controller {\n    /**\n     * @Cache(expires="+2 days")\n     */\n    public function indexAction() {\n    }\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u5c5e\u6027</p><p>\u6b64\u5904\u4e3a\u63a5\u53d7\u7684\u5c5e\u6027\u53ca\u5176 HTTP \u5934\u7b49\u6548\u7c7b\u578b\u5217\u8868: </p><table border="0"><tr><td><code>@Cache(expires="tomorrow")</code></td><td><code>$response->setExpires()</code></td></tr><tr><td><code>@Cache(smaxage="15")</code></td><td><code>$response->setSharedMaxAge()</code></td></tr><tr><td><code>@Cache(maxage="15")</code></td><td><code>$response->setMaxAge()</code></td></tr></table>
   22.16 +#TemplateTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Template</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p><code>@Template</code> \u6807\u6ce8\u5c06\u63a7\u5236\u5668\u4e0e\u6a21\u677f\u540d\u5173\u8054\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationTemplate;\n\n/**\n * @Template("SensioBlogBundle:Post:show")\n */\npublic function showAction($id) {\n    // get the Post\n    $post = ...;\n\n    return array('post' => $post);\n}\n</code></pre>\n<p>\u4f7f\u7528 <code>@Template</code> \u6807\u6ce8\u65f6, \u63a7\u5236\u5668\u5e94\u8fd4\u56de\u53c2\u6570\u6570\u7ec4, \u4ee5\u5c06\u5176\u4f20\u9012\u5230\u89c6\u56fe\u800c\u975e <code>Response</code> \u5bf9\u8c61\u3002</p><p>\u5982\u679c\u6309\u7167\u63a7\u5236\u5668\u548c\u64cd\u4f5c\u540d\u547d\u540d\u4e86\u6a21\u677f (\u4e0a\u4f8b\u4e2d\u5373\u4e3a\u6b64\u60c5\u51b5), \u5219\u751a\u81f3\u53ef\u4ee5\u5ffd\u7565\u6807\u6ce8\u503c\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @Template\n */\npublic function showAction($id) {\n    // get the Post\n    $post = ...;\n\n    return array('post' => $post);\n}\n</code></pre>\n<p>\u5982\u679c\u8981\u4f20\u9012\u5230\u6a21\u677f\u7684\u552f\u4e00\u53c2\u6570\u662f\u65b9\u6cd5\u53c2\u6570, \u5219\u53ef\u4ee5\u4f7f\u7528 <code>vars</code> \u5c5e\u6027\u800c\u975e\u8fd4\u56de\u6570\u7ec4\u3002\u5728\u4e0e <code>@ParamConverter</code> \u6807\u6ce8\u7ed3\u5408\u5728\u4e00\u8d77\u65f6, \u6b64\u9879\u975e\u5e38\u6709\u7528\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @ParamConverter("post", class="SensioBlogBundle:Post")\n * @Template("SensioBlogBundle:Post:show", vars={"post"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>\u6b64\u9879\u5f97\u76ca\u4e8e\u8f6c\u6362, \u4e0e\u4ee5\u4e0b\u914d\u7f6e\u7b49\u540c\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @Template(vars={"post"})\n */\npublic function showAction(Post $post) {\n}\n</code></pre>\n<p>\u53ef\u4ee5\u4f7f\u5176\u66f4\u4e3a\u7b80\u6d01, \u5982\u679c\u65b9\u6cd5\u8fd4\u56de <code>null</code> \u5e76\u4e14\u672a\u5b9a\u4e49 <code>vars</code> \u5c5e\u6027, \u5219\u6240\u6709\u65b9\u6cd5\u53c2\u6570\u5c06\u81ea\u52a8\u4f20\u9012\u5230\u6a21\u677f\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @Template\n */\npublic function showAction(Post $post) {\n}\n</code></pre>
   22.17 +#CacheTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Cache</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p><code>@Cache</code> \u6807\u6ce8\u4f7f\u5176\u6613\u4e8e\u5b9a\u4e49 HTTP \u9ad8\u901f\u7f13\u5b58\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse SensioBundleFrameworkExtraBundleConfigurationCache;\n\n/**\n * @Cache(expires="tomorrow")\n */\npublic function indexAction() {\n}\n</code></pre>\n<p>\u8fd8\u53ef\u4ee5\u4f7f\u7528\u7c7b\u4e0a\u7684\u6807\u6ce8\u5b9a\u4e49\u6240\u6709\u65b9\u6cd5\u7684\u9ad8\u901f\u7f13\u5b58\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @Cache(expires="tomorrow")\n */\nclass BlogController extends Controller {\n}\n</code></pre>\n<p>\u5f53\u7c7b\u914d\u7f6e\u4e0e\u65b9\u6cd5\u914d\u7f6e\u4e4b\u95f4\u5b58\u5728\u51b2\u7a81\u65f6, \u540e\u8005\u5c06\u8986\u76d6\u524d\u8005\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\n/**\n * @Cache(expires="tomorrow")\n */\nclass BlogController extends Controller {\n    /**\n     * @Cache(expires="+2 days")\n     */\n    public function indexAction() {\n    }\n}\n</code></pre>\n<p style="font-weight: bold; font-size: 1.1em">\u5c5e\u6027</p><p>\u6b64\u5904\u4e3a\u63a5\u53d7\u7684\u5c5e\u6027\u53ca\u5176 HTTP \u5934\u7b49\u6548\u7c7b\u578b\u5217\u8868: </p><table border="0"><tr><td><code>@Cache(expires="tomorrow")</code></td><td><code>$response->setExpires()</code></td></tr><tr><td><code>@Cache(smaxage="15")</code></td><td><code>$response->setSharedMaxAge()</code></td></tr><tr><td><code>@Cache(maxage="15")</code></td><td><code>$response->setMaxAge()</code></td></tr></table>
   22.18  
    23.1 --- a/src/zh_CN/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/security/Bundle_zh_CN.properties	Tue Nov 20 16:21:50 2012 +0900
    23.2 +++ b/src/zh_CN/php/php-symfony2/php-symfony2/org/netbeans/modules/php/symfony2/annotations/security/Bundle_zh_CN.properties	Sat Dec 08 17:09:53 2012 +0900
    23.3 @@ -38,11 +38,11 @@
    23.4  #
    23.5  # Portions Copyrighted 2012 Sun Microsystems, Inc.
    23.6  
    23.7 -PreAuthorizeTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@PreAuthorize</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u4f7f\u7528\u6b64\u6807\u6ce8\u53ef\u4ee5\u5b9a\u4e49\u5728\u8c03\u7528\u65b9\u6cd5\u4e4b\u524d\u6267\u884c\u7684\u8868\u8fbe\u5f0f\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationPreAuthorize;\n\nclass MyService {\n    /**\n     * @PreAuthorize("hasRole('A') or (hasRole('B') and hasRole('C'))")\n     */\n    public function secureMethod() {\n        // ...\n    }\n}\n</code></pre>
    23.8 -SecureTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Secure</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u4f7f\u7528\u6b64\u6807\u6ce8\u53ef\u4ee5\u5b9a\u4e49\u5141\u8bb8\u8c03\u7528\u65b9\u6cd5\u7684\u7528\u6237\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecure;\n\nclass MyService {\n    /**\n     * @Secure(roles="ROLE_USER, ROLE_FOO, ROLE_ADMIN")\n     */\n    public function secureMethod() {\n        // ...\n    }\n}\n</code></pre>
    23.9 -SecureParamTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SecureParam</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u4f7f\u7528\u6b64\u6807\u6ce8\u53ef\u4ee5\u5b9a\u4e49\u4f20\u9012\u5230\u65b9\u6cd5\u7684\u53c2\u6570\u7684\u9650\u5236\u3002\u53ea\u6709\u5728\u53c2\u6570\u662f\u57df\u5bf9\u8c61\u65f6\u6709\u6548\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecureParam;\n\nclass MyService {\n    /**\n     * @SecureParam(name="comment", permissions="EDIT, DELETE")\n     * @SecureParam(name="post", permissions="OWNER")\n     */\n    public function secureMethod($comment, $post) {\n        // ...\n    }\n}\n</code></pre>
   23.10 -SecureReturnTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SecureReturn</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u4f7f\u7528\u6b64\u6807\u6ce8\u53ef\u4ee5\u5b9a\u4e49\u7531\u65b9\u6cd5\u8fd4\u56de\u7684\u503c\u7684\u9650\u5236\u3002\u4ec5\u5728\u8fd4\u56de\u7684\u503c\u662f\u57df\u5bf9\u8c61\u65f6\u6709\u6548\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecureReturn;\n\nclass MyService {\n    /**\n     * @SecureReturn(permissions="VIEW")\n     */\n    public function secureMethod() {\n        // ...\n\n        return $domainObject;\n    }\n}\n</code></pre>
   23.11 -RunAsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@RunAs</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u4f7f\u7528\u6b64\u6807\u6ce8\u53ef\u4ee5\u6307\u5b9a\u4ec5\u5728\u65b9\u6cd5\u8c03\u7528\u6301\u7eed\u671f\u95f4\u4e2d\u6dfb\u52a0\u7684\u89d2\u8272\u3002\u5728\u8c03\u7528\u8bbf\u95ee\u51b3\u7b56\u7684\u524d\u540e\u90fd\u4e0d\u8003\u8651\u8fd9\u4e9b\u89d2\u8272\u3002</p><p>\u8fd9\u901a\u5e38\u7528\u4e8e\u5b9e\u73b0\u53cc\u5c42\u670d\u52a1\u5c42, \u5728\u5176\u4e2d\u53ef\u4ee5\u6709\u516c\u5171\u548c\u79c1\u6709\u670d\u52a1, \u800c\u79c1\u6709\u670d\u52a1\u4ec5\u901a\u8fc7\u7279\u5b9a\u516c\u5171\u670d\u52a1\u8c03\u7528\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecure;\nuse JMSSecurityExtraBundleAnnotationRunAs;\n\nclass MyPrivateService {\n    /**\n     * @Secure(roles="ROLE_PRIVATE_SERVICE")\n     */\n    public function aMethodOnlyToBeInvokedThroughASpecificChannel() {\n        // ...\n    }\n}\n\nclass MyPublicService {\n    protected $myPrivateService;\n\n    /**\n     * @Secure(roles="ROLE_USER")\n     * @RunAs(roles="ROLE_PRIVATE_SERVICE")\n     */\n    public function canBeInvokedFromOtherServices() {\n        return $this->myPrivateService->aMethodOnlyToBeInvokedThroughASpecificChannel();\n    }\n}\n</code></pre>
   23.12 -SatisfiesParentSecurityPolicyTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SatisfiesParentSecurityPolicy</p><p style="font-weight: bold; font-size: 1.1em">\u8bf4\u660e</p><p>\u6b64\u9879\u5fc5\u987b\u5728\u65b9\u6cd5\u4e0a\u5b9a\u4e49, \u8be5\u65b9\u6cd5\u8986\u76d6\u5177\u6709\u5b89\u5168\u5143\u6570\u636e\u7684\u65b9\u6cd5\u3002\u56e0\u6b64\u53ef\u786e\u4fdd\u60a8\u77e5\u9053\u518d\u4e5f\u65e0\u6cd5\u5b9e\u65bd\u6240\u8986\u76d6\u65b9\u6cd5\u7684\u5b89\u5168\u6027, \u5982\u679c\u8981\u4fdd\u7559\u5b83\u4eec, \u5219\u5fc5\u987b\u5728\u6240\u6709\u6807\u6ce8\u4e0a\u590d\u5236\u3002</p>
   23.13 +#PreAuthorizeTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@PreAuthorize</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u4f7f\u7528\u6b64\u6807\u6ce8\u53ef\u4ee5\u5b9a\u4e49\u5728\u8c03\u7528\u65b9\u6cd5\u4e4b\u524d\u6267\u884c\u7684\u8868\u8fbe\u5f0f\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationPreAuthorize;\n\nclass MyService {\n    /**\n     * @PreAuthorize("hasRole('A') or (hasRole('B') and hasRole('C'))")\n     */\n    public function secureMethod() {\n        // ...\n    }\n}\n</code></pre>
   23.14 +#SecureTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@Secure</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u4f7f\u7528\u6b64\u6807\u6ce8\u53ef\u4ee5\u5b9a\u4e49\u5141\u8bb8\u8c03\u7528\u65b9\u6cd5\u7684\u7528\u6237\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecure;\n\nclass MyService {\n    /**\n     * @Secure(roles="ROLE_USER, ROLE_FOO, ROLE_ADMIN")\n     */\n    public function secureMethod() {\n        // ...\n    }\n}\n</code></pre>
   23.15 +#SecureParamTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SecureParam</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u4f7f\u7528\u6b64\u6807\u6ce8\u53ef\u4ee5\u5b9a\u4e49\u4f20\u9012\u5230\u65b9\u6cd5\u7684\u53c2\u6570\u7684\u9650\u5236\u3002\u53ea\u6709\u5728\u53c2\u6570\u662f\u57df\u5bf9\u8c61\u65f6\u6709\u6548\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecureParam;\n\nclass MyService {\n    /**\n     * @SecureParam(name="comment", permissions="EDIT, DELETE")\n     * @SecureParam(name="post", permissions="OWNER")\n     */\n    public function secureMethod($comment, $post) {\n        // ...\n    }\n}\n</code></pre>
   23.16 +#SecureReturnTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SecureReturn</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u4f7f\u7528\u6b64\u6807\u6ce8\u53ef\u4ee5\u5b9a\u4e49\u7531\u65b9\u6cd5\u8fd4\u56de\u7684\u503c\u7684\u9650\u5236\u3002\u4ec5\u5728\u8fd4\u56de\u7684\u503c\u662f\u57df\u5bf9\u8c61\u65f6\u6709\u6548\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecureReturn;\n\nclass MyService {\n    /**\n     * @SecureReturn(permissions="VIEW")\n     */\n    public function secureMethod() {\n        // ...\n\n        return $domainObject;\n    }\n}\n</code></pre>
   23.17 +#RunAsTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@RunAs</p><p style="font-weight: bold; font-size: 1.1em">\u63cf\u8ff0</p><p>\u4f7f\u7528\u6b64\u6807\u6ce8\u53ef\u4ee5\u6307\u5b9a\u4ec5\u5728\u65b9\u6cd5\u8c03\u7528\u6301\u7eed\u671f\u95f4\u4e2d\u6dfb\u52a0\u7684\u89d2\u8272\u3002\u5728\u8c03\u7528\u8bbf\u95ee\u51b3\u7b56\u7684\u524d\u540e\u90fd\u4e0d\u8003\u8651\u8fd9\u4e9b\u89d2\u8272\u3002</p><p>\u8fd9\u901a\u5e38\u7528\u4e8e\u5b9e\u73b0\u53cc\u5c42\u670d\u52a1\u5c42, \u5728\u5176\u4e2d\u53ef\u4ee5\u6709\u516c\u5171\u548c\u79c1\u6709\u670d\u52a1, \u800c\u79c1\u6709\u670d\u52a1\u4ec5\u901a\u8fc7\u7279\u5b9a\u516c\u5171\u670d\u52a1\u8c03\u7528\u3002</p><p style="font-weight: bold; font-size: 1.1em">\u793a\u4f8b</p><pre><code>\nuse JMSSecurityExtraBundleAnnotationSecure;\nuse JMSSecurityExtraBundleAnnotationRunAs;\n\nclass MyPrivateService {\n    /**\n     * @Secure(roles="ROLE_PRIVATE_SERVICE")\n     */\n    public function aMethodOnlyToBeInvokedThroughASpecificChannel() {\n        // ...\n    }\n}\n\nclass MyPublicService {\n    protected $myPrivateService;\n\n    /**\n     * @Secure(roles="ROLE_USER")\n     * @RunAs(roles="ROLE_PRIVATE_SERVICE")\n     */\n    public function canBeInvokedFromOtherServices() {\n        return $this->myPrivateService->aMethodOnlyToBeInvokedThroughASpecificChannel();\n    }\n}\n</code></pre>
   23.18 +#SatisfiesParentSecurityPolicyTag.documentation=<p style="font-weight: bold; font-size: 1.2em">@SatisfiesParentSecurityPolicy</p><p style="font-weight: bold; font-size: 1.1em">\u8bf4\u660e</p><p>\u6b64\u9879\u5fc5\u987b\u5728\u65b9\u6cd5\u4e0a\u5b9a\u4e49, \u8be5\u65b9\u6cd5\u8986\u76d6\u5177\u6709\u5b89\u5168\u5143\u6570\u636e\u7684\u65b9\u6cd5\u3002\u56e0\u6b64\u53ef\u786e\u4fdd\u60a8\u77e5\u9053\u518d\u4e5f\u65e0\u6cd5\u5b9e\u65bd\u6240\u8986\u76d6\u65b9\u6cd5\u7684\u5b89\u5168\u6027, \u5982\u679c\u8981\u4fdd\u7559\u5b83\u4eec, \u5219\u5fc5\u987b\u5728\u6240\u6709\u6807\u6ce8\u4e0a\u590d\u5236\u3002</p>
   23.19  Symfony2SecurityAnnotationsProvider.name=Symfony2 \u5b89\u5168
   23.20  
    24.1 --- a/src/zh_CN/webcommon/web-clientproject/web-clientproject/org/netbeans/modules/web/clientproject/sites/Bundle_zh_CN.properties	Tue Nov 20 16:21:50 2012 +0900
    24.2 +++ b/src/zh_CN/webcommon/web-clientproject/web-clientproject/org/netbeans/modules/web/clientproject/sites/Bundle_zh_CN.properties	Sat Dec 08 17:09:53 2012 +0900
    24.3 @@ -38,31 +38,31 @@
    24.4  #
    24.5  # Portions Copyrighted 2012 Sun Microsystems, Inc.
    24.6  
    24.7 -BootstrapSiteInitializr.name=\u521d\u59cb\u5316\u7a0b\u5e8f: \u5f15\u5bfc
    24.8 +#BootstrapSiteInitializr.name=\u521d\u59cb\u5316\u7a0b\u5e8f: \u5f15\u5bfc
    24.9  ClassicSiteInitializr.name=\u521d\u59cb\u5316\u7a0b\u5e8f: \u4f20\u7edf
   24.10  LBL_SiteZipPanel_Select=\u9009\u62e9
   24.11  LBL_SiteZipPanel_Title=\u9009\u62e9\u6a21\u677f\u6863\u6848\u6587\u4ef6
   24.12 -ResponsiveSiteInitializr.name=\u521d\u59cb\u5316\u7a0b\u5e8f: \u54cd\u5e94
   24.13 +#ResponsiveSiteInitializr.name=\u521d\u59cb\u5316\u7a0b\u5e8f: \u54cd\u5e94
   24.14  SiteAngularJsSeed.description=AngularJS \u9879\u76ee\u7684\u7ad9\u70b9\u6a21\u677f\u3002
   24.15 -SiteAngularJsSeed.name=AngularJS \u79cd\u5b50
   24.16 +#SiteAngularJsSeed.name=AngularJS \u79cd\u5b50
   24.17  SiteHelper.error.emptyZip=\u5305\u542b\u7ad9\u70b9\u6a21\u677f\u7684 ZIP \u6587\u4ef6\u4e3a\u7a7a\u6216\u4e0b\u8f7d\u5931\u8d25\u3002
   24.18  # {0} - file name
   24.19  SiteHelper.progress.download=\u6b63\u5728\u4e0b\u8f7d\u6587\u4ef6{0}
   24.20  # {0} - file name
   24.21  SiteHelper.progress.unzip=\u6b63\u5728\u89e3\u538b\u7f29\u6587\u4ef6{0}
   24.22  SiteHtml5Boilerplate.description=\u6765\u81ea html5boilerplate.com \u7684\u7ad9\u70b9\u6a21\u677f\u3002\u7248\u672c: 3.0.2
   24.23 -SiteHtml5Boilerplate.name=HTML5 \u6837\u677f v3.0.2
   24.24 +#SiteHtml5Boilerplate.name=HTML5 \u6837\u677f v3.0.2
   24.25  SiteHtml5BoilerplateV4.description=\u6765\u81ea html5boilerplate.com \u7684\u7ad9\u70b9\u6a21\u677f\u3002\u7248\u672c: 4.0.0
   24.26 -SiteHtml5BoilerplateV4.name=HTML5 \u6837\u677f v4.0.0
   24.27 +#SiteHtml5BoilerplateV4.name=HTML5 \u6837\u677f v4.0.0
   24.28  SiteInitializr.description=\u6765\u81ea initializr.com \u7684\u7ad9\u70b9\u6a21\u677f\u3002
   24.29  SiteInitializrPanel.jLabel1.text=\u6765\u81ea initializr.com \u7684\u7ad9\u70b9\u6a21\u677f: 
   24.30 -SiteInitializrPanel.classicRadioButton.text=\u4f20\u7edf
   24.31 -SiteInitializrPanel.responsiveRadioButton.text=\u54cd\u5e94
   24.32 -SiteInitializrPanel.bootstrapRadioButton.text=\u5f15\u5bfc 2
   24.33 +#SiteInitializrPanel.classicRadioButton.text=\u4f20\u7edf
   24.34 +#SiteInitializrPanel.responsiveRadioButton.text=\u54cd\u5e94
   24.35 +#SiteInitializrPanel.bootstrapRadioButton.text=\u5f15\u5bfc 2
   24.36  SiteMobileBoilerplate.description=\u6765\u81ea html5boilerplate.com/mobile \u7684\u7ad9\u70b9\u6a21\u677f\u3002\u7248\u672c: 3.0
   24.37 -SiteMobileBoilerplate.name=\u79fb\u52a8\u6837\u677f
   24.38 +#SiteMobileBoilerplate.name=\u79fb\u52a8\u6837\u677f
   24.39  SiteTwitterBootstrap.description=\u6765\u81ea twitter.github.com/bootstrap \u7684\u7ad9\u70b9\u6a21\u677f
   24.40 -SiteTwitterBootstrap.name=Twitter \u5f15\u5bfc
   24.41 +#SiteTwitterBootstrap.name=Twitter \u5f15\u5bfc
   24.42  SiteZip.error.template.invalid=\u6a21\u677f\u6587\u4ef6\u65e0\u6548 (\u9700\u8981 http://... \u6216\u672c\u5730\u6587\u4ef6)\u3002
   24.43  SiteZip.error.template.missing=\u5fc5\u987b\u6307\u5b9a\u6a21\u677f\u6587\u4ef6\u3002
   24.44  SiteZip.error.template.notZip=\u6a21\u677f\u6587\u4ef6\u5fc5\u987b\u4e3a ZIP \u6863\u6848 (*.zip)\u3002