Naming Conventions
The following is the generally accepted naming conventions being used by Laravel Community:
Controllers
Controller name MUST start with a noun (in singular form) followed by the word “Controller”.
Good
class ArticleController extends Controller
{ ...
Bad
class ArticlesController extends Controller
{...
class wp_articlesController extends Controller
{
class Article extends Controller
{
You SHOULD Use Resource Controllers unless you have any particular reason not to do so
Good
class DomainController extends Controller
{
public function index(){} // list domains
public function create(){} // show create form
public function store(Request $request){ } // handle the form POST
public function show($id){} // show a single domain
public function edit($id){} // show edit page
public function update(Request $request, $id){} // handle show edit page POST
public function destroy($id){} // delete a domain
}
Bad
class DomainController extends Controller
{
public function list(){} // list domains
public function create_or_save(){} // show create form then handle save
public function show_edit($id){} // show a single domain then show edit page
public function delete($id){} // delete a domain
}
Models
Model names MUST be in singular form with its first letter in uppercase
Good
class Flight extends Model
{
...
Bad
class Flights extends Model
{
...
class flight extends Model
{
...
hasOne or belongsTo relationship methods MUST be in singular form
Good
class User extends Model
{
public function phone()
{
return $this->hasOne('App\Phone');
}
}
Bad
class User extends Model
{
public function phones()
{
return $this->hasOne('App\Phone');
}
}
Any other relationships other than above MUST be in plural form
Good
class Post extends Model
{
public function comments()
{
return $this->hasMany('App\Comment');
}
}
Bad
class Post extends Model
{
public function comment()
{
return $this->hasMany('App\Comment');
}
}
Model properties should be in snake_case
Good
$user->created_at
Bad
$user->createdAt
Methods should be in camelCase
Good
class User extends Model
{
public function scopePopular($query)
{
return $query->where('votes', '>', 100);
}
Bad
class User extends Model
{
public function scope_popular($query)
{
return $query->where('votes', '>', 100);
}
Functions
Laravel comes with a lot of useful helper functions, but you can also define your own helper functions, given the following conditions:
You SHOULD place your custom helper functions by creating a file called helper.php
Good
project_folder/app/helper.php
project_folder/app/Http/helper.php
Bad
project_folder/functions.php
You MUST use Composer’s autoloading capability to load your functions
Good
// file composer.json
...
"autoload": {
"files": [
"app/helpers.php"
],
...
Bad
// file app/Http/Controllers/HomeController.php
class HomeController.php
{
function index(){
require_once(app_path("helpers.php"));
}
}
You MUST check if the the function exists before defining it
Good
if (! function_exists('my_custom_helper')) {
function my_custom_helper($key, $default = null) {
// ...
}
}
Bad
function my_custom_helper($key, $default = null) {
// ...
}
Other General guides with functions
If the function length exceeds 25 lines, you SHOULD break it down to multiple functions
Each function SHOULD have a Unit Test associated with it
Routes
Routes should be in plural form of the resource it is trying to manipulate and SHOULD be all lower-case
Good
Route::get('/users', 'UserController@index');
Route::resource('photos', 'PhotoController');
Bad
Route::get('/user', 'UserController@index');
Route::get('/UsersList', 'UserController@index');
Route::resource('PHOTO', 'PhotoController');
Named Routes SHOULD use snake_case and dot notation
Good
Route::get('/user', 'UserController@active')->name('users.show_active');
Bad
Route::get('/user', 'UserController@active')->name('users.show-active');
Route::get('/user', 'UserController@active')->name('show-active-users');
Variables
General rule for variable is it SHOULD be in camelCase
Good
$articlesWithAuthor
Bad
$articles_with_author
Collection names SHOULD be descriptive and in plural form
Good
$activeUsers = User::active()->get()
Bad
$users = User::active()->get()
$user = User::active()->get()
$User = User::active()->get()
Single Object SHOULD be descriptive and in singular form
Good
$activeUser = User::active()->first()
Bad
$users = User::active()->first()
Views
You SHOULD use snake_case as file name of your Blade templates
Good
show_filtered.blade.php
Bad
showFiltered.blade.php
show-filtered.blade.php
You MUST not make non UI-related operations inside blade templates
Good
// $api_results is passed by controller
<ul>
@foreach($api_results as $result)
<li>{{ $result->name }}</li>
@endforeach
</ul>
Bad
@php
$api_results = json_decode(file_get_contents("https://api.example.com"));
@endphp
<ul>
@foreach($api_results as $result)
<li>{{ $result->name }}</li>
@endforeach
</ul>
Last updated