mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-08 07:32:48 +08:00
Merge branch 'master' of https://github.com/top-think/framework
This commit is contained in:
@@ -37,13 +37,13 @@ script:
|
|||||||
## LINT
|
## LINT
|
||||||
- find . -path ./vendor -prune -o -type f -name \*.php -exec php -l {} \;
|
- find . -path ./vendor -prune -o -type f -name \*.php -exec php -l {} \;
|
||||||
## PHP_CodeSniffer
|
## PHP_CodeSniffer
|
||||||
- THINK_AUTOLOAD=0 vendor/bin/phpcs --runtime-set ignore_errors_on_exit 1 --runtime-set ignore_warnings_on_exit 1 --standard=PSR2 --ignore="vendor/*" ./
|
- vendor/bin/phpcs --runtime-set ignore_errors_on_exit 1 --runtime-set ignore_warnings_on_exit 1 --standard=PSR2 --ignore="vendor/*" ./
|
||||||
## PHP Copy/Paste Detector
|
## PHP Copy/Paste Detector
|
||||||
- THINK_AUTOLOAD=0 vendor/bin/phpcpd --verbose --exclude vendor ./ || true
|
- vendor/bin/phpcpd --verbose --exclude vendor ./ || true
|
||||||
## PHPLOC
|
## PHPLOC
|
||||||
- THINK_AUTOLOAD=0 vendor/bin/phploc --exclude vendor ./
|
- vendor/bin/phploc --exclude vendor ./
|
||||||
## PHPUNIT
|
## PHPUNIT
|
||||||
- THINK_AUTOLOAD=0 vendor/bin/phpunit --coverage-clover=coverage.xml --configuration=phpunit.xml
|
- vendor/bin/phpunit --coverage-clover=coverage.xml --configuration=phpunit.xml
|
||||||
|
|
||||||
after_success:
|
after_success:
|
||||||
- bash <(curl -s https://codecov.io/bash)
|
- bash <(curl -s https://codecov.io/bash)
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ class Build
|
|||||||
foreach ($list as $dir) {
|
foreach ($list as $dir) {
|
||||||
if (!is_dir(APP_PATH . $dir)) {
|
if (!is_dir(APP_PATH . $dir)) {
|
||||||
// 创建目录
|
// 创建目录
|
||||||
mkdir(APP_PATH . $dir, 0644, true);
|
mkdir(APP_PATH . $dir, 0755, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -73,7 +73,7 @@ class Build
|
|||||||
foreach ($list as $file) {
|
foreach ($list as $file) {
|
||||||
if (!is_dir(APP_PATH . dirname($file))) {
|
if (!is_dir(APP_PATH . dirname($file))) {
|
||||||
// 创建目录
|
// 创建目录
|
||||||
mkdir(APP_PATH . dirname($file), 0644, true);
|
mkdir(APP_PATH . dirname($file), 0755, true);
|
||||||
}
|
}
|
||||||
if (!is_file(APP_PATH . $file)) {
|
if (!is_file(APP_PATH . $file)) {
|
||||||
file_put_contents(APP_PATH . $file, 'php' == pathinfo($file, PATHINFO_EXTENSION) ? "<?php\n" : '');
|
file_put_contents(APP_PATH . $file, 'php' == pathinfo($file, PATHINFO_EXTENSION) ? "<?php\n" : '');
|
||||||
@@ -118,7 +118,7 @@ class Build
|
|||||||
foreach ($file as $dir) {
|
foreach ($file as $dir) {
|
||||||
if (!is_dir($modulePath . $dir)) {
|
if (!is_dir($modulePath . $dir)) {
|
||||||
// 创建目录
|
// 创建目录
|
||||||
mkdir($modulePath . $dir, 0644, true);
|
mkdir($modulePath . $dir, 0755, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} elseif ('__file__' == $path) {
|
} elseif ('__file__' == $path) {
|
||||||
@@ -146,7 +146,7 @@ class Build
|
|||||||
$filename = $modulePath . $path . DS . $val . '.html';
|
$filename = $modulePath . $path . DS . $val . '.html';
|
||||||
if (!is_dir(dirname($filename))) {
|
if (!is_dir(dirname($filename))) {
|
||||||
// 创建目录
|
// 创建目录
|
||||||
mkdir(dirname($filename), 0644, true);
|
mkdir(dirname($filename), 0755, true);
|
||||||
}
|
}
|
||||||
$content = '';
|
$content = '';
|
||||||
break;
|
break;
|
||||||
@@ -178,7 +178,7 @@ class Build
|
|||||||
$content = file_get_contents(THINK_PATH . 'tpl' . DS . 'default_index.tpl');
|
$content = file_get_contents(THINK_PATH . 'tpl' . DS . 'default_index.tpl');
|
||||||
$content = str_replace(['{$app}', '{$module}', '{layer}', '{$suffix}'], [$namespace, $module ? $module . '\\' : '', 'controller', $suffix ? 'Controller' : ''], $content);
|
$content = str_replace(['{$app}', '{$module}', '{layer}', '{$suffix}'], [$namespace, $module ? $module . '\\' : '', 'controller', $suffix ? 'Controller' : ''], $content);
|
||||||
if (!is_dir(dirname($filename))) {
|
if (!is_dir(dirname($filename))) {
|
||||||
mkdir(dirname($filename), 0644, true);
|
mkdir(dirname($filename), 0755, true);
|
||||||
}
|
}
|
||||||
file_put_contents($filename, $content);
|
file_put_contents($filename, $content);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ class File extends SplFileObject
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mkdir($path, 0644, true)) {
|
if (mkdir($path, 0755, true)) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
$this->error = "目录 {$path} 创建失败!";
|
$this->error = "目录 {$path} 创建失败!";
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ abstract class Paginator
|
|||||||
'fragment' => ''
|
'fragment' => ''
|
||||||
];
|
];
|
||||||
|
|
||||||
public function __construct($items, $listRows, $currentPage = null, $simple = false, $total = null, $options = [])
|
protected function __construct($items, $listRows, $currentPage = null, $total = null, $simple = false, $options = [])
|
||||||
{
|
{
|
||||||
$this->options = array_merge($this->options, $options);
|
$this->options = array_merge($this->options, $options);
|
||||||
|
|
||||||
@@ -71,12 +71,21 @@ abstract class Paginator
|
|||||||
$this->items = PaginatorCollection::make($items, $this);
|
$this->items = PaginatorCollection::make($items, $this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function items()
|
/**
|
||||||
|
* @param $items
|
||||||
|
* @param $listRows
|
||||||
|
* @param null $currentPage
|
||||||
|
* @param bool $simple
|
||||||
|
* @param null $total
|
||||||
|
* @param array $options
|
||||||
|
* @return PaginatorCollection
|
||||||
|
*/
|
||||||
|
public static function make($items, $listRows, $currentPage = null, $total = null, $simple = false, $options = [])
|
||||||
{
|
{
|
||||||
return $this->items;
|
$paginator = new static($items, $listRows, $currentPage, $total, $simple, $options);
|
||||||
|
return $paginator->items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected function setCurrentPage($currentPage)
|
protected function setCurrentPage($currentPage)
|
||||||
{
|
{
|
||||||
if (!$this->simple && $currentPage > $this->lastPage) {
|
if (!$this->simple && $currentPage > $this->lastPage) {
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class Make extends Command
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!is_dir(dirname($file))) {
|
if (!is_dir(dirname($file))) {
|
||||||
mkdir(strtolower(dirname($file)), 0644, true);
|
mkdir(strtolower(dirname($file)), 0755, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
file_put_contents($file, $content);
|
file_put_contents($file, $content);
|
||||||
|
|||||||
@@ -972,6 +972,8 @@ class Query
|
|||||||
{
|
{
|
||||||
$config = array_merge(Config::get('paginate'), $config);
|
$config = array_merge(Config::get('paginate'), $config);
|
||||||
$listRows = $listRows ?: $config['list_rows'];
|
$listRows = $listRows ?: $config['list_rows'];
|
||||||
|
|
||||||
|
/** @var Paginator $class */
|
||||||
$class = false !== strpos($config['type'], '\\') ? $config['type'] : '\\think\\paginator\\driver\\' . ucwords($config['type']);
|
$class = false !== strpos($config['type'], '\\') ? $config['type'] : '\\think\\paginator\\driver\\' . ucwords($config['type']);
|
||||||
$page = isset($config['page']) ? (int)$config['page'] : call_user_func([
|
$page = isset($config['page']) ? (int)$config['page'] : call_user_func([
|
||||||
$class,
|
$class,
|
||||||
@@ -982,7 +984,6 @@ class Query
|
|||||||
|
|
||||||
$config['path'] = isset($config['path']) ? $config['path'] : call_user_func([$class, 'getCurrentPath']);
|
$config['path'] = isset($config['path']) ? $config['path'] : call_user_func([$class, 'getCurrentPath']);
|
||||||
|
|
||||||
/** @var Paginator $paginator */
|
|
||||||
if (!$simple) {
|
if (!$simple) {
|
||||||
$options = $this->getOptions();
|
$options = $this->getOptions();
|
||||||
$total = $this->count();
|
$total = $this->count();
|
||||||
@@ -992,8 +993,7 @@ class Query
|
|||||||
$total = null;
|
$total = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$paginator = new $class($results, $listRows, $page, $simple, $total, $config);
|
return $class::make($results, $listRows, $page, $total, $simple, $config);
|
||||||
return $paginator->items();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ use think\Paginator;
|
|||||||
* @method string render()
|
* @method string render()
|
||||||
* @method Paginator fragment($fragment)
|
* @method Paginator fragment($fragment)
|
||||||
* @method Paginator appends($key, $value)
|
* @method Paginator appends($key, $value)
|
||||||
|
* @method integer lastPage()
|
||||||
|
* @method boolean hasPages()
|
||||||
*/
|
*/
|
||||||
class Collection extends \think\Collection
|
class Collection extends \think\Collection
|
||||||
{
|
{
|
||||||
@@ -41,16 +43,6 @@ class Collection extends \think\Collection
|
|||||||
return new static($items, $paginator);
|
return new static($items, $paginator);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setPaginator(Paginator $paginator)
|
|
||||||
{
|
|
||||||
$this->paginator = $paginator;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getPaginator()
|
|
||||||
{
|
|
||||||
return $this->paginator;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function toArray()
|
public function toArray()
|
||||||
{
|
{
|
||||||
if ($this->paginator) {
|
if ($this->paginator) {
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ class File
|
|||||||
// 检测模板目录
|
// 检测模板目录
|
||||||
$dir = dirname($cacheFile);
|
$dir = dirname($cacheFile);
|
||||||
if (!is_dir($dir)) {
|
if (!is_dir($dir)) {
|
||||||
mkdir($dir, 0644, true);
|
mkdir($dir, 0755, true);
|
||||||
}
|
}
|
||||||
// 生成模板缓存文件
|
// 生成模板缓存文件
|
||||||
if (false === file_put_contents($cacheFile, $content)) {
|
if (false === file_put_contents($cacheFile, $content)) {
|
||||||
|
|||||||
4
tests/.gitignore
vendored
Normal file
4
tests/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
/runtime/
|
||||||
|
/application/common.php
|
||||||
|
/application/demo/
|
||||||
|
/application/runtime/
|
||||||
@@ -48,16 +48,12 @@ class appTest extends \PHPUnit_Framework_TestCase
|
|||||||
{
|
{
|
||||||
public function testRun()
|
public function testRun()
|
||||||
{
|
{
|
||||||
App::run(Request::create("http://www.example.com"))->send();
|
$response = App::run(Request::create("http://www.example.com"));
|
||||||
|
|
||||||
$expectOutputString = '<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p> ThinkPHP V5<br/><span style="font-size:30px">十年磨一剑 - 为API开发设计的高性能框架</span></p><span style="font-size:22px;">[ V5.0 版本由 <a href="http://www.qiniu.com" target="qiniu">七牛云</a> 独家赞助发布 ]</span></div><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script><script type="text/javascript" src="http://ad.topthink.com/Public/static/client.js"></script><thinkad id="ad_bd568ce7058a1091"></thinkad>';
|
$expectOutputString = '<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p> ThinkPHP V5<br/><span style="font-size:30px">十年磨一剑 - 为API开发设计的高性能框架</span></p><span style="font-size:22px;">[ V5.0 版本由 <a href="http://www.qiniu.com" target="qiniu">七牛云</a> 独家赞助发布 ]</span></div><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script><script type="text/javascript" src="http://ad.topthink.com/Public/static/client.js"></script><thinkad id="ad_bd568ce7058a1091"></thinkad>';
|
||||||
$this->expectOutputString($expectOutputString);
|
|
||||||
|
|
||||||
$rc = new ReflectionClass('\think\Loader');
|
$this->assertEquals($expectOutputString, $response->getContent());
|
||||||
$ns = $rc->getProperty('prefixDirsPsr4');
|
$this->assertEquals(200, $response->getCode());
|
||||||
$ns->setAccessible(true);
|
|
||||||
$namespace = $ns->getValue();
|
|
||||||
$this->assertEquals([realpath(TEST_PATH)], $namespace['tests\\']);
|
|
||||||
|
|
||||||
$this->assertEquals(true, function_exists('lang'));
|
$this->assertEquals(true, function_exists('lang'));
|
||||||
$this->assertEquals(true, function_exists('config'));
|
$this->assertEquals(true, function_exists('config'));
|
||||||
|
|||||||
44
tests/thinkphp/library/think/paginateTest.php
Normal file
44
tests/thinkphp/library/think/paginateTest.php
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Copyright (c) 2006-2015 http://thinkphp.cn All rights reserved.
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: yunwuxin <448901948@qq.com>
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace tests\thinkphp\library\think;
|
||||||
|
|
||||||
|
|
||||||
|
use think\paginator\driver\Bootstrap;
|
||||||
|
|
||||||
|
class paginateTest extends \PHPUnit_Framework_TestCase
|
||||||
|
{
|
||||||
|
public function testPaginatorInfo()
|
||||||
|
{
|
||||||
|
$p = Bootstrap::make($array = ['item3', 'item4'], 2, 2, 4);
|
||||||
|
|
||||||
|
$this->assertEquals(4, $p->total());
|
||||||
|
|
||||||
|
$this->assertEquals(2, $p->listRows());
|
||||||
|
|
||||||
|
$this->assertEquals(2, $p->currentPage());
|
||||||
|
|
||||||
|
$p2 = Bootstrap::make($array2 = ['item3', 'item4'], 2, 2, 2);
|
||||||
|
$this->assertEquals(1, $p2->currentPage());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPaginatorRender()
|
||||||
|
{
|
||||||
|
$p = Bootstrap::make($array = ['item3', 'item4'], 2, 2, 100);
|
||||||
|
$render = '<ul class="pagination"><li><a href="/?page=1">«</a></li> <li><a href="/?page=1">1</a></li><li class="active"><span>2</span></li><li><a href="/?page=3">3</a></li><li><a href="/?page=4">4</a></li><li><a href="/?page=5">5</a></li><li><a href="/?page=6">6</a></li><li><a href="/?page=7">7</a></li><li><a href="/?page=8">8</a></li><li class="disabled"><span>...</span></li><li><a href="/?page=49">49</a></li><li><a href="/?page=50">50</a></li> <li><a href="/?page=3">»</a></li></ul>';
|
||||||
|
|
||||||
|
$this->assertEquals($render, $p->render());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user