yii2.0框架试图显示搜索结果


yii 2.0 framework trying to show search results

我有一个提交表单,其中有一个名为case_no的字段,当我输入case_no时,它应该用与case_no匹配的特定信息填充表。

控制器:

public function actionSearch()
{
    $model = new LegalCase();
    $category = new Category();
    /*$categories = Category::findAll();*/
    if ($model->load(Yii::$app->request->post())) {
        Yii::$app->session->setFlash('searchFormSubmitted');


        $case = $model->findByCaseNo($case_no);
        return $this->render('search', [
            'model' => $model,
            'dataProvider' => $model->findAll(),
            'results' => $case
        ]);
        return $this->refresh();
    } else {
        return $this->render('search', [
            'model' => $model,
        ]);
    }
}

型号:

 class LegalCase extends Model
{
public $id;
public $case_no;
public $name;
public $judgement_date;
public $year;
public $neutral_citation;
private static $cases = [
    '100' => [
        'id' => '1',
        'case_no' => '3',
        'name' => 'first case'  
    ],
    '101' => [
        'id' => '1',
        'case_no' => '125',
        'name' => 'second case'
    ],
];
/**
 * @inheritdoc
 */
public static function findAll()
{
    //$query = new Query();
    $provider = new ArrayDataProvider([
        'allModels' => self::$cases,
        'sort' => [
            'attributes' => ['id', 'case_no', 'name'],
        ],
        'pagination' => [
            'pageSize' => 10,
        ],
    ]);
    return $provider->getModels();
}
/**
 * @inheritdoc
 */
public static function findIdentity($id)
{
    return isset(self::$cases[$id]) ? new static(self::$cases[$id]) : null;
}
/**
 * Finds case by name
 *
 * @param  string      $name
 * @return static|null
 */

/**
 * Finds case by number
 *
 * @param  string      $case_no
 * @return static|null
 */
public static function findByCaseNo($case_no)
{
    foreach (self::$cases as $case) {
        if (strcasecmp($case['case_no'], $case_no) === 0) {
            return new static($case);
        }
    }
    return null;
}

视图:

 <?php
 use yii'helpers'ArrayHelper;
use yii'helpers'Html;
use yii'bootstrap'ActiveForm;
use yii'widgets'ListView;
use app'models'LegalCase;
use backend'models'Standard;

/* @var $this yii'web'View */
/* @var $form yii'bootstrap'ActiveForm */
/* @var $model app'models'LegalCase */
$this->title = 'Search';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="site-login">
<h1><?= Html::encode($this->title) ?></h1>
<p>Please fill out the following fields to login:</p>
<?php $form = ActiveForm::begin([
    'id' => 'search-form',
    'options' => ['class' => 'form-horizontal'],
    'fieldConfig' => [
        'template' => "{label}'n<div class='"col-lg-3'">{input}   </div>'n<div class='"col-lg-8'">{error}</div>",
        'labelOptions' => ['class' => 'col-lg-1 control-label'],
    ],
]); ?>
<?= $form->field($model, 'case_no') ?>
<?= $form->field($model, 'name') ?>
<?php /*= Html::activeDropDownList($model, 's_id',
  ArrayHelper::map(Standard::find()->all(), 's_id', 'name'))*/  ?>
<?php

?>


<div class="form-group">
    <div class="col-lg-offset-1 col-lg-11">
        <?= Html::submitButton('Search', ['class' => 'btn btn-primary', 'name' => 'search-button']) ?>
    </div>
</div>
<?php if (Yii::$app->session->hasFlash('searchFormSubmitted')) { ?>
    <table class="table table-striped">
        <tr>
            <th>ID</th>
            <th>case_no</th>
            <th>name</th>
        </tr>
    </table>
    <?php //$posts = $results->getModels();
    foreach($results as $case){
        echo '<tr>';
        //print_r($case);
        echo $case;
        //echo $case->id;
        /*echo '<td>' . $post['id'] . '</td>';
        echo '<td>' . $post['case_no'] . '</td>';
        echo '<td>' . $post['name'] . '</td>';*/
        echo '</tr>';
    } ?>

知道为什么不起作用吗?

使用$_POST['LegalCase']['case_no']而不是$case_no

编辑:注意:我使用的是旧版本的Yii,所以情况可能已经改变了。

您需要这样做:

$case = $model->findByCaseNo($model->case_no);

但是表单提交后,您的属性$case_no将为空。发生这种情况是因为属性不安全。函数load()仅设置安全模型属性。如果您想在提交后加载模型属性,则需要向LegalBase模型添加验证。例如:

public function rules()
{
     return [
         ['case_no', 'trim'],
     ];
}