2016-03-30 10 views
1

私はDynaGridExportMenuでいくつかのビューを持っています。すべてのエクスポートをCSVファイルとしてアーカイブに保存するには、毎日が必要です。私は、コントローラから新しいエクスポート(DynaGridで定義されている)を開始する方法を知らない。Yii2:プログラムでエクスポートを開始する方法

私は、次の可能な解決策を発見したが、それらのどれが最適ではない:

  • 私は、対応するモデルで輸出を定義し、this exampleのようにコントローラのアクションを通じて輸出を実現することができます。しかし、私は同じ輸出を2回定義しなければならず、2つの輸出の間に差異が生じるリスクがある。
  • 私はCodeceptionを使用できます。受け入れテストの枠内で、エクスポートメニューのクリックをシミュレートします。このソリューションは実装が比較的簡単ですが、私はそれが不安定であることがわかります。
  • 私はまた、エクスポートファイルへのリンクを準備することができるので、Codeceptionでエクスポートする方が簡単になります。

参照:

<?= echo yii\helpers\Html::a('Export', ['controller/action'], [ 
    'class'=>'classname', 
    'data'=>[ 
     'method'=>'post', 
     'params'=>[ 
      'export_type'=>'CSV', 
      'exportFull_w0' => '1', 
      'export_columns' => '0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20', 
      'column_selector_enabled' => '1' 
     ], 
    ] 
]) ?> 

がより簡単なものはありますか?私はこのように、ファイルをダウンロードすることができます延長UploadFromUrl、のようなものが必要になります。

$url = 'http://static.yiiframework.com/files/logo/yii.png' ; 
$path = 'uploads/yii.png'; 

$file = UploadFromUrl::initWithUrl($url); 
$file->saveAs($path); 

しかし、それは現在のYiiアプリケーションからポストパラメータとURLを使用することはできません。

答えて

0

最後に、以下の解決策を使用しました。 Dynagridで

はfalseにストリームパラメータを設定します。

'gridOptions' => [ 
    ... 
    'toolbar' => [ 
     ... 
     \kartik\export\ExportMenu::widget([ 
      ... 
      'stream' => false, 
      'folder' => '@webroot/export', 
     ]); 
    ], 
], 

をストリームがfalseに設定されている場合は、エクスポートしたファイルはディレクトリ「フォルダ」に保存されます。 ウェブコントローラで

Dynagridとアクションからエクスポートデータを保存する新しいアクションを定義します。

public function actionExport() 
{ 
    $_POST['export_type'] = 'CSV'; 
    $_POST['exportFull_w0'] = '1'; 
    $_POST['export_columns'] = '0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15'; 
    $_POST['column_selector_enabled'] = '1'; 

    Yii::$app->runAction('controller/data'); 

    return true; 
} 

アクション「輸出が」と、cURLを経由コンソールから起動することができますYii2: Run a web action in a console controller

2

私は個人的にDynaGridを使用していませんが、このライブラリを使用していくつかのエクスポートを作成しましたhttps://github.com/arogachev/yii2-excel - この方法でエクスポート機能の多くをカスタマイズできます。 DynaGridに影響を与えずに、エクスポートが変更された場合に簡単に変更できるカスタムSQLも作成できます。これが参考になることを願っています。

+0

ああ、毎日cronジョブを使用してこれを実行できることを忘れていました。クリックをシミュレートするか、コード化を使用する必要はありません。 – IgnitedCoder

+0

この解決策は可能ですが、すべてのエクスポートをもう一度定義する必要があります。 Dynagridのエクスポート設定を使用して、エクスポートファイルが同一であり、すべての変更で2種類のエクスポートを調整してテストする必要はありません。 –

関連する問題