Zend_Controller-Router-Route-Rest.xml 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect3 id="zend.controller.router.routes.rest">
  5. <title>Zend_Rest_Route</title>
  6. <para>
  7. Die Komponente <classname>Zend_Rest</classname> enthält eine RESTvolle Route für
  8. <classname>Zend_Controller_Router_Rewrite</classname>. Diese Route bietet ein
  9. standardisiertes Routing Schema das Routinganfragen durch Übersetzung der
  10. <acronym>HTTP</acronym> Methode und der <acronym>URI</acronym> zu einem Modul,
  11. Controller und einer Action. Die unten stehende Tabelle bietet eine Übersicht darüber
  12. wie Anfragemethoden und <acronym>URI</acronym>'s geroutet werden.
  13. </para>
  14. <table frame="all">
  15. <title>Verhalten von Zend_Rest_Route</title>
  16. <tgroup cols='3' align='left' colsep='1' rowsep='1'>
  17. <colspec colname='method' />
  18. <colspec colname='URI' />
  19. <colspec colname='route' />
  20. <thead>
  21. <row>
  22. <entry>Methode</entry>
  23. <entry><acronym>URI</acronym></entry>
  24. <entry>Module_Controller::action</entry>
  25. </row>
  26. </thead>
  27. <tbody>
  28. <row>
  29. <entry><constant>GET</constant></entry>
  30. <entry><filename>/product/ratings/</filename></entry>
  31. <entry><methodname>Product_RatingsController::indexAction()</methodname></entry>
  32. </row>
  33. <row>
  34. <entry><constant>GET</constant></entry>
  35. <entry><filename>/product/ratings/:id</filename></entry>
  36. <entry><methodname>Product_RatingsController::getAction()</methodname></entry>
  37. </row>
  38. <row>
  39. <entry><constant>POST</constant></entry>
  40. <entry><filename>/product/ratings</filename></entry>
  41. <entry><methodname>Product_RatingsController::postAction()</methodname></entry>
  42. </row>
  43. <row>
  44. <entry><constant>PUT</constant></entry>
  45. <entry><filename>/product/ratings/:id</filename></entry>
  46. <entry><methodname>Product_RatingsController::putAction()</methodname></entry>
  47. </row>
  48. <row>
  49. <entry><constant>DELETE</constant></entry>
  50. <entry><filename>/product/ratings/:id</filename></entry>
  51. <entry>
  52. <methodname>Product_RatingsController::deleteAction()</methodname>
  53. </entry>
  54. </row>
  55. <row>
  56. <entry><constant>POST</constant></entry>
  57. <entry><filename>/product/ratings/:id?_method=PUT</filename></entry>
  58. <entry><methodname>Product_RatingsController::putAction()</methodname></entry>
  59. </row>
  60. <row>
  61. <entry><constant>POST</constant></entry>
  62. <entry><filename>/product/ratings/:id?_method=DELETE</filename></entry>
  63. <entry>
  64. <methodname>Product_RatingsController::deleteAction()</methodname>
  65. </entry>
  66. </row>
  67. </tbody>
  68. </tgroup>
  69. </table>
  70. <sect4 id="zend.rest.route_usage">
  71. <title>Verwendung von Zend_Rest_Route</title>
  72. <para>
  73. Um <classname>Zend_Rest_Route</classname> für eine komplette Anwendung einzuschalten
  74. muss diese ohne Konfigurationsparameter erstellt und als Standardroute dem
  75. Frontcontroller hinzugefügt werden:
  76. </para>
  77. <programlisting language="php"><![CDATA[
  78. $front = Zend_Controller_Front::getInstance();
  79. $restRoute = new Zend_Rest_Route($front);
  80. $front->getRouter()->addRoute('default', $restRoute);
  81. ]]></programlisting>
  82. <note>
  83. <para>
  84. Wenn <classname>Zend_Rest_Route</classname> keinem gültigen Modul, Controller oder
  85. keiner Action entspricht gibt diese <constant>FALSE</constant> zurück und der Router
  86. versucht eine Entsprechung zu finden indem die nächste Route im Router verwendet
  87. wird.
  88. </para>
  89. </note>
  90. <para>
  91. Um <classname>Zend_Rest_Route</classname> für spezielle Module einzuschalten muss diese
  92. mit einem Array von Modulnamen als 3tes Argument des Constructors erstellt werden:
  93. </para>
  94. <programlisting language="php"><![CDATA[
  95. $front = Zend_Controller_Front::getInstance();
  96. $restRoute = new Zend_Rest_Route($front, array(), array('product'));
  97. $front->getRouter()->addRoute('rest', $restRoute);
  98. ]]></programlisting>
  99. <para>
  100. Um <classname>Zend_Rest_Route</classname> für spezielle Controller einzuschalten muss
  101. ein Array von Controllernamen als Wert für jedes Modul (Arrayelement) hinzugefügt
  102. werden.
  103. </para>
  104. <programlisting language="php"><![CDATA[
  105. $front = Zend_Controller_Front::getInstance();
  106. $restRoute = new Zend_Rest_Route($front, array(), array(
  107. 'product' => array('ratings')
  108. ));
  109. $front->getRouter()->addRoute('rest', $restRoute);
  110. ]]></programlisting>
  111. </sect4>
  112. <sect4 id="zend.rest.route_config">
  113. <title>Zend_Rest_Route mit Zend_Config_Ini</title>
  114. <para>
  115. Um <classname>Zend_Rest_Route</classname> von einer <acronym>INI</acronym>
  116. Konfigurationsdatei aus zu verwenden muss man den "route" Typ Parameter verwenden und
  117. die Konfigurationsoptionen setzen:
  118. </para>
  119. <programlisting language="ini"><![CDATA[routes.rest.type = Zend_Rest_Route
  120. routes.rest.defaults.controller = object
  121. routes.rest.mod = project,user
  122. ]]></programlisting>
  123. <para>
  124. Die 'type' Option benennt den RESTvollen Routing Konfigurationstyp. Die 'defaults'
  125. Option wird verwendet um gemeinsame Standardmodule zu spezifizieren, und oder Aktionen
  126. für die Route. Alle anderen Optionen in der Konfigurationsgruppe werden als RESTvolle
  127. Modulnamen behandelt, und deren Werte sind RESTvolle Kontrollernamen. Die beispielhafte
  128. Konfiguration definiert <classname>Mod_ProjectController</classname> und
  129. <classname>Mod_UserController</classname> als RESTvolle Controller.
  130. </para>
  131. <para>
  132. Dann ist die <methodname>addConfig()</methodname> Methode des Rewrite Router Objekts zu
  133. verwenden:
  134. </para>
  135. <programlisting language="php"><![CDATA[$config = new Zend_Config_Ini('path/to/routes.ini');
  136. $router = new Zend_Controller_Router_Rewrite();
  137. $router->addConfig($config, 'routes');
  138. ]]></programlisting>
  139. </sect4>
  140. <sect4 id="zend.rest.controller">
  141. <title>Zend_Rest_Controller</title>
  142. <para>
  143. Um bei der Entwicklung von Controllern zu Hilfe zu sein die mit
  144. <classname>Zend_Rest_Route</classname> verwendet werden, müssen die Controller von
  145. <classname>Zend_Rest_Controller</classname> erweitert werden.
  146. <classname>Zend_Rest_Controller</classname> definiert die 5 am meisten benötigten
  147. Operationen für RESTvolle Ressourcen in der Form von abstrakten Actionmethoden.
  148. </para>
  149. <itemizedlist>
  150. <listitem>
  151. <para>
  152. <emphasis><methodname>indexAction()</methodname></emphasis> -
  153. Sollte einen Index von Ressourcen empfangen und diese mit der View
  154. verknüpfen.
  155. </para>
  156. </listitem>
  157. <listitem>
  158. <para>
  159. <emphasis><methodname>getAction()</methodname></emphasis> -
  160. Sollte eine einzelne Ressource empfangen die von einer <acronym>URI</acronym>
  161. identifiziert wird und diese mit der Vew verknüpfen.
  162. </para>
  163. </listitem>
  164. <listitem>
  165. <para>
  166. <emphasis><methodname>postAction()</methodname></emphasis> -
  167. Sollte eine einzelne neue Ressource akzeptieren und dessen Status persistent
  168. machen.
  169. </para>
  170. </listitem>
  171. <listitem>
  172. <para>
  173. <emphasis><methodname>putAction()</methodname></emphasis> -
  174. Sollte eine einzelne Ressource akzeptieren die von einer <acronym>URI</acronym>
  175. identifiziert wird und dessen Status persistent machen.
  176. </para>
  177. </listitem>
  178. <listitem>
  179. <para>
  180. <emphasis><methodname>deleteAction()</methodname></emphasis> -
  181. Sollte eine einzelne Ressource löschen die von einer <acronym>URI</acronym>
  182. identifiziert wird.
  183. </para>
  184. </listitem>
  185. </itemizedlist>
  186. </sect4>
  187. </sect3>