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');

 

 

 

文哥博客(https://wenge365.com)属于文野个人博客,欢迎浏览使用

联系方式:qq:52292959 邮箱:52292959@qq.com

备案号:粤ICP备18108585号 友情链接