mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-03 22:32:40 +08:00
@ -135,8 +135,8 @@ $config = [
|
|||||||
更多关于应用 `components` 属性配置的信息可以查阅[应用](structure-applications.md)
|
更多关于应用 `components` 属性配置的信息可以查阅[应用](structure-applications.md)
|
||||||
以及[服务定位器](concept-service-locator.md)章节。
|
以及[服务定位器](concept-service-locator.md)章节。
|
||||||
|
|
||||||
Since version 2.0.11, the application configuration supports [Dependency Injection Container](concept-di-container.md)
|
自版本 2.0.11 开始,系统配置支持使用 `container` 属性来配置[依赖注入容器](concept-di-container.md)
|
||||||
configuration using `container` property. For example:
|
例如:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$config = [
|
$config = [
|
||||||
@ -148,15 +148,15 @@ $config = [
|
|||||||
'yii\widgets\LinkPager' => ['maxButtonCount' => 5]
|
'yii\widgets\LinkPager' => ['maxButtonCount' => 5]
|
||||||
],
|
],
|
||||||
'singletons' => [
|
'singletons' => [
|
||||||
// Dependency Injection Container singletons configuration
|
// 依赖注入容器单例配置
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
```
|
```
|
||||||
|
|
||||||
To know more about the possible values of `definitions` and `singletons` configuration arrays and real-life examples,
|
请参考 [依赖注入容器](concept-di-container.md) 下面的 [高级应用实例](concept-di-container.md#advanced-practical-usage)
|
||||||
please read [Advanced Practical Usage](concept-di-container.md#advanced-practical-usage) subsection of the
|
获取更多 `definitions` 和 `singletons` 配置项和实际使用的例子。
|
||||||
[Dependency Injection Container](concept-di-container.md) article.
|
|
||||||
|
|
||||||
### 小部件的配置 <span id="widget-configurations"></span>
|
### 小部件的配置 <span id="widget-configurations"></span>
|
||||||
|
|
||||||
|
|||||||
@ -1,16 +1,16 @@
|
|||||||
多模型的复合表单
|
多模型的复合表单
|
||||||
==================================
|
==================================
|
||||||
|
|
||||||
When dealing with some complex data, it is possible that you may need to use multiple different models to collect
|
当需要处理复杂数据,很可能你需要使用多个不同的模型来收集用户提交的数据。
|
||||||
the user input. For example, assuming the user login information is stored in the `user` table while the user profile
|
举例来说,假设用户登录信息保存在 `user` 表,但是用户基本信息保存在 `profile` 表,
|
||||||
information is stored in the `profile` table, you may want to collect the input data about a user through a `User` model
|
你可能需要同时使用 `User` 模型和 `Profile` 模型来获取用户登录信息和基本信息。
|
||||||
and a `Profile` model. With the Yii model and form support, you can solve this problem in a way that is not much
|
使用 Yii 提供的模型和表单支持,解决这样的问题和处理单一模型并不会有太大的区别。
|
||||||
different from handling a single model.
|
|
||||||
|
|
||||||
In the following, we will show how you can create a form that would allow you to collect data for both `User` and `Profile`
|
|
||||||
models.
|
|
||||||
|
|
||||||
First, the controller action for collecting the user and profile data can be written as follows,
|
下面,我们将为你展示怎样创建一个表单并同时处理 `User` 和 `Profile` 这两个模型。
|
||||||
|
|
||||||
|
|
||||||
|
首先,控制器中收集用户提交数据的动作(action)可以按照下面写的这样,
|
||||||
|
|
||||||
```php
|
```php
|
||||||
namespace app\controllers;
|
namespace app\controllers;
|
||||||
@ -28,13 +28,13 @@ class UserController extends Controller
|
|||||||
{
|
{
|
||||||
$user = User::findOne($id);
|
$user = User::findOne($id);
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
throw new NotFoundHttpException("The user was not found.");
|
throw new NotFoundHttpException("没有找到用户登录信息。");
|
||||||
}
|
}
|
||||||
|
|
||||||
$profile = Profile::findOne($user->profile_id);
|
$profile = Profile::findOne($user->profile_id);
|
||||||
|
|
||||||
if (!$profile) {
|
if (!$profile) {
|
||||||
throw new NotFoundHttpException("The user has no profile.");
|
throw new NotFoundHttpException("没有找到用户基本信息。");
|
||||||
}
|
}
|
||||||
|
|
||||||
$user->scenario = 'update';
|
$user->scenario = 'update';
|
||||||
@ -58,11 +58,11 @@ class UserController extends Controller
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
In the `update` action, we first load the `$user` and `$profile` models to be updated from the database. We then call
|
在 `update` 动作中,我们首先从数据库中获取需要更新的 `$user` 和 `$profile` 这两个模型。
|
||||||
[[yii\base\Model::load()]] to populate these two models with the user input. If loading is successful, we will validate
|
我们可以调用 [[yii\base\Model::load()]] 方法把用户提交数据填充到两个模型中。
|
||||||
the two models and then save them — please note that we use `save(false)` to skip over validations inside the models
|
如果加载成功,验证两个表单并保存 — 请注意我们使用了 `save(false)` 方法用来忽略内部保存时的二次验证,
|
||||||
as the user input data have already been validated. If loading is not successful, we will render the `update` view which
|
因为用户输入的数据已经手动验证过了。
|
||||||
has the following content:
|
如果填充数据失败,直接显示下面的 `update` 视图内容:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
<?php
|
<?php
|
||||||
@ -79,8 +79,8 @@ $form = ActiveForm::begin([
|
|||||||
|
|
||||||
<?= $form->field($profile, 'website') ?>
|
<?= $form->field($profile, 'website') ?>
|
||||||
|
|
||||||
<?= Html::submitButton('Update', ['class' => 'btn btn-primary']) ?>
|
<?= Html::submitButton('更新数据', ['class' => 'btn btn-primary']) ?>
|
||||||
<?php ActiveForm::end() ?>
|
<?php ActiveForm::end() ?>
|
||||||
```
|
```
|
||||||
|
|
||||||
As you can see, in the `update` view you would render input fields using two models `$user` and `$profile`.
|
你可以看到,在 `update` 视图中,我们同时显示了两个模型 `$user` 和 `$profile` 的属性的输入栏。
|
||||||
|
|||||||
Reference in New Issue
Block a user