//... use yii\filters\AccessControl; use yii\filters\VerbFilter; use yii\helpers\Html; class CustomerController extends Controller { public function behaviors() { return [ 'access' => [ 'class' => AccessControl::className(), 'rules' => [ [ 'actions' => [/* ... */ 'export'], 'allow' => true, 'roles' => ['@'], // @ = Authenticated users ], ], ], //... ]; } //... /** * Generated export files containing of all existing Customers. * @param none * @return mixed */ public function actionExport($type='csv') { $models = Customer::find()->All(); switch($type) { case 'excel': //-------------------- // Excel Export //-------------------- $filename = 'Customer-Data-'.Date('YmdGis').".xls"; header("Content-type: application/vnd-ms-excel"); header("Content-Disposition: attachment; filename=".$filename); echo '<table border="1" width="100%"> <thead> <tr> <th>account_number</th> <th>contact</th> <th>company_name</th> <th>address1</th> <th>address2</th> <th>city</th> <th>state_prov</th> <th>postal_code</th> <th>country</th> <th>phone</th> <th>phone_ext</th> <th>email</th> <th>website</th> <th>ship_address_id</th> <th>notes</th> <th>status</th> </tr> </thead>'; foreach($models as $row){ echo ' <tr> <td>'.$row['account_number'] .'</td> <td>'.$row['contact'] .'</td> <td>'.$row['company_name'] .'</td> <td>'.$row['address1'] .'</td> <td>'.$row['address2'] .'</td> <td>'.$row['city'] .'</td> <td>'.$row['state_prov'] .'</td> <td>'.$row['postal_code'] .'</td> <td>'.$row['country'] .'</td> <td>'.$row['phone'] .'</td> <td>'.$row['phone_ext'] .'</td> <td>'.$row['email'] .'</td> <td>'.$row['website'] .'</td> <td>'.$row['ship_address_id'] .'</td> <td>'.$row['notes'] .'</td> <td>'.$row['status'] .'</td> </tr> '; } echo '</table>'; break; case 'csv': default: //-------------------- // CSV Export //-------------------- $filename = 'Customer-Data-'.Date('YmdGis').".csv"; header("Content-type: text/csv"); $extension = 'csv'; header("Content-Disposition: attachment; filename=".$filename); // header row $data = implode("\t", [ 'account_number', 'contact', 'company_name', 'address1', 'address2', 'city', 'state_prov', 'postal_code', 'country', 'phone', 'phone_ext', 'email', 'website', 'ship_address_id', 'notes', 'status' ]) . "\n"; // data row foreach($models as $row) { $data .= implode("\t", [ $row['account_number'] , $row['contact'] , $row['company_name'] , $row['address1'] , $row['address2'] , $row['city'] , $row['state_prov'] , $row['postal_code'] , $row['country'] , $row['phone'] , $row['phone_ext'] , $row['email'] , $row['website'] , $row['ship_address_id'] , str_replace("\r\n", "|", Html::encode($row['notes'])), $row['status'] , ]) . "\n"; } // return data results echo $data; break; } } }