Yii 1.1a提交表单不成功

按照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,则出现了提交不上数据的情况。