Skip to content

Command Line Tools

wheels generate code

Generate code snippets and boilerplate code for common Wheels patterns.

Terminal window
wheels generate code [pattern] [options]
wheels g code [pattern] [options]

The wheels generate code command creates code snippets for common Wheels patterns and best practices. It provides ready-to-use code blocks that can be customized for your specific needs, helping you implement standard patterns quickly and consistently.

ArgumentDescriptionDefault
patternCode pattern to generateShows available patterns
OptionDescriptionValid ValuesDefault
--listList all available code snippetstrue/falsefalse
--categoryFilter by categoryauthentication, model, controller, view, databaseAll categories
--outputOutput formatconsole, fileconsole
--pathOutput file path (required when output=file)Any valid file path
--customizeShow customization optionstrue/falsefalse
--createCreate custom code templatetrue/falsefalse
--forceOverwrite existing filestrue/falsefalse
Terminal window
wheels generate code --list

Output:

==================================================
Available Code Snippets
==================================================
Authentication:
- login-form - Login form with remember me
- auth-filter - Authentication filter
- password-reset - Password reset flow
- user-registration - User registration with validation
Model:
- soft-delete - Soft delete implementation
- audit-trail - Audit trail with timestamps
- sluggable - URL-friendly slugs
- versionable - Version tracking
- searchable - Full-text search
Controller:
- crud-actions - Complete CRUD actions
- api-controller - JSON API controller
- nested-resource - Nested resource controller
- admin-controller - Admin area controller
View:
- form-with-errors - Form with error handling
- pagination-links - Pagination navigation
- search-form - Search form with filters
- ajax-form - AJAX form submission
Database:
- migration-indexes - Common index patterns
- seed-data - Database seeding
- constraints - Foreign key constraints
Next steps:
1. Generate a code snippet: wheels g code <pattern-name>
Terminal window
wheels generate code login-form

Generates:

#startFormTag(action="create")#
#textField(objectName="user", property="email", label="Email")#
#passwordField(objectName="user", property="password", label="Password")#
#checkBox(objectName="user", property="rememberMe", label="Remember me")#
#submitTag(value="Login")#
#endFormTag()#

Note: This is a basic snippet. You can customize it by saving to a file and editing:

Terminal window
wheels generate code login-form --output=file --path=app/views/sessions/new.cfm
Terminal window
wheels generate code auth-filter

Generates:

function init() {
filters(through="authenticate", except="new,create");
}
private function authenticate() {
if (!StructKeyExists(session, "userId")) {
redirectTo(route="login");
}
}
Terminal window
wheels generate code password-reset

Generates:

function requestReset() {
user = model("User").findOne(where="email='#params.email#'");
if (IsObject(user)) {
token = Hash(CreateUUID());
user.update(resetToken=token, resetExpiresAt=DateAdd("h", 1, Now()));
// Send email with token
}
}
Terminal window
wheels generate code user-registration

Generates:

#startFormTag(action="create")#
#textField(objectName="user", property="firstName", label="First Name")#
#textField(objectName="user", property="email", label="Email")#
#passwordField(objectName="user", property="password", label="Password")#
#submitTag(value="Register")#
#endFormTag()#
Terminal window
wheels generate code soft-delete

Generates:

function init() {
property(name="deletedAt", sql="deleted_at");
beforeDelete("softDelete");
}
private function softDelete() {
this.deletedAt = Now();
this.save(validate=false, callbacks=false);
return false;
}
Terminal window
wheels generate code audit-trail

Generates:

function init() {
property(name="createdBy", sql="created_by");
property(name="updatedBy", sql="updated_by");
beforeSave("setAuditFields");
}
private function setAuditFields() {
if (StructKeyExists(session, "userId")) {
if (this.isNew()) this.createdBy = session.userId;
this.updatedBy = session.userId;
}
}
Terminal window
wheels generate code sluggable

Generates:

function init() {
property(name="slug");
beforeSave("generateSlug");
}
private function generateSlug() {
if (!len(this.slug) && len(this.title)) {
this.slug = lCase(reReplace(this.title, "[^a-zA-Z0-9]", "-", "all"));
}
}
Terminal window
wheels generate code versionable

Generates:

