您现在的位置是:网站首页 > 心得笔记
laravel开发规范总结
1、对于一些常用的常量定义
存储在 .env 和 config/app.php 文件中,然后使用 config() 函数来读取。- ✅ 最佳实践
这种方法既支持环境变量,又具备极高的灵活性,假如遇到同样的 CDN 多域名随机问题,你只需要写一个辅助方法,然后在 config/app.php
中调用即可,不需要动到任何一行业务逻辑代码。
代码示例
.env
文件中设置:
CDN_DOMAIN=cdndomain.com
config/app.php
文件中设置:
'cdn_domain' => env('CDN_DOMAIN', null),
程序中两种获取 相同配置
的方法:
env('CDN_DOMAIN')
config('app.cdn_domain')
在此统一规定:所有程序配置信息 必须 通过 config()
来读取,所有的 .env
配置信息 必须 通过 config()
来读取,绝不 在配置文件以外的范围使用 env()
。
2、辅助函数的定义
Laravel 提供了很多 辅助函数,有时候我们也需要创建自己的辅助函数。 必须 把所有的『自定义辅助函数』存放于 app 文件夹中。
1、创建文件 app/helpers.php
<?php// 示例函数function foo() { return "foo";}
2、修改项目 composer.json
在项目 composer.json 中 autoload 部分里的 files 字段加入该文件即可: { ... "autoload": { "files": [ "app/helpers.php" ] } ...}
3、然后运行:
$ composer dump-autoload
OK,然后你就可以在任何地方用到 app/helpers.php
中的函数了。
3、路由定义
必须 优先使用 Restful 路由,配合资源控制器使用,见 文档。
超出 Restful 路由的,应该 模仿上图的方式来定义路由。
3.1、resource 方法正确使用
一般资源路由定义:
Route::resource('photos', 'PhotosController');
等于以下路由定义:
Route::get('/photos', 'PhotosController@index')->name('photos.index');Route::get('/photos/create', 'PhotosController@create')->name('photos.create');Route::post('/photos', 'PhotosController@store')->name('photos.store');Route::get('/photos/{photo}', 'PhotosController@show')->name('photos.show');Route::get('/photos/{photo}/edit', 'PhotosController@edit')->name('photos.edit');Route::put('/photos/{photo}', 'PhotosController@update')->name('photos.update');Route::delete('/photos/{photo}', 'PhotosController@destroy')->name('photos.destroy');
使用 resource
方法时,如果仅使用到部分路由,必须 使用 only
列出所有可用路由:
Route::resource('photos', 'PhotosController', ['only' => ['index', 'show']]);
绝不 使用 except
,因为 only
相当于白名单,相对于 except
更加直观。路由使用白名单有利于养成『安全习惯』。
3.2、资源路由单复数形式
资源路由路由 URI 必须 使用复数形式,如:
/photos/create
/photos/{photo}
除了 resource
资源路由以外,其他所有路由都 必须 使用 name
方法进行命名。
必须 使用『资源前缀』作为命名规范,如下的 users.follow
,资源前缀的值是 users.
:
4、模型定义
4.1、放置位置
所有的数据模型文件,都 必须 存放在:app/Models/
文件夹中。
命名空间:
namespace App\Models;
4.2、使用基类
所有的 Eloquent 数据模型 都 必须 继承统一的基类 App/Models/Model
,此基类存放位置为 /app/Models/Model.php
4.3、命名规范
数据模型相关的命名规范:
数据模型类名
必须
为「单数」, 如:App\Models\Photo
类文件名
必须
为「单数」,如:app/Models/Photo.php
数据库表名字
必须
为「复数」,多个单词情况下使用「Snake Case」 如:photos
,my_photos
数据库表迁移名字
必须
为「复数」,如:2014_08_08_234417_create_photos_table.php
数据填充文件名
必须
为「复数」,如:PhotosTableSeeder.php
数据库字段名
必须
为「Snake Case」,如:view_count
,is_vip
数据库表主键
必须
为「id」数据库表外键
必须
为「resource_id」,如:user_id
,post_id
数据模型变量
必须
为「resource_id」,如:$user_id
,$post_id
5、控制器定义
5.1、单数 or 复数?
必须 使用资源的复数形式,如:
类名:PhotosController
文件名:PhotosController.php
5.2、保持短小精炼
必须 保持控制器文件代码行数最小化,还有可读性。
不应该 为「方法」书写注释,这要求方法取名要足够合理,不需要过多注释;
应该 为一些复杂的逻辑代码块书写注释,主要介绍产品逻辑 -
为什么要这么做。
;不应该 在控制器中书写「私有方法」,控制器里
应该
只存放「路由动作方法」;绝不 遗留「死方法」,就是没有用到的方法,控制器里的所有方法,都应该被使用到,否则应该删除;
绝不 在控制器里批量注释掉代码,无用的逻辑代码就必须清除掉。
6、视图定义
6.1、保持目录清晰
layouts - 页面布局文件 必须 放置于此目录下;
common - 存放页面通用元素;
pages - 简单的页面存放文件夹,如:about、contact 等;
resources - 对应 Restful 路由的资源路径名称,以 URI
photos/create
为例,对应create.blade.php
文件,存放在文件夹photos
下。
必须 避免在 resources/views
目录下直接放置视图文件。
6.2、局部视图
局部视图文件 必须 使用 _
前缀来命名,如:photos/_upload_form.blade.php
6.3、视图命名要释义
为了和 Restful 路由器和资源控制器保持一致,视图命名也 必须 使用资源视图的命名方式。以 photos
为例:
photos/index.blade.php
内容列表视图
对应路由器
/photos
,命名photos.index
控制器方法
PhotosController@index
photos/show.blade.php
单个内容视图
对应路由器
/photos/{id}
,命名photos.show
控制器方法
PhotosController@show
photos/create.blade.php
内容创建视图
对应路由器
/photos/create
,命名photos.create
控制器方法
PhotosController@create
photos/edit.blade.php
内容编辑的视图
对应路由器
/photos/edit
,命名photos.edit
控制器方法
PhotosController@edit
create_and_edit
视图
很多情况下,创建和编辑视图里的页面结构接近相似,在这种情况下,应该 使用 create_and_edit
视图。以 photos
为例:
PhotosController@create
- 对应视图:/photos/create_and_edit.blade.php
PhotosController@edit
- 对应 视图:/photos/create_and_edit.blade.php
这样一来,通常情况下,一个完整的 photos
资源对应的视图文件为以下:
├── photos │ ├── create_and_edit.blade.php │ ├── index.blade.php │ └── show.blade.php
7、表单验证定义
7.1、使用基类
所有 FormRequest 表验证类 必须 继承 app/Http/Requests/Request.php
基类。基类文件如下:
<?phpnamespace App\Http\Requests;use Illuminate\Foundation\Http\FormRequest;class Request extends FormRequest{ public function authorize() { // Using policy for Authorization return true; }}
7.2、验证类命名
FormRequest 表验证类 必须 遵循 资源路由 方式进行命名,photos
对应 app/Http/Requests/PhotoRequest.php
。
7.3、类文件参考
FormRequest 表验证类文件请参考以下:
<?phpnamespace App\Http\Requests;class PhotoRequest extends Request{ public function rules() { switch($this->method()) { // CREATE case 'POST': { return [ // CREATE ROLES ]; } // UPDATE case 'PUT': case 'PATCH': { return [ // UPDATE ROLES ]; } case 'GET': case 'DELETE': default: { return []; }; } } public function messages() { return [ // Validation messages ]; }}