首页 > 解决方案 > Laravel 自定义命令不创建 csv

问题描述

因此,在 Laravel 中,我创建了自己的自定义命令来搜索产品并根据它们的概览中是否有某个链接来过滤它们,并从中创建一个 csv,我已经将 dd 放在适当的位置以尝试找出哪个部分不起作用,但它似乎根本没有触及回调函数的内部,它也没有抛出任何错误,所以想知道我哪里出错了?

这是我的自定义命令的句柄部分中的部分:

        $fileName = 'products.csv';
        $products = Product::all()->chunk(1000);
        

        $headers = array(
            "Content-type"        => "text/csv",
            "Content-Disposition" => "attachment; filename=$fileName",
            "Pragma"              => "no-cache",
            "Cache-Control"       => "must-revalidate, post-check=0, pre-check=0",
            "Expires"             => "0"
        );
        
        $columns = array('ID', 'Full URL', 'Title', 'Alt Tag', 'Product ID');

        $callback = function() use($products, $columns) {

            $file = fopen('php://output', 'w');
            fputcsv($file, $columns);
            $num = 1;
        
            foreach ($products as $product){


                preg_match_all('/<img[^>]+>/i',$product->overview, $result); 

                $img = array();

                foreach($result as $img_tag)
                {
                    preg_match_all('/(alt|title|src)=("[^"]*")/i', $img_tag, $img[$img_tag]);
                }
                

                foreach($img as $image){
                if(strpos($image, "cdn")){

                    $row['ID'] = $num + 1;
                    $row['Product ID'] = $product->id;


                    if(count($image[2]) === 3){

                        $row['Full URL'] = $image[2][0];
                        $row['Title'] = $image[2][1];
                        $row['Alt Tag'] = $image[2][2];
                    } else if(count($image[2]) === 2){
                            $row['Full URL'] = $image[2][0];

                            if(strpos($image, "title")){
                                $row['Title'] = $image[2][1];
                            } else {
                                $row['Title'] = "N/A";
                            }

                            if(strpos($image, "alt")){
                                $row['Alt Tag'] = $image[2][1];
                            } else {
                                $row['Alt Tag'] = "N/A";
                            }
                            
                        } else if(count($image[2]) === 1){
                            $row['Full URL'] = $image[2][0];
                            $row['Title'] = "N/A";
                            $row['Alt Tag'] = "N/A";
                        }
                    }

                    fputcsv($file, array($row['ID'], $row['Full URL'], $row['Title'], $row['Alt Tag'], $row['Product ID']));

                }
                    
            };

            fclose($file);
        };

        return Response::stream($callback, 200, $headers);

标签: phplaravelcsv

解决方案


推荐阅读