php开发编码最佳实践
所属分类:php | 发布于 2024-11-06 17:48:28
没有时间做好,总有时间重做,在这个互联网走下坡路的时代,继续研究技术的意义越来越小。不过每次写代码都有新的感悟,感觉也不停的在做重复的工作,所以,这是最后一次,把系统性问题整理清楚。
Model类方法命名
/**
* model方法命名规则
* getList() // 获取数据列表(无分页)
* getHotList() // 获取热点列表
* getPageList() // 按传统方式获取分页数据,一般api接口时使用
* getPaginateList() // 按thinkphp的paginate方式获取分页数据
* getUnpublishedPaginateList() // 按thinkphp的paginate方法获取未发布得列表
* findData() // 获取单个实体数据,一般用不到
*/
定义一些变量
/**
* @var array
* $seoData['seoTitle']
* $seoData['seoKeywords']
* $seoData['seoDescription']
*/
protected array $seoData = [];
/**
* @var array
* $optionData['siteName'] // 站点名称
* $optionData['homePageUrl'] // 站点首页
* $optionData['recordNumber'] // 备案号
*/
protected array $optionData = [];
// 给assign()函数使用的临时变量,在前端页面不体现
protected array $assignData = [];
// 面包屑
protected array $crumbs = [];
// 导航菜单
protected array $webMenus = [];
// 当前导航菜单
protected string $webMenuActive = '';
// 资源文件域名,如果需要
protected string $assetDomain = '';
// 文件域名,如果需要
protected string $fileDomain = '';
// Js版本,如果需要,可从数据库或配置文件中读取
protected int $jsVersion = 0;
// Css版本,如果需要,可从数据库或配置文件中读取
protected int $cssVersion = 0;
// 页面注册的Js文件
protected static array $registerJsFiles = [];
// 页面注册的Css文件
protected static array $registerCssFiles = [];
// web用户
protected array $webUser = [];
// 此模版定制使用
protected string $pageTitle = '';
protected string $listPageTitle = '';
设置菜单
protected function setMenuData(): void
{
if ($this->webUser) {
$this->webMenus = config('webConfig.webLoggedMenus');
} else {
$this->webMenus = config('webConfig.webMenus');
}
}
设置Seo信息
/**
* 设置SEO信息
*/
private function setSeoData(): void
{
if(isset($this->optionData['site_name'])) {
$this->seoData['seoTitle'] = $this->optionData['site_name'];
} else {
$this->seoData['seoTitle'] = '';
}
$this->seoData['seoKeywords'] = '';
$this->seoData['seoDescription'] = '';
}
/**
* 设置SEO标题
* @param $title
*/
protected function setSeoTitle($title): void
{
$this->seoData['seoTitle'] = $title;
}
/**
* 设置SEO关键字
* @param $keywords
*/
protected function setSeoKeywords($keywords): void
{
$this->seoData['seoKeywords'] = $keywords;
}
/**
* 设置SEO描述
* @param $description
*/
protected function setSeoDescription($description): void
{
$this->seoData['seoDescription'] = $description;
}
追加面包屑
/**
* 追加面包屑
* @param array $crumb
* @return void
*/
protected function appendCrumb(array $crumb): void
{
array_push($this->crumbs, $crumb);
}
重写assign函数
protected function assign(string $key, $val): void
{
$this->assignData[$key] = $val;
}
控制器注册Js文件
/**
* 注册JS文件
* @param $file
* @return void
*/
protected function registerJsFile($files): void
{
if (is_string($files)) {
$files = explode(',', $files);
}
// 准备模板字符串替换
$tplReplaceStrings = config('view.tpl_replace_string');
if ($tplReplaceStrings) {
$tplReplaceKeys = array_keys($tplReplaceStrings);
$tplReplaceValues = array_values($tplReplaceStrings);
}
foreach ($files as $f) {
if ($tplReplaceStrings) {
// 模板字符串替换
$f = str_replace($tplReplaceKeys, $tplReplaceValues, $f);
}
$fileMd5 = md5($f);
if (!isset(self::$registerJsFiles[$fileMd5])) {
self::$registerJsFiles[$fileMd5] = $f;
}
}
}
控制器注册Css文件
/**
* 注册css文件
* @param $file
* @return void
*/
protected function registerCssFile($files): void
{
if (is_string($files)) {
$files = explode(',', $files);
}
// 准备模板字符串替换
$tplReplaceStrings = config('view.tpl_replace_string');
if ($tplReplaceStrings) {
$tplReplaceKeys = array_keys($tplReplaceStrings);
$tplReplaceValues = array_values($tplReplaceStrings);
}
foreach ($files as $f) {
if ($tplReplaceStrings) {
// 模板字符串替换
$f = str_replace($tplReplaceKeys, $tplReplaceValues, $f);
}
$fileMd5 = md5($f);
if (!isset(self::$registerCssFiles[$fileMd5])) {
self::$registerCssFiles[$fileMd5] = $f;
}
}
}
控制器注册资源文件使用方法
$registerJsFiles = [
'{__STATIC_ROOT__}/libs/tinymce/tinymce.min.js',
'{__STATIC_ROOT__}/libs/prism/prism.js'
];
$this->registerJsFile($registerJsFiles);
$this->registerCssFile('{__STATIC_ROOT__}/libs/prism/prism.css');