Defining Controllers
Similar to defining models, Blueprint also supports defining controllers. You may do so within the controllers
section, listing controllers by name. For each controller, you may define multiple actions
which contain a list of statements.
Consider the controllers
section of the following draft file:
controllers:
Post:
index:
query: all
render: post.index with:posts
create:
render: post.create
store:
validate: title, content
save: post
redirect: post.index
Comment:
show:
render: comment.show with:comment
From this definition, Blueprint will generate two controllers. A PostController
with index
, create
, and store
actions. And a CommentController
with a show
action.
While you may specify the full name of a controller, Blueprint will automatically suffix controller names with Controller
to follow Laravel's naming conventions. So, for convenience, you may simply specify the root name of the controller - be it singular or plural.
Blueprint will generate the methods for each controller's actions. In addition, Blueprint will register routes for each action. The HTTP method will be inferred based on the action name. For example, Blueprint will register a post
route for the store
action. Otherwise, a get
route will be registered.
For these reasons, Blueprint recommends defining resource controllers. Doing so allows Blueprint to infer details and generate even more code automatically.
If you wish to namespace a controller, you may prefix the controller name. Blueprint will use this prefix as the namespace and properly save the generated controller class following Laravel conventions. For example, defining an Api\Post
controller will generate a App\Http\Controllers\Api\PostController
class saved as app/Http/Controllers/Api/PostController.php
.
Review the advanced configuration to customize these namespaces and paths further.
Finally, Blueprint will analyze each of the statements listed within the action to generate the body of each controller method. For example, the above definition for the index
action would generate the following controller method:
public function index(Request $request): View
{
$posts = Post::all();
return view('post.index', compact('posts'));
}
Blueprint has statements for many of the common actions within Laravel. Some statements generate code beyond the controller. Review the Controller Statements section for a full list of statements and the code they generate.