分类 Laravel 下的文章

1、获取上传的文件

$file=$request->file(‘file’);

2、获取上传文件的文件名(带后缀,如 abc.png)

$filename=$file->getClientOriginalName();

3、获取上传文件的后缀(如 abc.png,获取到的为 png)

$fileextension=$file->getClientOriginalExtension();

4、获取上传文件的大小

$filesize=$file->getClientSize();

5、获取缓存在 tmp 目录下的文件名(带后缀,如 php8933.tmp)

$filaname=$file->getFilename();

6、获取上传的文件缓存在 tmp 文件夹下的绝对路径

$realpath=$file->getRealPath();

7、将缓存在 tmp 目录下的文件移到某个位置,返回的是这个文件移动过后的路径

$path=$file->move(path,newname);

move () 方法有两个参数,第一个参数是文件移到哪个文件夹下的路径,第二个参数是将上传的文件重新命名的文件名

8、检测上传的文件是否合法,返回值为 true 或 false

$file->isValid();

转自:https://learnku.com/articles/61077

1、xls
application/vnd.ms-excel
2、xlsx
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
3、ppt
application/vnd.ms-powerpoint
4、pptx
application/vnd.openxmlformats-officedocument.presentationml.presentation
5、doc
application/msword
6、docx
application/vnd.openxmlformats-officedocument.wordprocessingml.document
7、zip
application/x-zip-compressed
8、rar
application/x-zip-compressed
9、wmv
video/x-ms-wmv
10、mp3
audio/mpeg
11、mp4
video/mp4
12、gif
image/gif
13、jpg
image/jpeg
14、png
image/png
15、bmp
image/bmp
16、psd
application/octet-stream
17、ico
image/x-icon
18、7z
application/octet-stream
19、exe
application/octet-stream
20、avi
video/avi
21、rmvb
application/vnd.rn-realmedia-vbr
22、3gp
application/octet-stream
23、flv
application/octet-stream
24、wav
audio/wav
25、krc
application/octet-stream
26、lrc
application/octet-stream
27、txt
text/plain
28、pdf
application/pdf
29、chm
application/octet-stream
30、mdb
application/msaccess
31、sql
application/octet-stream
32、con
application/octet-stream
33、log
text/plain
34、dat
application/octet-stream
35、ini
application/octet-stream
36、php
application/octet-stream
37、html 和 htmhtm
text/html
38、ttf
application/octet-stream
39、fon
application/octet-stream
40、js
application/x-javascript
41、xml
text/xml
42、dll
application/octet-stream

转自:https://learnku.com/articles/60802

products商品表

字段名称 描述 类型 加索引缘由
id 自增长ID unsigned big int 主键
title SKU 名称 varchar
description SKU 描述 varchar
price SKU 价格 decimal
stock 库存 unsigne int
product_id 所属商品 id unsigne big int 外键

orders订单表

字段名称 描述 类型 加索引缘由
id 自增长ID unsigned big int 主键
no 订单流水号 varchar 唯一
user_id 下单的用户ID unsigned big int 外键
address JSON格式的收货地址 text
total_amount 订单总金额 decimal
remark 订单备注 text
paid_at 支付时间 datetime, null
payment_method 支付方式 varchar, null
payment_no 支付平台订单号 varchar, null
refund_status 退款状态 varchar
refund_no 退款单号 varchar, null 唯一
closed 订单是否已关闭 tinyint, default 0
reviewed 订单是否已评价 tinyint, default 0
ship_status 物流状态 varchar
ship_data 物流数据 text, null
extra 其他额外的数据 text, null

order_sku 订单项目名

字段名称 描述 类型 加索引缘由
id 自增长ID unsigned big int 主键
order_id 所属订单ID unsigned big int 外键
product_id 对应商品ID unsigned big int 外键
product_sku_id 对应商品SKU ID unsigned big int 外键
amount 数量 unsigned int
price 单价 decimal
rating 用户打分 unsigned int, null
review 用户评价 text
reviewed_at 评价时间 timestamp, null

答案:这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。

附:面向切面编程(AOP是Aspect Oriented Program的首字母缩写) ,我们知道,面向对象的特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这在软件设计中往往称为职责分配。实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用。
但是人们也发现,在分散代码的同时,也增加了代码的重复性。什么意思呢?比如说,我们在两个类中,可能都需要在每个方法中做日志。按面向对象的设计方法,我们就必须在两个类的方法中都加入日志的内容。也许他们是完全相同的,但就是因为面向对象的设计让类与类之间无法联系,而不能将这些重复的代码统一起来。
也许有人会说,那好办啊,我们可以将这段代码写在一个独立的类独立的方法里,然后再在这两个类中调用。但是,这样一来,这两个类跟我们上面提到的独立的类就有耦合了,它的改变会影响这两个类。那么,有没有什么办法,能让我们在需要的时候,随意地加入代码呢?这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
一般而言,我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。
这样看来,AOP其实只是OOP的补充而已。OOP从横向上区分出一个个的类来,而AOP则从纵向上向对象中加入特定的代码。有了AOP,OOP变得立体了。如果加上时间维度,AOP使OOP由原来的二维变为三维了,由平面变成立体了。从技术上来说,AOP基本上是通过代理机制实现的。
AOP在编程历史上可以说是里程碑式的,对OOP编程是一种十分有益的补充。

https://www.iteye.com/blog/hejiajunsh-1776569

错误如下:

Composer detected issues in your platform:

Your Composer dependencies require a PHP version ">= 7.4.0". You are running 7.3.24-(to be removed in future macOS).

PHP Fatal error:  Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 7.4.0". You are running 7.3.24-(to be removed in future macOS). 

