コントローラは通常、特定のリソース(エンティティクラス、データベース内のテーブル)に対して作成されますが、アプリケーションの特定の部分に関与するアクションをグループ化するために作成することもできます。あなたの例では、それはアプリケーションのセキュリティを処理するコントローラです:
class SecurityController
{
// can handle both the login page display and
// the login page submission
login();
logout();
register();
// optional: confirm account after registration
confirm();
// displays the forgot password page
forgotPassword();
// displays the reset password page
// and handle the form submission
resetPassword();
}
注:セキュリティ関連のアクションとユーザープロファイルアクションを同じコントローラに配置しないでください。それらはユーザーに関連しているので意味があるかもしれませんが、1つは認証を処理し、もう1つは電子メール、名前などの更新を処理する必要があります。
リソース用に作成されたコントローラー(例:)Task
を使用すると、通常のCRUDアクションが実行されます。
class TasksController
{
// usually displays a paginated list of tasks
index();
// displays a certain task, based on an identifier
show(id);
// displays page with form and
// handles form submission for creating
// new tasks
create();
// same as create(), but for changing records
update(id);
// displays confirmation message
// and handles submissions in case of confirmation
delete()
}
もちろん、関連するリソースを同じコントローラーに追加する可能性があります。たとえば、エンティティBusiness
があり、それぞれに複数のBusinessService
エンティティがあるとします。そのためのコントローラーは次のようになります。
class BusinessController
{
index();
show(id);
create();
update(id);
delete();
// display the business services for a certain business
listBusinessServices(businessId);
// displays a certain business service
showBusinessService(id);
// create a new business service for a certain business
createBusinessService(businessId);
// updates a certain business service
updateBusinessService(id);
// deletes a certain business service
deleteBusinessService(id);
}
このアプローチは、関連する子エンティティが親エンティティなしでは存在できない場合に意味があります。
これらは私の推奨事項です:
- 関連する操作のグループに基づいてコントローラーを作成します(セキュリティなどの特定の責任の処理、またはリソースに対するCRUD操作など)。
- リソースベースのコントローラーの場合、不要なアクションを追加しないでください(リソースを更新する予定がない場合は、更新アクションを追加しないでください)。
- 「カスタム」アクションを追加して、物事を簡素化できます(たとえば、
Subscription
エンティティの数が限られたエントリに基づいて可用性を持っている場合、という名前のコントローラに新しいアクションを追加use()
して、から1つのエントリを減算するという単一の目的を持つことができますSubscription
)
- 物事をシンプルに保つ-膨大な数のアクションと複雑なロジックでコントローラーを雑然としないでください。アクションの数を減らすか、2つのコントローラーを作成することで物事を簡素化してください。
- MVCに重点を置いたフレームワークを使用している場合は、それらのベストプラクティスガイドラインに従ってください(ある場合)。
ここでさらに読むためのいくつかのリソース。