0

Laravel 3RESTfulAPIプロジェクトには次のルートがあります

Route::delete('/(:any)', 'resources@destroy');

Route::delete('users/(:any)', 'users@destroy');

私が抱えている問題は、ユーザーが削除リクエストを/users/に送信するときです。

私がしたいのは、users@destroyルートがパラメーターで呼び出されることnullです。私のコントローラーでは、ユーザーがnullリソースを削除しようとしているという例外があります。

起こっているように見えるのは、resource@destroyルートがパラメータで呼び出されていることusersです。これは明らかに、ユーザーリソースを削除するという望ましくない影響を及ぼします。

.htaccessを変更できることはわかっていますが、技術的には/users/はリソースコントローラーではなくユーザーコントローラーに属しています。その関係を維持したい。

Laravel内からこれを解決する簡単な方法があるかどうか疑問に思いましたか?

編集:以下の答えで上記を機能させます。getルートにエラーがあります

Route::get('users/(:any?)', 'users@show');
Route::get('users', 'users@index');

/usersと/users/はどちらも、私が望まないusers@indexを呼び出します。

users@indexに移動するにはGET/usersが必要であり、nullパラメーターを使用してusers@showに移動するにはGET/users/が必要です。

4

2 に答える 2

1

ルートにフィルターを追加して、末尾のスラッシュを回避しました

Route::group(array('before' => 'trailingslash'), function()
{
   //routes in here
});

Route::filter('trailingslash', function() {
    $current = URI::full();
    if(substr($current, -1) == '/'){
        return return Response::error('404');
    }
});
于 2013-02-13T14:39:22.593 に答える
0

あなたが考慮する必要がある1つのポイント。

ルートはスラッシュなしで定義されます。これに対する唯一の例外は、フロントスラッシュのみで表されるデフォルトルートです。

そのためRoute::delete('/(:any)', 'resources@destroy')、望ましくない結果が発生します。

さらに、あなたの注文は間違っています。

(:any)も一致し、コントローラーuserにリクエストを送信します。resources

だからあなたがする必要があるのは、

  • 順序を変更します(逆にします)。
  • resourcesルールに従って検討のルートを変更します。などresources/deleteなど....

私がしたいのは、users@destroyルートがパラメーターnullで呼び出されることです。私のコントローラーでは、ユーザーがnullリソースを削除しようとしているという例外があります。

これを行うには(上記の変更を行った後...)

2番目のセグメントをオプションにするルートを変更しuser/(:any)ます。user/(:any?)

その後、まっすぐ進みます。

$foo = URI::segment(2, null);
//Rest will follow.

編集

さて、次のコード、

Route::get('users/(:any?)', 'users@show');
Route::get('users', 'users@index');

意味がありません。

私がタイプした場合user、ルーターは何を想定していますか?

user@showオプションのセグメントなしまたはuser@index

ルートは、あいまいさを排除するように設計されています。あなたはそれをすべて曖昧にすることで反対の方向に進んでいます。

簡単なルートを作成するだけです。

ショーのように

  user/show

消去

  user/delete

編集

  user/edit

等....

適用するルーティングのタイプは、あいまいさを伴うため、ユーザーと開発者の両方にとって混乱を招きます。

于 2013-02-13T10:51:58.513 に答える