0

私はjsonapiを構築しています。フォーマットは、routing.yml構成ファイルを介して適切に管理されます。

user_info:
  url: /users/:user_id
  class: sfRequestRoute
  param: { module: user, action: details, sf_format: json }
  requirements:
    user_id: \d+
    sf_method: [GET]

ここで、アプリに送信されたすべてのリクエストがjson形式で結果を返すことを確認したいと思います(例:「/ dummy」はjsonでエラーを返す必要があります)。同じファイルの最後にある次のデフォルトルートで順調に進んでいます。

default:
  url: /*
  param: { sf_format: json }

存在しないページまたはモジュールにルーティングすると、jsonが正しくレンダリングされます...エラー!生成されたhtmlページは404でしたが、このルーティングでは500(サーバーエラー)が発生します。レンダリングをjson出力に変更するだけで、デフォルトのhtmlページと同様の動作を維持するにはどうすればよいですか?

編集-1Edの指示に従う

そこで、factories.ymlを編集し、APIプロジェクトにデフォルトのモジュールを作成し、デフォルトのアクションに以下のexecuteError404関数を追加しました...次に、対応するError404Success.phpページを設定します...

何らかの理由で、:moduleおよび:actionキーワードを回避するために変更したルートがまだ必要です。

default_index:
  url:   /:a

default:
  url: /:a/:b/*

そして、ここに私がいます!私の404ページはAPI全体でjson形式で提供されています:)どうもありがとうございました!

4

1 に答える 1

1

このデフォルト ルートはindex、モジュールのアクションを実行しdefaultます (デフォルト)。indexSuccess.json.phpテンプレート ファイルをデフォルト モジュールに追加するか、default/indexアクションを変更して json 応答を早期に返す必要があります。

このデフォルト ルートが一致するたびに 404 を返したい場合は、デフォルト アクションをerror404in に変更できfactories.ymlます。

all:
  routing:
    class: sfPatternRouting
    param:
      generate_shortest_url:            true
      extra_parameters_as_query_string: true
      default_action:                   error404

または、このようにデフォルトの 404 アクションのリクエスト形式を明示的に json に設定することもできます

public function executeError404(sfWebRequest $request)
{
  $request->setRequestFormat('json');
}

デフォルトルートを削除できます。

この種のデフォルト ルートは使用しないことをお勧めします。サイトへのすべての可能な URL を追跡するのが非常に難しくなるためです。特定のアクションごとに個別のルートを作成するか、ルート コレクションを使用する必要があります。

于 2013-03-05T11:40:15.960 に答える