所以我对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
我在哪行/文件出错?而我该如何解决呢?任何帮助将不胜感激。谢谢!
您正在将模型添加到shell_exec中的字符串中,这会导致错误,因为您的模型无法转换为字符串。因此,您可以将__toString()方法添加到模型中,也可以仅将模型的属性添加到指定给shell_exec的字符串中。
$out = shell_exec(Yii::getAlias('@web').'/tagger/tag.sh -raw "' . $model->Text . '"');
我还将通过转义引号(“)的函数传递$model->Text
,以确保您的Text属性的内容不会破坏提供给shell_exec的命令,也许是addslahes()
。