金莎娱乐电子游戏网YII完结分页的点子

本文以实例代码简述了yii完结分页的措施,供就学yii的相爱的太子参照他事他说加以考察,具体代码如下:

写在开始

用了yii2框架也可以有一年的年华了,挺中意yii2的,时期也依照工作供给看过部分源码,在那写贰个多元的篇章,主假设解析下yii2框架的运营流程和内部基本的局地代码,借此做下笔记回看一下,加深对yii2的领会。yii2-basic和yii2-advanced主旨部分的规律和代码基本大器晚成致,偷个懒使用轻易版的yii2-basic作为剖析对象。

视图名

yii2手动增添插件PHPExcel

yii2手动增多插件PHPExcel

1.下载地址:

2.解压并校勘文件名称叫phpexcel

随后在yii项目标vendor目录下开创贰个文件夹命名叫phpoffice

把phpexcel文件放到phpoffic文件夹下

当时翻开vendor\phpoffice\phpexcel目录下会看见这个文件

金莎娱乐电子游戏网 1

 3.到vendor\composer目录下校勘文件autoload_namespaces.php,

增多一句代码注册命名空间

'PHPExcel' => array($vendorDir.'/phpoffice/phpexcel/Classes'),

如图:

金莎娱乐电子游戏网 2

接下去就足以开端使用了;

    //excel导入函数
    public function import($fileName){

        $objReader = new \PHPExcel();

        $file = $fileName;       
        $objPHPExcel = \PHPExcel_IOFactory::load($file); 
        $allSheet = $objPHPExcel->getSheetCount();
        for($i=0; $i<$allSheet;$i++){
            $dataSheet = $objPHPExcel->getSheet($i)->toArray('', true, true);
            if(!$this->saveData($dataSheet)) return '0';

        }

        return '1';
    } 

动用格局是直接   $objReader = new \PHPExcel();

难忘实例化时后面要加 \  

上述只是本身要好写的事例,本课程是写怎么手动引进PHPExcel插件的,具体用法就不作多介绍了,可自行百度;

留意试行上边步骤需备份文件,防止万生龙活虎:

php版本大于5.6大概会报错找不到此类;

如要援救就要求改革vendor\composer目录下的autoload_real.php文件

把关于$useStaticLoader这几个变量的if剖断的代码都删了;如下图红框标志的代码都删了; 

后来再把vendor\composer目录下的autoload_static.php文件删了,就足以支撑更加高版本的php了; 

留意看>=
50600那有个其余代码就知道为啥php版本大于5.6只怕会报错找不到此类;

金莎娱乐电子游戏网 3

yii2手动加多插件PHPExcel
1.下载地址:
2.解压并校勘文件名称为phpexcel 之后在yii项目标vend…

1.调整器部分代码:    

入口

