【发布时间】:2018-06-02 02:32:40
【问题描述】:
我需要制作一个搜索表单,它将显示在页面顶部的所有页面上,甚至是错误页面上,所以我决定为它制作一个视图和模型,并在主布局中呈现这个视图.所以我创建了一个简单的模型:
SearchModel.php
<?php
namespace app\models;
use Yii;
use yii\base\Model;
class SearchFormModel extends Model
{
public $query;
public function rules()
{
return [
];
}
}
还有一个观点:
SearchView.php
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
$form = ActiveForm::begin([
'id' => 'search-nav-form',
'options' => ['class' => 'form-inline ml-3'],
]) ?>
<div class="input-group input-group-sm">
<?= $form->field($model, 'text')->textInput(['class' => 'form-control form-control-navbar', 'placeholder'
=> 'Search'])->label('Search'); ?>
<div class="input-group-append">
<button class="btn btn-navbar" type="submit">
<i class="fa fa-search"></i>
</button>
</div>
</div>
<?php ActiveForm::end() ?>
这是一个搜索表单。现在我也有了主要布局:
<?php
use app\widgets\Alert;
use yii\helpers\Html;
use yii\bootstrap\Nav;
use yii\bootstrap\NavBar;
use yii\widgets\Breadcrumbs;
use app\assets\AppAsset;
AppAsset::register($this);
?>
<?php $this->beginPage() ?>
<!DOCTYPE html>
<html lang="<?= Yii::$app->language ?>">
<head>
<meta charset="<?= Yii::$app->charset ?>">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<?php $this->registerCsrfMetaTags() ?>
<title><?= Html::encode($this->title) ?></title>
<?php $this->head() ?>
</head>
<body>
<?php $this->beginBody() ?>
<div class="wrap">
<div class="container">
<?= Breadcrumbs::widget([
'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
]) ?>
<?= Alert::widget() ?>
<?= $content ?>
</div>
</div>
<footer class="footer">
<div class="container">
<p class="pull-left">© My Company <?= date('Y') ?></p>
<p class="pull-right"><?= Yii::powered() ?></p>
</div>
</footer>
<?php $this->endBody() ?>
</body>
</html>
<?php $this->endPage() ?>
我不明白的是,如何从布局视图中呈现搜索表单?我需要把它放在控制器中,但控制器只为特定页面路由提供操作。
更新
我摆脱了所有错误,但现在表单没有在页面上呈现,甚至没有表单标签。这是我在 main.php 中呈现它的方式:
$model = new SearchFormModel;
$this->render('@app/views/site/SearchFormView',['model' => $model]);
我已经像这样修复了模型 SearchFormModel.php:
class SearchFormModel extends Model
{
public $search;
public function rules()
{
return [
// тут определяются правила валидации
];
}
}
【问题讨论】:
-
你需要
echo $this->render()而不仅仅是$this->render()或者使用短标签,如果它们像这样<?=$this->render()?>