Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 保存查询结果并以JSON文件格式存储,然后返回-Laravel/Vue_Php_Json_Laravel - Fatal编程技术网

Php 保存查询结果并以JSON文件格式存储,然后返回-Laravel/Vue

Php 保存查询结果并以JSON文件格式存储,然后返回-Laravel/Vue,php,json,laravel,Php,Json,Laravel,我正在用Laravel制作一个api,以便在前端与Vue通信 首先,我不希望每次加载页面时都向数据库发出请求 解决方案:向数据库发出第一个请求,保存到json文件,然后返回,下一个请求将只发送json文件,而不发送数据库请求。我会在1天后再生 问题:一切正常,但响应不是有效的json格式。因此Vue无法缓存json文件并呈现页面 代码: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illu

我正在用Laravel制作一个api,以便在前端与Vue通信

首先,我不希望每次加载页面时都向数据库发出请求

解决方案:向数据库发出第一个请求,保存到json文件,然后返回,下一个请求将只发送json文件,而不发送数据库请求。我会在1天后再生

问题:一切正常,但响应不是有效的json格式。因此Vue无法缓存json文件并呈现页面

代码:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Product;
use Storage;

class ProductController extends Controller
{
    public function home () 
    {
        $file = 'json\products.json';
        $fileExists = Storage::disk('local')->exists( $file );
        $storagePath  = Storage::disk('local')->path( $file );

        if ( $fileExists ) {
            if ( time () - 86400 < filemtime ($storagePath ) ) {
                return Storage::get($file);
            }
        }

        $products = Product::select( 'id' , 'name' , 'code' , 'description' , 'size' , 'weight' , 'pic_url' 'pic_video' 'long_description' )->limit(200)->get();

        //Storage::disk('local')->put('json\products.json', json_encode($products, JSON_PRETTY_PRINT) ); //Doesnot Work 
        Storage::disk('local')->put('json\products.json', response()->json(['products' => $products ])); // Doesnot Work

        return response()->json(['products' => $products ] , 200); // This response works , and vue catches and reads perfectly
    }
}
解析如下:

return cache()->remember($cacheKey, 1440 , function () {
    $products = Product::select( 'id' , 'name' , 'code' , 'description' , 'size' , 'weight' , 'pic_url' 'pic_video' 'long_description' )->limit(200)->get();
    return ['products' => $products];
});
决议如下:

return cache()->remember($cacheKey, 1440 , function () {
    $products = Product::select( 'id' , 'name' , 'code' , 'description' , 'size' , 'weight' , 'pic_url' 'pic_video' 'long_description' )->limit(200)->get();
    return ['products' => $products];
});

你知道,你可以使用
return['products'=>$products]
这样做会返回JSON吗?存储::磁盘('local')->put('json\products.json',['products'=>$products]);->不起作用。不,我的意思是作为您的最终退货也
json\products。json
不是有效的文件夹位置不,我的意思是作为您的最终退货->这不是问题所在。问题就在这里:返回存储::get($file);你知道,你可以使用
return['products'=>$products]
这样做会返回JSON吗?存储::磁盘('local')->put('json\products.json',['products'=>$products]);->不起作用。不,我的意思是作为您的最终退货也
json\products。json
不是有效的文件夹位置不,我的意思是作为您的最终退货->这不是问题所在。问题就在这里:返回存储::get($file);