解决办法:

1、在项目根目录的composer.josn内增加

{
    "config": {
    
        "platform-check": false
    }
}

2、清除配置缓存:

run php artisan config:cache

3、重构对象,在控制台执行:

composer dump-autoload

1.首先在http://open-doc.dingtalk.com/microapp/serverapi2/vzzrkv中下载PHP版本SDK。解压后文件目录如图:

111.jpeg

这里我只用到dingtalk中的文件,删除aliyun、QimenCloud目录,保留top目录Autoloader.phpTopSdk.php文件。

2、composer.json中:

"autoload": {
    "classmap": [
        "database"
    ],
    "files":[
        "app/Packages/taobao/TopSdk.php"
    ],
    "psr-4": {
        "App\\": "app/"
    }
 
}

别忘记:然后执行composer dump-autoload

3、执行完毕后,在Controller中就可以直接使用DingTalk SDK了。测试结果如下(注意要加‘ \ ’):

object(DingTalkClient)#276 (9) { ["gatewayUrl"]=> string(34) "http://eco.taobao.com/router/rest" ["format"]=> string(4) "json" ["connectTimeout"]=> NULL ["readTimeout"]=> NULL ["apiCallType"]=> string(4) "oapi" ["httpMethod"]=> string(4) "POST" ["checkRequest"]=> bool(true) ["apiVersion":protected]=> string(3) "2.0" ["sdkVersion":protected]=> string(25) "dingtalk-sdk-php-20161214" }

本文转载:https://blog.csdn.net/xiaoweite1/article/details/106175892

一、若出现Not Found The requested URL解决

public下的.htaccess文件增加:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

二、若出现图片无法上传或访问请这样解决

1、php artisan storage:link但需要在cmd下操作,这时需要在“我的电脑”里增加path环境变量。
112233.png
如下图,找到php对应的目录(如:php.exe所在目录),即:E:\phpstudy\Extensions\php\php7.4.3nts
2、找到“我的电脑”的环境变量增加,如下图:
11223344.png
3、接下来就可以在cmd下执行相关操作了,如下:
223344.png

三、上线后的必要优化,提升访问速度很有效

配置信息缓存 artisan config:cache
路由缓存 artisan route:cache
类映射加载优化 artisan optimize
自动加载优化 composer dumpautoload
使用 Memcached 来存储会话 config/session.php
使用专业缓存驱动器 config/cache.php
数据库请求优化
为数据集书写缓存逻辑
使用即时编译器(JIT),如:HHVM
开启 OpCache
前端资源合并 Elixir

更多优化见:https://learnku.com/laravel/t/47213

方法一:

//视图
//pagination::simple-default  //tailwind樣式
//pagination::simple-bootstrap-4  //bootstrap UI
$data->links('pagination::bootstrap-4')

//CSS定义
.pagination {
    display: inline-block;
    padding-left: 0;
    margin: 20px 0;
    border-radius: 4px;
}
.pagination > li {
    display: inline;
}
.pagination > li > a,
.pagination > li > span {
    position: relative;
    float: left;
    padding: 6px 12px;
    margin-left: -1px;
    line-height: 1.42857143;
    color: #428bca;
    text-decoration: none;
    background-color: #fff;
    border: 1px solid #ddd;
}
.pagination > li:first-child > a,
.pagination > li:first-child > span {
    margin-left: 0;
    border-top-left-radius: 4px;
    border-bottom-left-radius: 4px;
}
.pagination > li:last-child > a,
.pagination > li:last-child > span {
    border-top-right-radius: 4px;
    border-bottom-right-radius: 4px;
}
.pagination > li > a:hover,
.pagination > li > span:hover,
.pagination > li > a:focus,
.pagination > li > span:focus {
    color: #009688;
    background-color: #eee;
    border-color: #ddd;
}
.pagination > .active > a,
.pagination > .active > span,
.pagination > .active > a:hover,
.pagination > .active > span:hover,
.pagination > .active > a:focus,
.pagination > .active > span:focus {
    z-index: 2;
    color: #fff;
    cursor: default;
    background-color: #009688;
    border-color: #009688;
}
.pagination > .disabled > span,
.pagination > .disabled > span:hover,
.pagination > .disabled > span:focus,
.pagination > .disabled > a,
.pagination > .disabled > a:hover,
.pagination > .disabled > a:focus {
    color: #777;
    cursor: not-allowed;
    background-color: #fff;
    border-color: #ddd;
}
.clear{
    clear: both;
}

方法二:

也即是官方给的方法,在\App\Providers\AppServiceProvider中的boot方法中引用。

use Illuminate\Support\ServiceProvider;

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    Paginator::useBootstrap();
}


有时候可能会遇到这种情况,$dataA$dataB是从数据库取出的两个不同的数据集合,需要同时将$dataA$dataB分配到视图并进行分页展示,那这种情况怎么办呢?

//控制器中
public function index(LiveService $liveService, Request $request)
    {
        //数据A
        $dataA = User::where('status', 1)->get()->toArray();
        //数据B
        $dataB = User::where('status', 2)->get()->toArray();
        $data = array_merge($dataA, $dataB);
        //当前页数 默认1
        $page = $request->page ?: 1;
        //每页的条数
        $perPage = 4;
        //计算每页分页的初始位置
        $offset = ($page * $perPage) - $perPage;
          //实例化LengthAwarePaginator类,并传入对应的参数
        $data = new LengthAwarePaginator(array_slice($data, $offset, $perPage, true), count($data), $perPage,
            $page, ['path' => $request->url(), 'query' => $request->query()]);
        return view('admin.users.index', compact('data'));
    }

//视图中
{{ $data->links() }}