1

Zend_Rest_Route を使用して API を構築しようとしています。私のタスク モジュールには、3 つのコントローラーがあります。

  • タスクコントローラー
  • タイプコントローラー
  • ステータスコントローラー

routes.init でこれを設定することで、タスク コントローラーにアクセスできます。

routes.qtasks.type = "Zend_Rest_Route"
routes.qtasks.route = "/tasks/:id"
routes.qtasks.defaults.module = "tasks"
routes.qtasks.defaults.controller = "tasks"
routes.qtasks.tasks = "tasks"

routes.tasktypes.type = "Zend_Rest_Route"
routes.tasktypes.route = "tasks/types/:id"
routes.tasks.defaults.module = "tasks"
routes.tasktypes.defaults.controller = "types"
routes.tasktypes.tasks = "types"

ただし、自分のタスク/タイプ、タスク/タイプ/1 などにアクセスできますが、タスク コントローラーにアクセスするには、route = "/tasks" を設定した場合でも、URL /tasks/tasks/1 を使用する必要があります。/tasks/1 からアクセスできるはずですが、期待どおりに動作しないのはなぜですか? (Zend_Controller_Router_Route_Regex で使用していたときは、まったく問題なく動作しました)。

更新: モジュールには 4 つのコントローラー (一部は REST、一部は通常) があります。私の REST コントローラー (Zend_Rest_Controller を拡張し、正しいメソッドに自動的にリダイレクトします) には、標準の REST メソッド (indexAction、getAction、putAction、postAction、deleteAction) があります。

  • TasksController (Zend_Rest_Controller)
  • タイプコントローラー (Zend_Rest_Controller)
  • StatusController (Zend_Controller_Action) ですが、Rest Controller としてシミュレートされます (routes.ini を参照)
  • ViewController (Zend_Controller_Action) => phtml に関連付けられたさまざまな php ビューを管理します

Zend は階層的な REST URL (この場合は /tasks/types/:type_id/status/:id) を管理していないように見えるため、StatusController は Zend_Action_Controller です。checkhttprequest メソッドを使用して、正しいアクションに転送します。

すべてのコントローラーのroutes.iniは次のとおりです。

; task views
routes.tasksindex.type = "Zend_Controller_Router_Route_Regex"
routes.tasksindex.route = "tasks/view"
routes.tasksindex.defaults.controller = "view"
routes.tasksindex.defaults.module = "tasks"
routes.tasksindex.defaults.action = "index"

routes.tasksviews.type = "Zend_Controller_Router_Route_Regex"
routes.tasksviews.route = "tasks/view/(\d+)"
routes.tasksviews.defaults.controller = "view"
routes.tasksviews.defaults.module = "tasks"
routes.tasksviews.defaults.action = "view"
routes.tasksviews.map.1 = "id"

routes.tasksadmin.type = "Zend_Controller_Router_Route_Regex"
routes.tasksadmin.route = "tasks/admin"
routes.tasksadmin.defaults.controller = "view"
routes.tasksadmin.defaults.module = "tasks"
routes.tasksadmin.defaults.action = "admin"

; tasks REST API
routes.tasks.type = "Zend_Rest_Route"
routes.tasks.route = "tasks/:id"
routes.tasks.defaults.module = "tasks"
routes.tasks.defaults.controller = "tasks"
routes.tasks.tasks = "tasks"

; task types REST API
routes.tasktypes.type = "Zend_Rest_Route"
routes.tasktypes.route = "tasks/types/:id"
routes.tasktypes.defaults.module = "tasks"
routes.tasktypes.defaults.controller = "types"
routes.tasktypes.tasks = "types"

; task type status Simulated REST API
routes.taskstypestatus.type = "Zend_Controller_Router_Route_Regex"
routes.taskstypestatus.route = "tasks/types/(\d+)/status/?([0-9]+)?"
routes.taskstypestatus.defaults.controller = "status"
routes.taskstypestatus.defaults.module = "tasks"
routes.taskstypestatus.defaults.action = "checkhttprequest"
routes.taskstypestatus.map.1 = "type_id"
routes.taskstypestatus.map.2 = "id"

注 : /typesController.php と StatusController.php が機能します。http://demo.localhost/tasksではなくhttp: //demo.localhost/tasks/としてアクセスできるようにしたい TasksController に問題があるだけです。

4

3 に答える 3

0

ルートの両方のブロックを次のようなものに置き換えることは可能ですか:

routes.tasks.type = "Zend_Rest_Route"
routes.tasks.route = "/tasks/:controller/:id"
routes.tasks.defaults.controller = tasks
routes.tasks.defaults.module = tasks
routes.tasks.defaults.id =

/:id パラメータのデフォルトを null に設定すると、パラメータが設定されていない場合でもルートがトリガーされます。

于 2013-07-31T13:00:18.897 に答える
0

Zend では、ルートに「rest」という名前を付け、モジュールのようなプロパティとコントローラーを値として指定する必要があるようです。例えば:

routes.rest.type = Zend_Rest_Route
routes.rest.tasks = tasks,types

このように、Tasks_TasksController と Tasks_TypesController は REST API になります。

ドキュメントをよく確認してください。

于 2013-10-09T20:36:13.120 に答える
0

この行は疑わしいようです:

routes.qtasks.tasks = "tasks"

もしかして:

routes.qtasks.action = "tasks"

また:

routes.qtasks.defaults.tasks = "tasks"

idおそらく、 paramのデフォルト値も設定する必要があります。

于 2013-07-31T15:41:35.307 に答える