yii2也是单入口框架,入口文件是/basic/web/index.php(/basic表示框架根目录卡塔尔(قطر‎,上边看一下代码

require(__DIR__ . '/../vendor/autoload.php'); // 加载composer的autoload
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); // 加载Yii.php
$config = require(__DIR__ . '/../config/web.php'); //加载配置
(new yii\web\Application($config))->run(); // 开始执行

composer的autoload详细能够到composer汉语文书档案中询问下,若是您还不驾驭composer那个包微处理机,必得先驾驭下。下边继续看下Yii.php的代码

require(__DIR__ . '/BaseYii.php'); // 加载BaseYii.php
class Yii extends \yii\BaseYii
{
}
spl_autoload_register(['Yii', 'autoload'], true, true); // 注册自定义autoload
Yii::$classMap = require(__DIR__ . '/classes.php'); // 加载框架的类映射文件
Yii::$container = new yii\di\Container(); // 初始化容器,yii2的container会在后面系列中说到

先看下yii2的类加载器

    public static function autoload($className)
    {
        // 先在Yii::$classMap即上面的__DIR__ . '/classes.php'中找是否有对应的类映射,如果有获取对应的类文件路径并检查替换别名,关于设置和替换别名这里不再赘述
        if (isset(static::$classMap[$className])) {
            $classFile = static::$classMap[$className];
            if ($classFile[0] === '@') {
                $classFile = static::getAlias($classFile);
            }
        } elseif (strpos($className, '\\') !== false) {
            // 对于使用命名空间类的加载
            $classFile = static::getAlias('@' . str_replace('\\', '/', $className) . '.php', false);
            if ($classFile === false || !is_file($classFile)) {
                // 没有找到类文件,直接返回
                return;
            }
        } else {
            // 没有找到类文件,直接返回,会继续使用composer的autoload进行解析
            return;
        }

        // 找到文件,include进来
        include($classFile);

        // 如果传进来的$className不是类、接口或trait,抛出异常
        if (YII_DEBUG && !class_exists($className, false) && !interface_exists($className, false) && !trait_exists($className, false)) {
            throw new UnknownClassException("Unable to find '$className' in file: $classFile. Namespace missing?");
        }
    }

Yii.php中制造了二个空的class
Yii来持续\yii\BaseYii,同一时间由入口文件直接require,所以Yii类的生命周期与框架的生命周期大器晚成致,成效域全局,同偶尔间Yii也继续了部分通用的不二秘技和大局的变量,一齐来造访BaseYii中皆某个什么

// 常量的定义,具有全局作用域
// 设置框架启动时间
defined('YII_BEGIN_TIME') or define('YII_BEGIN_TIME', microtime(true));
// 定义框架根目录 即yiisoft目录的路径
defined('YII2_PATH') or define('YII2_PATH', __DIR__);
// 设置是否在debug模式下运行
defined('YII_DEBUG') or define('YII_DEBUG', false);
// 设置运行环境,默认情况下是生产环境即prod,除此之外还有dev、test和staging
defined('YII_ENV') or define('YII_ENV', 'prod');
// 标志是否运行在prod环境
defined('YII_ENV_PROD') or define('YII_ENV_PROD', YII_ENV === 'prod');
// 标志是否运行在dev环境
defined('YII_ENV_DEV') or define('YII_ENV_DEV', YII_ENV === 'dev');
// 标志是否在test环境
defined('YII_ENV_TEST') or define('YII_ENV_TEST', YII_ENV === 'test');
// 标志是否允许设置error handler,默认允许
defined('YII_ENABLE_ERROR_HANDLER') or define('YII_ENABLE_ERROR_HANDLER', true);

// 对象属性的声明
// yii2内部类映射文件,用于加速autoload
public static $classMap = [];
// yii2 命令行模式和web模式下的应用实例
public static $app;
// 别名数组,初始化yii别名 
public static $aliases = ['@yii' => __DIR__];
// DI容器,用于创建对象,在Yii.php中定义
public static $container;

// 对象方法
// 获取当前yii2框架的版本
public static function getVersion;
// 获取别名
public static function getAlias;
// 获取根别名
public static function getRootAlias
// 设置别名
public static function setAlias
// 内部类自动加载方法
public static function autoload
// 类构造器
public static function createObject
// 获取日志实例
public static function getLogger
// 设置日志对象
public static function setLogger
// 四中类型的日志记录,这些在日志部分再细说
public static function trace
public static function error
public static function warning
public static function info
// 标记用于分析的代码块的开始和结束
public static function beginProfile
public static function endProfile
// 配置对象属性
public static function configure
// 获取对象的public属性,避免类内调用get_object_vars返回私有属性,增加安全性
public static function getObjectVars

渲染视图时,可内定两个视图名或视图像和文字件路线/别称,大许多状态下使用前面一个因为前端简洁利落,
大家称用名字的视图为 视图名.

public function actionTest() 
{ 
$criteria=new CDbCriteria; 
$criteria->order='id DESC'; 
$count=User::model()->count($criteria); 
$pager=new CPagination($count); 
$pager->pageSize=10; 
$pager->applyLimit($criteria); 
$userList=User::model()->findAll($criteria); 
$this->render('test',array('list'=>$userList,'pages'=>$pager)); 
} 

视图名能够依附以下法规到相应的视图文件路线:

2.视图部分代码:

视图名可粗略文件扩充名,这种情景下利用 .php 作为扩张, 视图名 about
对应到 about.php 文件名;视图名以双斜杠 // 伊始,对应的视图像和文字件路径为
@app/views/ViewName, 也正是说视图像和文字件在
yii\base\Application::viewPath 路线下找, 举个例子 //site/about 对应到
@app/views/site/about.php。视图名以单斜杠/先导,视图像和文字件路线以近期使用模块
的yii\base\Module::viewPath开端,
尽管不设有模块,使用@app/views/ViewName开始,举例,若是当前模块为user,
/user/create 对应成@app/modules/user/views/user/create.php,
固然不在模块中,/user/create对应@app/views/user/create.php。若是yii\base\View::context 渲染视图 並且上下文达成了
yii\base\ViewContextInterface, 视图文件路线由上下文的
yii\base\ViewContextInterface::getViewPath(卡塔尔国 伊始,
这种重大用在调控器和小零件中渲染视图,比如假使上下文为调节器SiteController,site/about 对应到
@app/views/site/about.php。若是视图渲染另二个视图,包蕴另二个视图像和文字件的目录以当下视图的文件路线始于,
举个例子被视图@app/views/post/index.php 渲染的 item 对应到
@app/views/post/item。依照以上准绳,在调控器中
app\controllers\PostController 调用 $this->render,
实际上渲染@app/views/post/view.php 视图像和文字件,当在该视图像和文字件中调用
$this->render 会渲染@app/views/post/_overview.php 视图像和文字件。

username.'
'; 
echo $o->id.'
'; 
} 
$this->widget('CLinkPager',array( 
'header'=>'', 
'firstPageLabel' => '首页', 
'lastPageLabel' => '末页', 
'prevPageLabel' => '上一页', 
'nextPageLabel' => '下一页', 
'pages' => $pages, 
'maxButtonCount'=>13 
) 
); 
?>

视图中做客数据

在视图中有二种办法访谈数据:推送和拉取。

推送方式是透过视图渲染方法的第贰个参数字传送递数据,数据格式应该为名称-值的数组,
视图渲染时,调用PHP extract(State of Qatar 方法将该数组转换为视图可访问的变量。
例如,如下调节器的渲染视图代码推送2个变量到 report 视图:$foo = 1 和
$bar = 2。

echo $this->render('report', [ 'foo' => 1, 'bar' => 2,]);

拉取格局可让视图从yii\base\View视图组件或别的对象中主动获取数据,
在视图中选择如下表达式$this->context可取获得调整器ID,
可让你在report视图中得到调控器的任性属性或艺术,如以下代码获取调整器ID。

The controller ID is: context->id ?>?>

推送情势让视图越来越少依赖上下文对象,是视图获取数据优先接受情势,
劣点是须求手动塑造数组,某些麻烦,在分化地点渲染时轻松失误。

视图间分享数据

yii\base\View视图组件提供yii\base\View::params参数属性来让不一样视图分享数据。

诸如在about视图中,可选用如下代码钦赐当前breadcrumbs的一时一刻有的。

$this->params['breadcrumbs'][] = 'About Us';

在构造文件中,可接收种种参预到yii\base\View::params数组的值来
生成呈现breadcrumbs:

 isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],]) ?>

布局

构造是黄金时代种新鲜的视图,代表三个视图的共用部分,举例,大多数Web应用分享雷同的页头和页尾,
在每一个视图中另行相近的页头和页尾,越来越好的措施是将这么些集体放到三个搭架子中,
渲染内容视图后在格外之处停放到结构中。

创办布局

是因为布局也是视图,它可像平日视图相似创设,布局暗中同意存款和储蓄在@app/views/layouts路线下,
模块中央银行使的结构应存款和储蓄在yii\base\Module::basePath模块目录
下的views/layouts路线下,可配置yii\base\Module::layoutPath来自定义应用或模块的结构暗许路线。

如下示例为三个搭架子大致内容,注意作为示范,简化了广大代码,
在实质上中,你大概想增加更加多内容,如底部标签,主菜单等。

beginPage() ?>   head() ?>beginBody() ?> My Company  © 2014 by My CompanyendBody() ?>endPage() ?>

相关文章