Yii フレームワークを使用して CSV ファイルをアップロードしようとしています。以下のコードを追加しました:
モデル
<?php
class Import extends CModel
{
public $name,$email,$doctor = 0,$hospital = 0,$diagnostic = 0;
public function rules()
{
return array(
array('name,email,doctor,hospital,diagnostic','required')
);
}
public function attributeNames()
{
return array();
}
}
?>
見る(index.php)
<div class="form">
<?php echo CHtml::beginForm('site/import',$method='post',$htmlOptions =array('enctype'=>'multipart/form-data')); ?>
<div class="row">
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<input type="file" name="filename" value="file">
<?php echo CHtml::submitButton('Submit', array('name'=>'submitCSV')); ?>
<?php
if(is_array($buffer))
{
foreach($buffer as $line){
echo '<div class="clear"></div>';
echo CHtml::activeTextField($buffer[0],'name',array('value',$line['name']));
echo CHtml::activeTextField($buffer[0],'email',array('value',$line['email']));
echo CHtml::activeTextField($buffer[0],'doctor',array('value',$line['doctor']));
echo CHtml::activeTextField($buffer[0],'hospital',array('value',$line['hospital']));
echo CHtml::activeTextField($buffer[0],'diagnostic',array('value',$line['diagnostic']));
}}?>
</div>
<?php echo CHtml::endForm(); ?>
</div>
コントローラ
public function actionImport()
{
$model = new Import;
$buffer = array($model);
if(isset($_POST['submitCSV'])){
$filename=$_FILES['filename']['tmp_name'];
$fp = fopen("$filename","r");
if($fp){
$i =0;
while(($buffer[$i] = fgetcsv($fp,1000,",")) !== false)
{
$model = new Import;
$model->name = $buffer[$i][0];
$model->email = $buffer[$i][1];
$model->doctor = $buffer[$i][2];
$model->hospital = $buffer[$i][3];
$model->diagnostic = $buffer[$i][4];
$buffer[$i++] = $model;
}
if(!feof($fp))
echo "Echo: Unexpected fgets() fail\n";
}
fclose($fp);
unset($_POST['submitCSV']);
}
$this->render('index',array('buffer'=>$buffer));
}
このコードで直面している問題:
$line
のインスタンスであるためImport
、オブジェクトの要素を使用できるはず$line
ですが、それができません。私はこれを使用$line->'name'
しましたが、次のエラーが発生しました: 解析エラー: 構文エラー、予期しない ''名前'' (T_CONSTANT_ENCAPSED_STRING)、識別子 (T_STRING) または変数 (T_VARIABLE) または '{' または '$' が必要です$line
はここにあるので、ステートメントmodel
の最初の引数として配置できるはずです。activeTextField
このエラーが発生します: get_class() は、パラメーター 1 がオブジェクトであると想定しています。第三に、このコードはテキスト フィールドの同じ行を 5 回生成するため、コード内の代わりに を
activeTextField
配置し、ループ内でインクリメントすることで実験することを考えました。これにより、2 と同じエラーが発生します。$i
0
foreach
よろしく