记使用laravel-excel问题及文件转码

25. July 2019 Laravel 0
laravel 5.5 laravel-excel 3.1 php 7.2 导入Excel格式文件的数据没问题,but,遇到计算列后就有问题了。 抛出异常,PhpOffice PhpSpreadsheet Calculation  Exception array_keys() expects parameter 1 to be array, float given, controller: $data = Excel::toCollection(new UsersImport(), public_path(\"test1.xls\")); import: class UsersImport implements ToCollection,WithCalculatedFormulas 搜索了一些资料尚未解决,目前还未研究PhpSpreadsheet源码,项目时间不允许。那么,换个思路,使用csv格式文件,word和wps都支持。 然后,我又遇到编码问题了,laravel-excel默认编码为UTF-8,Office Excel另存为CSV文件的编码也是UTF-8,这没问题。然而WPS的存储CSV默认的编码为GB2312,laravel-excel目前没发现可以设置编码自动选择或指定多个编码,情况就有点尴尬了,只能在控制器中修改文件编码了,如下: private function getFile($request) { $file = $request->file(\"file_name\"); $content = file_get_contents($file); $content = $this->str_to_utf8($content); file_put_contents($file, $content); return $file; } private ...

模拟Ajax请求 && Laravel判断Ajax请求原理

06. March 2019 Laravel 0
曾有人告诉我,对到达后端的请求,可进行请求方式判断(主要判断是否为Ajax请求),可抵挡一部分非法恶意请求,在我读过请求头后,模拟了下Ajax请求,再次对互联网数据共享宗旨深信不疑。 1.先看laravel对Ajax的判断 public function ajax() { return $this->isXmlHttpRequest(); } public function isXmlHttpRequest() { return \'XMLHttpRequest\' == $this->headers->get(\'X-Requested-With\'); } 2.模拟Ajax请求 public function test(Request $request) { if ($request->ajax()) { return \"Ajax请求\"; } else { return \"非Ajax请求\"; } } public function get() { $client = new Client([ \'headers\' => [ \"X-Requested-With\" => \"XMLHttpRequest\", ], ]); $result = $client->get(\"http://local.myuniuni.com/test123\"); ...

laravel seed逆向生成器 iseed

01. December 2018 Laravel 0
以前苦于: 1.迁移文件回滚时会清除表中已有数据。 2.一些适合直接导入数据库的数据难以生成seeder文件,系统部署时尤其麻烦。 自从认识了iseed,这些问题已不存在 安装: composer required orangehill/iseed --dev 生成迁移文件只在开发中使用到 使用: php artisan iseed my_table,another_table 默认使用laravel default指定的数据库 php artisan iseed share_gifts --database=collegeData database为配置文件中的connect名称 php artisan iseed links --force --max=5 --exclude=created_at,updated_at --force —— 强制覆盖已有文件; --max —— 最多导出多少条; --exclude —— 不包含的字段.

Laravel Guzzle Crawler 爬取网页内容

17. July 2018 Laravel 0
①:若为API,返回json数据格式,如下: $client = new Client([\'base_uri\' => \'https://www.usnews.com\']); for ($i = 1; $i <= $total_pages; $i++) { $result = $client->request(\'get\', \"/best-colleges/rankings/$classtype?_page=$i&format=json\", [ \'headers\' => [ \"Proxy-Connection\" => \"keep-alive\", \"Pragma\" => \"no-cache\", \"Cache-Control\" => \"no-cache\", \"User-Agent\" => \"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36\", \"Accept\" => \"image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/*\", \"DNT\" => \"1\", \"Accept-Encoding\" => \"gzip, ...

Laravel 服务容器 绑定接口到实现

31. May 2018 Laravel 0
1.在项目根目录app下创建Contract和Services文件,然后编写自己的接口文件(ProductInterface.php)和接口实现文件(ProductService.php) 如接口文件 <?php namespace AppContract; interface ProductInterface { public function lists(); public function show(int $service_id); } 接口实现文件 <?php namespace AppServices; use AppContractProductInterface; class ProductService implements ProductInterface { /* * 产品列表数据service */ public function lists() { //code here } /* * 产品列表详情service */ public function show(int $service_id) { //code here } } 2.在服务容器中注册 可在app/Providers下AppServiceProvider里register中注册 $this->app->bind(\'AppContractProductInterface\', \'AppServicesProductService\'); ...

Laravel 伪造跨站请求保护csrf 在vue中使用

31. May 2018 Laravel 0
项目使用前后分离模式,vue+laravel,使用form表单提交很简单,不使用默认bootstrap.js或独立vue项目需要配置下。 在vue的入口文件,blade模板里添加 <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\"> 然后在axios request拦截器中添加 let token = document.head.querySelector(\'meta[name=\"csrf-token\"]\'); if (token) { axios.defaults.headers.common[\'X-CSRF-TOKEN\'] =token.content; } PS:若独立vue项目,入口使用默认html文件,注释掉第一步加入的meta那行,{{ csrf_token() }}在php文件中才能被正确执行。  

Laravel 控制器中try catch 排除状态码422,即validate 验证失败

09. May 2018 Laravel 0
1.控制器中使用try catch,catch默认获取所有异常,但validate返回的422验证失败我们需要单独处理,不需要异常跑出, 可以这么来: use IlluminateValidationValidationException; catch (Exception $e) { throw_if($e instanceof ValidationException, $e); return InfoController::errorInfo(618); }

Laravel CURD返回值

26. February 2018 Laravel 0
save() 返回布尔值 insert()返回布尔值 delete()返回布尔值 destroy()返回删除条数 update()返回更新条数 Eloquent ORM方法返回值 create()返回Model对象 all()返回Eloquent集合 get( ) 返回Eloquent集合 find( ) 返回Model对象 first()返回Model对象

Laravel 获取图片数组并自定义存储

23. January 2018 Laravel 0
控制器: $schooldetail = CollegeDetail::find($id); if ($request->hasFile(‘imgs’)) { $imgs = $request->file(‘imgs’); foreach ($imgs as $key => $value) { $path = $value->storeAs($id . ‘/photos’, Uuid::uuid1()->getHex() . ‘.jpg’, “college”); $img[] = explode(‘/’, $path)[2]; } if (empty($schooldetail->imgs)) { $schooldetail->imgs = implode(‘,’, $img); } else { $schooldetail->imgs = $schooldetail->imgs . ‘,’ . implode(‘,’, $img); } } 视图: <form action=”/updatecollegedetail” id=”testform” ...