本章描述了如何在你的应用中创建一个新的 “Hello” 页面。为了实现这一目标,将会创建一个操作和一个视图:
- 应用将会分派页面请求给操作
- 操作将会依次渲染视图呈现 “Hello” 给最终用户
创建操作
为了 “Hello”,需要创建一个 say
操作,从请求中接收 message
参数并显示给最终用户。如果请求没有提供 message
参数,操作将显示默认参数 “Hello”。
操作必须声明在控制器中。为了简单起见,你可以直接在 SiteController
控制器里声明 say
操作。这个控制器是由文件controllers/SiteController.php
定义的。以下是一个操作的声明:
<?php
namespace appcontrollers;
use yiiwebController;
class SiteController extends Controller
{
// ...其它代码...
public function actionSay($message = 'Hello')
{
return $this->render('say', ['message' => $message]);
}
}
创建视图
视图是你用来生成响应内容的脚本。为了说 “Hello”,你需要创建一个 say
视图,以便显示从操作方法中传来的 message
参数。
<?php
use yiihelpersHtml;
?>
<?= Html::encode($message) ?>
say
视图应该存为 views/site/say.php
文件。当一个操作中调用了 yiiwebController::render() 方法时,它将会按 views/控制器 ID/视图名.php
路径加载 PHP 文件。
创建模型
模型类 EntryForm
代表从用户那请求的数据,该类如下所示并存储在 models/EntryForm.php
文件中。请参考类自动加载章节获取更多关于类命名约定的介绍。
<?php
namespace appmodels;
use yiibaseModel;
class EntryForm extends Model
{
public $name;
public $email;
public function rules()
{
return [
[['name', 'email'], 'required'],
['email', 'email'],
];
}
}
<?php $model = new EntryForm(); $model->name = 'Qiang'; $model->email = 'bad'; if ($model->validate()) { // 验证成功! } else { // 失败! // 使用 $model->getErrors() 获取错误详情 }
<?php namespace appcontrollers; use Yii; use yiiwebController; use appmodelsEntryForm; class SiteController extends Controller { // ...其它代码... public function actionEntry() { $model = new EntryForm; if ($model->load(Yii::$app->request->post()) && $model->validate()) { // 验证 $model 收到的数据 // 做些有意义的事 ... return $this->render('entry-confirm', ['model' => $model]); } else { // 无论是初始化显示还是数据验证错误 return $this->render('entry', ['model' => $model]); } } }
创建视图
最后创建两个视图文件 entry-confirm
和 entry
。他们会被刚才创建的 entry
操作渲染。
entry-confirm
视图简单地显示提交的 name 和 email 数据。视图文件保存在 views/site/entry-confirm.php
。
<?php
use yiihelpersHtml;
?>
<p>You have entered the following information:</p>
<ul>
<li><label>Name</label>: <?= Html::encode($model->name) ?></li>
<li><label>Email</label>: <?= Html::encode($model->email) ?></li>
</ul>
entry
视图显示一个 HTML 表单。视图文件保存在 views/site/entry.php
。
<?php
use yiihelpersHtml;
use yiiwidgetsActiveForm;
?>
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'name') ?>
<?= $form->field($model, 'email') ?>
<div class="form-group">
<?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
配置数据库连接
开始之前,请确保你已经安装了 PHP PDO 扩展和你所使用的数据库的 PDO 驱动(例如 MySQL 的 pdo_mysql
)。对于使用关系型数据库来讲,这是基本要求。
驱动和扩展安装可用后,打开 config/db.php
修改里面的配置参数对应你的数据库配置。该文件默认包含这些内容:
<?php
return [
'class' => 'yiidbConnection',
'dsn' => 'mysql:host=localhost;dbname=yii2basic',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
];
<?php namespace appcontrollers; use yiiwebController; use yiidataPagination; use appmodelsCountry; class CountryController extends Controller { public function actionIndex() { $query = Country::find(); $pagination = new Pagination([ 'defaultPageSize' => 5, 'totalCount' => $query->count(), ]); $countries = $query->orderBy('name') ->offset($pagination->offset) ->limit($pagination->limit) ->all(); return $this->render('index', [ 'countries' => $countries, 'pagination' => $pagination, ]); } }