yii2高级版 后台上传图片-前台访问 [基础教程]

作者:代号黑鹰 发布于:2016-07-23 浏览:679次 收藏

这次的问题还是前一段时间别人碰到了问题,当然这个问题有好多解决方案,然后我说说我的方法(主要是思路)

方法一:

            用yii自带的全局变量 Yii::$app->params['upload_url']="http://admin.demo.com";

             在view里面显示的时候:Yii::$app->params['upload_url'].$url  ($url是数据库里面的数据/image/xx.jpg)

             这是一个完整的路径如果这是 yii2基础还好我可以在后台设置Yii::$app->params['upload_url']的值。

    高级模版怎么版呢?看下面:

            在common/config下的文件配置params_local.php文件如下图

            QQ截图20160723103158.png

            调用它如下:

     QQ截图20160723103512.png

    对这个我要说明一下这个对ueditor扩展有用,但是对图片上传扩展没有用(可能是源码问题-那天有时间在研究)

    那没办法就按照上面在view里面url地址前面加个Yii::$app->params['upload_url']吧!


说明:Yii::$app->params['upload_url']=“admin.test.cn”我这样在后台设置没用(前台可以),上面开始我就说明了,但是我是放在common里面,因此这个我放到frontend/config里面params_local.php文件是一样的。


这不符号我我想法(在后台管理可以设置图片域名前缀)----我想到了单例设计模式

方法二:

<?php

namespace common\core;


class coreInit
{
    protected static $instance = array(); //单例容器
    /**
     * 初始化
     */
    protected function __construct() {
        $this->run_register_global(); //注册全局变量
    }
    /**
     * 注册到框架全局可用变量
     * @param string $name 变量名称
     * @param val $value   变量值
     */
    public function register_global($name, $value) {
        self::$instance['global'][$name] = $value;
        $this->$name = $value;
    }

    /**
     * 运行全局变量
     */
    private function run_register_global() {
        if (isset(self::$instance['global']) && !empty(self::$instance['global'])) {
            foreach (self::$instance['global'] as $key => $value) {
                $this->$key = $value;
            }
        }
    }
}

然后在写一个类继承它

<?php

namespace common\core;


class AdminName extends coreInit
{
    private static $_instance = null;
    /**
     * 初始化
     */
    protected function __construct() {
        parent::__construct();
        //注册全局变量
        //$this->register_global('adminUrl', 'http://admin.demo.com');
    }


    //私有克隆函数,防止外办克隆对象
    private function __clone() {
    }
    //静态方法,单例统一访问入口
    static public function getInstance() {
        if (is_null ( self::$_instance ) || isset ( self::$_instance )) {
            self::$_instance = new self ();
        }
        return self::$_instance;
    }

    public function getName() {
       return $this->adminUrl;
    }

    public function setName($url){
        $this->register_global('adminUrl', $url);
    }

}

对于第二个类我说明一下:如果我不想外面改变这个值在(构造方法里面注册这个变量)方法setName将失效。


怎么调用呢?在后台模块你可以这样调用

AdminName::getInstance()->setName("admin.demo.com");

前台模块你可以这样

echo AdminName::getInstance()->getName();

输出的是 admin.demo.com


最后总结:

        框架其实是我们快速开发的一个工具而已,不应该过于依赖,思想很总要

我的目标是:成为一个写代码优雅,有艺术感的高级程序员!加油!

如果文章对您有所帮助,希望继续支持我们,您的支持是我们最大的动力 ¥打赏
标签: 前台访问后台图片 php单例模式
声明:文章内容由作者原创或整理,未经允许,不得转载!
您需要登录后才可以评论。登录 | 立即注册