((Yii2)类的对象使用shell命令时无法将类app \ models \ EntryForm的对象转换为字符串

问题描述 投票:0回答:1

所以我对yii2真的很陌生,并且想要运行引用perl命令的shell命令。

这是站点控制器上的代码:

public function actionEntry(){
    $model = new EntryForm();

    if ($model->load(\Yii::$app->request->post()) && $model->validate()) {
        // $out = shell_exec("../tagger/tag.sh -raw '$model'");
        $out = shell_exec(Yii::getAlias('@web').'/tagger/tag.sh -raw'.$model);
        // print $model;
        return $this->render('entry-confirm', ['model'=>$out]);
        // return $this->render('entry-confirm', ['model'=>$model]);

    } else {
        return $this->render('entry', ['model' => $model]);
    }
}

这是我用来输入文本的EntryForm.php

<?php

namespace app\models;

use Yii;
use yii\base\Model;

class EntryForm extends Model
{
    public $Text;

    public function rules() {
        return [
            [['Text'], 'required'],
            ['Text', 'string']
        ];
    }
}
?>

这是视图(entry.php)

<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;
?>
<?php $form = ActiveForm::begin();?>
    <?= $form->field($model,  'Text')->textarea(['rows'=>'4']) ?>
    <div class="form-group">
        <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
    </div>
<?php ActiveForm::end();?>

这是结果页面(entry-confirm.php)

<?php

use yii\helpers\Html;
?>

<p>You have entered the following information:</p>

<ul>
    <li><label>Text</label>: <?=Html::encode($model->Text)?></li>
</ul>

现在这是shell命令以及从中得到的预期结果:

$ ./tag.sh -raw "Coba dulu ya." 

结果

Coba VB杜鲁XX。 Z

现在当我在yii2中运行它时,出现了这样的错误Error Image

我在哪行/文件出错?而我该如何解决呢?任何帮助将不胜感激。谢谢!

php shell yii2
1个回答
0
投票

您正在将模型添加到shell_exec中的字符串中,这会导致错误,因为您的模型无法转换为字符串。因此,您可以将__toString()方法添加到模型中,也可以仅将模型的属性添加到指定给shell_exec的字符串中。

$out = shell_exec(Yii::getAlias('@web').'/tagger/tag.sh -raw "' . $model->Text . '"');

我还将通过转义引号(“)的函数传递$model->Text,以确保您的Text属性的内容不会破坏提供给shell_exec的命令,也许是addslahes()

© www.soinside.com 2019 - 2024. All rights reserved.