mulinqiu

mulinqiu

这家伙有点懒,还没写个性签名!

  • 财富值25
  • 威望值0
  • 总积分125

个人信息

  • 赞了回复

    对前端而言,在 Yii 2 中默认 bootstrap 3、jQuery、PJAX 等等个人开发用着倒也干脆利落,但在前后端分离的趋势下,那些代码集成到框架中让一个代码洁癖患者的我难以忍受。当我想把bootstrap 3升级为 bootstrap 4,在 Yii 2 中升级太麻烦了,因为它直接把一些 bootstrap3 的特性写到了Yii2 框架的代码中。

  • 回复了 的回复

    对前端而言,在 Yii 2 中默认 bootstrap 3、jQuery、PJAX 等等个人开发用着倒也干脆利落,但在前后端分离的趋势下,那些代码集成到框架中让一个代码洁癖患者的我难以忍受。当我想把bootstrap 3升级为 bootstrap 4,在 Yii 2 中升级太麻烦了,因为它直接把一些 bootstrap3 的特性写到了Yii2 框架的代码中。

    这个完全可以轻松改造。前后端分离其实在YII2中很容易实现。类似下面的代码。
    1、公共资源(CDN)服务器,放静态资源如css、js;
    2、配置前端资源:

    /*前端资源配置*/
    'assetManager' => [
        //yii\web\AssetManager
        'linkAssets' => false,//使用符号链接,前提是操作系统和Web服务器允许可以使用符号链接
        'appendTimestamp' => true,//给资源文件末尾添加时间版本
        'forceCopy' => YII_DEBUG ? true : false,//强制复制资源文件到@web/asset,不管是否有更新,在开发环境下=true;在生产环境下=false
        //'bundles' => require __DIR__ . '/' . (YII_ENV_PROD ? 'assets-prod.php' : 'assets-dev.php'),
    ],
    

    3、添加一个cdn引用链接配置文件如cdn.php放在config下面,格式如下:

    return [
        'global' => [
            'plugins' => [
                'bootstrap' => [
                    'css' => [
                        'bootstrap.min.css' => 'http://cdn.backend.com' . '/global/plugins/bootstrap/css/bootstrap.min.css',
                    ]
                ],
                'jquery' => [
                    'jquery.js' => 'http://cdn.backend.com' . '/global/plugins/jquery/jquery.js',
                    'jquery.min.js' => 'http://cdn.backend.com' . '/global/plugins/jquery/jquery.min.js',
                    'jquery.min.map' => 'http://cdn.backend.com' . '/global/plugins/jquery/jquery.min.map',
                ],
            ],
    

    4、将3中的cdn导入到全局配置main.config,可以片定义一个Cdn类,如下:

    /**
     * Class Cdn
     * 静态资源组件,该组件定义了静态资源如css、js等文件地址的信息
     *
     * @package common\components
     */
    class Cdn extends Component
    {
        public $cdn = [];//资源地址
    
        public function getCdn()
        {
            return $this->cdn;
        }
    }
    

    并导入到全局配置main.config中如下:

    /*cdn资源共享配置*/
    'cdn' => [
        'class' => 'common\components\Cdn',
        'cdn' => require(__DIR__ . '/cdn.php'),
    ],
    

    5、在Asset中加载静态资源:

    class LoginAsset extends BaseAsset
    {
        /* 全局CSS文件 */
        public $css = [
        ];
        /* 全局JS文件 */
        public $js = [
        ];
        /* 依赖关系 */
        public $depends = [
            'login\html\assets\CoreAsset',
        ];
    
        public function init()
        {
            parent::init();
            $this->css = \yii\helpers\ArrayHelper::merge($this->css,
                [
                    \Yii::$app->get('cdn')->cdn['login']['html']['static']['app']['css']['base.css'],
                    \Yii::$app->get('cdn')->cdn['login']['html']['static']['app']['css']['login.css'],
                    \Yii::$app->get('cdn')->cdn['login']['html']['static']['app']['fonts']['style.css'],
                ]
            );
            $this->js = \yii\helpers\ArrayHelper::merge($this->js,
                [
                    \Yii::$app->get('cdn')->cdn['login']['html']['static']['app']['js']['login.js'],
                    \Yii::$app->get('cdn')->cdn['login']['html']['static']['app']['js']['warning.js'],
                ]
            );
        }
    }
    

    6、在index.html中注册资源:

    <?php
    
    \login\html\assets\LoginAsset::register($this);
    ?>
    <!-- BEGIN CONTAINER -->
    <div class="container">
    ...
    
  • console不需要authmanager,也就是说不需要认证,因为能执行console的用户已经是管理员账号了。

  • 回复了 的回答

    这个问题我之前考虑过,我最后只把RBAC给后台用了,前台不用了。因为我发现我不管怎么弄,总感觉画风不对。

    他说的不是这个意思,他是说只要后台用RBAC控制权限,前端不用控制权限。你理解成只要后台设置权限。

  • 你怎么连QueryParamAuth的access-token都能省?千万不要误导人啊。

  • 你好,执行composer install一直这种错误,什么原因呢?
    WeChat Screenshot_20180718184325.png

助理 等级规则
125/200
资料完整度
10/100
用户活跃度
0/100

Ta的关注

0

Ta的粉丝

0

Ta的访客

2