Невозможно получить доступ к параметру приложения из модели
Существует две модели: User и UserProfile. При сохранении нового пользователя для сохранения данных в обеих моделях / таблицах используется одна форма. Здесь действие контроллера.
public function actionCreate($role)
{
$User = new User;
$UserProfile = new UserProfile;
Yii::app()->params['u_role'] = $role;
if(isset($_POST['User'], $_POST['UserProfile']))
{
$User->attributes=$_POST['User'];
$UserProfile->attributes=$_POST['UserProfile'];
$valid=$User->validate();
if($valid)
{
if($User->save(false))
{
$UserProfile->user_id = $User->id;
if ($UserProfile->save())
{
$model=User::model()->with('userProfiles')->findByPk($User->id);
$this->redirect(array('manage/list'));
}
}
}
}
$this->render('create', array(
'User'=>$User,
'UserProfile'=>$UserProfile,
));
}
Модель, отношения, представления и действие создания, кажется, работают нормально, я могу сохранить нового пользователя с данными в обеих таблицах. Проблема в том, что в модели User есть поле 'role', которое не предоставляется из формы, а предварительно задано, в зависимости от параметра, переданного действию контроллера ($role). Я устанавливаю это значение $ role в качестве параметра приложения в самом действии create
Yii::app()->params['u_role'] = $role;
А в пользовательской модели я использую функцию для определения значения поля на основе значения этого параметра приложения. Вот функция,
public function fixUrole()
{
$returnUrole;
if (Yii::app()->params['u_role']=='adm')
{
$returnUrole=1;
}
else if (Yii::app()->params['u_role']=='mgr')
{
$returnUrole=2;
}
return $returnUrole;
}
Который вызывается из beforeValidate()
как ниже.
$this->role = $this->fixUrole();
Проблема в том, что что-то идет не так при получении значения с помощью параметров приложения. Если я жестко закодировал значение в функции fixUrole()
, сохраняет / работает правильно. Но в противном случае функция возвращает "пусто". Что здесь не так? Кроме того, я не совсем уверен, правильно ли я делаю то, что хочу, так есть ли лучший способ сделать это?
Изменить: вот конфиг main.php
<?php
// uncomment the following to define a path alias
// Yii::setPathOfAlias('local','path/to/local-folder');
// This is the main Web application configuration. Any writable
// CWebApplication properties can be configured here.
return array(
'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
'name'=>'MY APP NAME',
// preloading 'log' component
'preload'=>array(
'log',
'bootstrap'),
// autoloading model and component classes
'import'=>array(
'application.models.*',
'application.components.*',
),
'modules'=>array(
// uncomment the following to enable the Gii tool
'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'enter',
// If removed, Gii defaults to localhost only. Edit carefully to taste.
'ipFilters'=>array('127.0.0.1','::1'),
'generatorPaths' => array(
'bootstrap.gii'
),
),/**/
),
// application components
'components'=>array(
'user'=>array(
//'allowAutoLogin'=>true,
'class' => 'WebUser',
),
'bootstrap' => array(
'class' => 'ext.bootstrap.components.Bootstrap',
'responsiveCss' => true,
),
'db'=>array(
'connectionString' => 'mysql:host=localhost;dbname=testdb1',
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
),
'errorHandler'=>array(
// use 'site/error' action to display errors
'errorAction'=>'site/error',
),
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'error, warning',
),
// uncomment the following to show log messages on web pages
array(
'class'=>'CWebLogRoute',
),
/**/
),
),
),
// application-level parameters that can be accessed
// using Yii::app()->params['paramName']
'params'=>array(
// this is used in contact page
'adminEmail'=>'webmaster@example.com',
'u_role'=>'',
),
);
2 ответа
Вы можете попробовать Yii::app()->session('u_role'), и этот урок также может вам помочь.
Я не думаю, что вы можете установить / изменить параметры во время выполнения (в вашем контроллере).
Обратите внимание, что этот метод предназначен для статических параметров конфигурации - он не предусматривает динамические параметры, измененные (или сохраненные) во время выполнения или для пользовательских настроек.
Проверьте правильность использования этой статьи: http://www.yiiframework.com/wiki/126/setting-and-getting-systemwide-static-parameters/