按照yii-guide来做时,创建crud User后,前台提交表单不成功。在linux下提交后为空值,windows下显示错误,说字段缺少默认值。而1.0.x可以。手动添加记录后,编辑也不起作用。
linux环境:Ubuntu9.04,Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.2 with Suhosin-Patch
按照yii-guide来做时,创建crud User后,前台提交表单不成功。在linux下提交后为空值,windows下显示错误,说字段缺少默认值。而1.0.x可以。手动添加记录后,编辑也不起作用。
linux环境:Ubuntu9.04,Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.2 with Suhosin-Patch
估计是 safe attribute的问题
请问怎么解决呢?
应该把你model还有编辑或添加的代码贴出来
不知道怎么回事,重新测试一个又可以了。下面是不行的相关文件代码:
models/User.php
<?php
class User extends CActiveRecord
{
/**
* The followings are the available columns in table 'User':
*/
/**
* Returns the static model of the specified AR class.
* @return CActiveRecord the static model class
*/
public static function model($className=__CLASS__)
{
return parent::model($className);
}
/**
* @return string the associated database table name
*/
public function tableName()
{
return 'User';
}
/**
* @return array validation rules for model attributes.
*/
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
);
}
/**
* @return array relational rules.
*/
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
);
}
/**
* @return array customized attribute labels (name=>label)
*/
public function attributeLabels()
{
return array(
);
}
}
controllers/UserController.php
<?php
class UserController extends CController
{
const PAGE_SIZE=10;
/**
* @var string specifies the default action to be 'list'.
*/
public $defaultAction='list';
/**
* @var CActiveRecord the currently loaded data model instance.
*/
private $_model;
/**
* @return array action filters
*/
public function filters()
{
return array(
'accessControl', // perform access control for CRUD operations
);
}
/**
* Specifies the access control rules.
* This method is used by the 'accessControl' filter.
* @return array access control rules
*/
public function accessRules()
{
return array(
array('allow', // allow all users to perform 'list' and 'show' actions
'actions'=>array('list','show'),
'users'=>array('*'),
),
array('allow', // allow authenticated user to perform 'create' and 'update' actions
'actions'=>array('create','update'),
'users'=>array('@'),
),
array('allow', // allow admin user to perform 'admin' and 'delete' actions
'actions'=>array('admin','delete'),
'users'=>array('admin'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
/**
* Shows a particular model.
*/
public function actionShow()
{
$this->render('show',array('model'=>$this->loadUser()));
}
/**
* Creates a new model.
* If creation is successful, the browser will be redirected to the 'show' page.
*/
public function actionCreate()
{
$model=new User;
if(isset($_POST['User']))
{
$model->attributes=$_POST['User'];
if($model->save())
$this->redirect(array('show','id'=>$model->id));
}
$this->render('create',array('model'=>$model));
}
/**
* Updates a particular model.
* If update is successful, the browser will be redirected to the 'show' page.
*/
public function actionUpdate()
{
$model=$this->loadUser();
if(isset($_POST['User']))
{
$model->attributes=$_POST['User'];
if($model->save())
$this->redirect(array('show','id'=>$model->id));
}
$this->render('update',array('model'=>$model));
}
/**
* Deletes a particular model.
* If deletion is successful, the browser will be redirected to the 'list' page.
*/
public function actionDelete()
{
if(Yii::app()->request->isPostRequest)
{
// we only allow deletion via POST request
$this->loadUser()->delete();
$this->redirect(array('list'));
}
else
throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
}
/**
* Lists all models.
*/
public function actionList()
{
$criteria=new CDbCriteria;
$pages=new CPagination(User::model()->count($criteria));
$pages->pageSize=self::PAGE_SIZE;
$pages->applyLimit($criteria);
$models=User::model()->findAll($criteria);
$this->render('list',array(
'models'=>$models,
'pages'=>$pages,
));
}
/**
* Manages all models.
*/
public function actionAdmin()
{
$this->processAdminCommand();
$criteria=new CDbCriteria;
$pages=new CPagination(User::model()->count($criteria));
$pages->pageSize=self::PAGE_SIZE;
$pages->applyLimit($criteria);
$sort=new CSort('User');
$sort->applyOrder($criteria);
$models=User::model()->findAll($criteria);
$this->render('admin',array(
'models'=>$models,
'pages'=>$pages,
'sort'=>$sort,
));
}
/**
* Returns the data model based on the primary key given in the GET variable.
* If the data model is not found, an HTTP exception will be raised.
* @param integer the primary key value. Defaults to null, meaning using the 'id' GET variable
*/
public function loadUser($id=null)
{
if($this->_model===null)
{
if($id!==null || isset($_GET['id']))
$this->_model=User::model()->findbyPk($id!==null ? $id : $_GET['id']);
if($this->_model===null)
throw new CHttpException(404,'The requested page does not exist.');
}
return $this->_model;
}
/**
* Executes any command triggered on the admin page.
*/
protected function processAdminCommand()
{
if(isset($_POST['command'], $_POST['id']) && $_POST['command']==='delete')
{
$this->loadUser($_POST['id'])->delete();
// reload the current page to avoid duplicated delete actions
$this->refresh();
}
}
}
Model里的rules方法,要写。如果没有什么验证规则,至少也要safe
1.1里,字段如果没有验证规则,则默认是不安全的,无法通过attrbutes方法赋值。
找到出现这个错误的原因了:创建MySQL表的时候,表名小写的原因,即应该是表User,而创建成了user,则出现了提交不上数据的情况。