function init() {
property(name="version", default=1);
beforeUpdate("incrementVersion");
}
private function incrementVersion() {
this.version = this.version + 1;
}
Terminal window
wheels generate code searchable

Generates:

function search(required string query) {
return findAll(where="title LIKE '%#arguments.query#%' OR content LIKE '%#arguments.query#%'");
}
Terminal window
wheels generate code crud-actions

Generates:

function index() {
users = model("User").findAll();
}
function show() {
user = model("User").findByKey(params.key);
}
function create() {
user = model("User").create(params.user);
if (user.valid()) {
redirectTo(route="user", key=user.id);
} else {
renderView(action="new");
}
}
Terminal window
wheels generate code api-controller

Generates:

function init() {
provides("json");
}
function index() {
users = model("User").findAll();
renderWith(data={users=users});
}
Terminal window
wheels generate code nested-resource

Generates:

function init() {
filters(through="findParent");
}
private function findParent() {
user = model("User").findByKey(params.userId);
}
Terminal window
wheels generate code admin-controller

Generates:

function init() {
filters(through="requireAdmin");
}
private function requireAdmin() {
if (!currentUser().isAdmin()) {
redirectTo(route="home");
}
}
Terminal window
wheels generate code form-with-errors

Generates:

#errorMessagesFor("user")#
#startFormTag(action="create")#
#textField(objectName="user", property="firstName", label="First Name")#
<cfif user.errors("firstName").len()>
<span class="error">#user.errors("firstName").get()#</span>
</cfif>
#submitTag(value="Submit")#
#endFormTag()#
Terminal window
wheels generate code pagination-links

Generates:

<cfif users.totalPages gt 1>
<nav>
<cfif users.currentPage gt 1>
#linkTo(text="Previous", params={page: users.currentPage - 1})#
</cfif>
<cfloop from="1" to="#users.totalPages#" index="pageNum">
#linkTo(text=pageNum, params={page: pageNum})#
</cfloop>
<cfif users.currentPage lt users.totalPages>
#linkTo(text="Next", params={page: users.currentPage + 1})#
</cfif>
</nav>
</cfif>
Terminal window
wheels generate code search-form

Generates:

#startFormTag(method="get")#
#textField(name="q", value=params.q, placeholder="Search...")#
#submitTag(value="Search")#
#endFormTag()#
Terminal window
wheels generate code ajax-form

Generates:

#startFormTag(action="create", id="userForm")#
#textField(objectName="user", property="name")#
#submitTag(value="Submit")#
#endFormTag()#
<script>
$("#userForm").submit(function(e) {
e.preventDefault();
$.post($(this).attr("action"), $(this).serialize());
});
</script>
Terminal window
wheels generate code migration-indexes

Generates:

t.index("email");
t.index(["last_name", "first_name"]);
t.index("email", unique=true);
t.index("user_id");
Terminal window
wheels generate code seed-data

Generates:

execute("INSERT INTO users (name, email) VALUES ('Admin', 'admin@example.com')");
Terminal window
wheels generate code constraints

Generates:

t.references("user_id", "users");
t.references("category_id", "categories");
Terminal window
wheels generate code --create my-custom-snippet

This creates a directory structure in app/snippets/my-custom-snippet/:

my-custom-snippet/
└── template.txt

You can then edit the template file and use your custom code snippet:

Terminal window
wheels generate code my-custom-snippet
Terminal window
wheels generate code login-form
# or explicitly:
wheels generate code login-form --output=console
Terminal window
wheels generate code api-controller --output=file --path=app/controllers/Api.cfc

Use --force to overwrite existing files:

Terminal window
wheels generate code api-controller --output=file --path=app/controllers/Api.cfc --force
Terminal window
wheels generate code [pattern] --customize

Shows available customization options for code snippets.

List code snippets from a specific category:

Terminal window
wheels generate code --list --category=model
wheels generate code --list --category=authentication
wheels generate code --list --category=controller
wheels generate code --list --category=view
wheels generate code --list --category=database
  1. Review generated code: Customize for your needs
  2. Understand the patterns: Don’t blindly copy
  3. Keep snippets updated: Maintain with framework updates
  4. Share useful patterns: Contribute back to community
  5. Document customizations: Note changes made
  6. Test generated code: Ensure it works in your context
  7. Use consistent patterns: Across your application