Я новичок в Yii2, и я пытаюсь использовать Injection Dependency .
В моем сценарии Педидо может иметь один Servico, а Servico имеет много Pedidos. Вот модель класса Pedido :
<?php namespace app\models; use Yii; /** * This is the model class for table "pedido". * * @property integer $id * @property string $data * @property integer $servico_id * * @property Servico $servico */ class Pedido extends \yii\db\ActiveRecord { public static function tableName() { return 'pedido'; } public function rules() { return [ [['data', 'servico_id'], 'required'], [['data'], 'safe'], [['servico_id'], 'integer'] ]; } public function attributeLabels() { return [ 'id' => Yii::t('app', 'ID'), 'data' => Yii::t('app', 'Data'), 'servico_id' => Yii::t('app', 'Servico ID'), ]; } /** * @return \yii\db\ActiveQuery */ public function getServico() { return $this->hasOne(Servico::className(), ['id' => 'servico_id']); } }
Вот класс модели Servico
<?php namespace app\models; use Yii; /** * This is the model class for table "servico". * * @property integer $id * @property string $descricao * @property string $valor * @property integer $quantidade * * @property Pedido[] $pedidos */ class Servico extends \yii\db\ActiveRecord { /** * @inheritdoc */ public static function tableName() { return 'servico'; } /** * @inheritdoc */ public function rules() { return [ [['descricao', 'valor'], 'required'], [['valor'], 'number'], [['quantidade'], 'integer'], [['descricao'], 'string', 'max' => 1000] ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'id' => Yii::t('app', 'ID'), 'descricao' => Yii::t('app', 'Descrição'), 'valor' => Yii::t('app', 'Valor'), 'quantidade' => Yii::t('app', 'Quantidade'), ]; } /** * @return \yii\db\ActiveQuery */ public function getPedidos() { return $this->hasMany(Pedido::className(), ['servico_id' => 'id']); } }
В моем классе PedidoController я хочу ввести класс Servico . Я создал конструктора и изменил actionCreate таким образом:
<?php namespace app\controllers; use Yii; use app\models\Pedido; use app\models\Servico; use app\models\PedidoSearch; use yii\web\Controller; use yii\web\NotFoundHttpException; use yii\filters\VerbFilter; use yii\di\Container; /** * PedidoController implements the CRUD actions for Pedido model. */ class PedidoController extends Controller { public Servico $servicoModel; public function __construct(Servico $servicoModel, $config = []) { $this->$servicoModel = $servicoModel; parent::__construct($config); } public function actionCreate() { $model = new Pedido(); // $container = new Container(); $container->set('servico', 'app\models\Servico'); $servicoModel = $container->get('servico'); if ($model->load(Yii::$app->request->post()) && $model->save()) { return $this->redirect(['view', 'id' => $model->id]); } else { return $this->render('create', [ 'model' => $model, ]); } } }
Но когда я получил эту ошибку при действии индекса:
Ошибка паролей PHP – ошибка yii \ base \ ErrorException, неожиданный «Servico» (T_STRING), ожидающая переменная (T_VARIABLE)
на этой линии
общедоступный Servico $ servicoModel;
Что я делаю неправильно?