Yii Framework Forum: yii blog tutorial Problem - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

yii blog tutorial Problem Rate Topic: -----

#1 User is offline   yii 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 440
  • Joined: 25-July 09

Posted 26 July 2009 - 11:51 AM

Hi,
I'm just using the yii blog tutorial and have some strange problems.
I'm now on side 19 and have done what the tutorial said.

PHP have some problems:

http://localhost/blog/index.php?r=post/create


PHP Error
Description

require(content.php) [<a href='function.require'>function.require</a>]: failed to open stream: No such file or directory
Source File

E:\Workspace\yii\framework\YiiBase.php(231)

00219: 
00220:         if(class_exists($alias,false) || interface_exists($alias,false))
00221:             return self::$_imports[$alias]=$alias;
00222: 
00223:         if(isset(self::$_coreClasses[$alias]) || ($pos=strrpos($alias,'.'))===false)  // a simple class name
00224:         {
00225:             self::$_imports[$alias]=$alias;
00226:             if($forceInclude)
00227:             {
00228:                 if(isset(self::$_coreClasses[$alias])) // a core class
00229:                     require(YII_PATH.self::$_coreClasses[$alias]);
00230:                 else
00231: require($alias.'.php');
00232:             }
00233:             return $alias;
00234:         }
00235: 
00236:         if(($className=(string)substr($alias,$pos+1))!=='*' && (class_exists($className,false) || interface_exists($className,false)))
00237:             return self::$_imports[$alias]=$className;
00238: 
00239:         if(($path=self::getPathOfAlias($alias))!==false)
00240:         {
00241:             if($className!=='*')
00242:             {
00243:                 self::$_imports[$alias]=$className;

Stack Trace

#0 E:\Workspace\yii\framework\YiiBase.php(231): import()
#1 E:\Workspace\yii\framework\validators\CValidator.php(137): import()
#2 E:\Workspace\yii\framework\base\CModel.php(420): createValidator()
#3 E:\Workspace\yii\framework\db\ar\CActiveRecord.php(2183): Post->createValidators()
#4 E:\Workspace\yii\framework\db\ar\CActiveRecord.php(1039): CActiveRecordMetaData->getValidators()
#5 E:\Workspace\yii\framework\base\CModel.php(274): Post->getValidators()
#6 E:\Workspace\yii\framework\base\CModel.php(305): Post->getValidatorsForAttribute()
#7 E:\Workspace\yii\framework\web\helpers\CHtml.php(1025): Post->isAttributeRequired()
#8 E:\Workspace\blog\protected\views\post\_form.php(12): activeLabelEx()
#9 E:\Workspace\yii\framework\web\CBaseController.php(119): require()
#10 E:\Workspace\yii\framework\web\CBaseController.php(88): PostController->renderInternal()
#11 E:\Workspace\yii\framework\web\CController.php(701): PostController->renderFile()
#12 E:\Workspace\blog\protected\views\post\create.php(11): PostController->renderPartial()
#13 E:\Workspace\yii\framework\web\CBaseController.php(119): require()
#14 E:\Workspace\yii\framework\web\CBaseController.php(88): PostController->renderInternal()
#15 E:\Workspace\yii\framework\web\CController.php(701): PostController->renderFile()
#16 E:\Workspace\yii\framework\web\CController.php(640): PostController->renderPartial()
#17 E:\Workspace\blog\protected\controllers\PostController.php(74): PostController->render()
#18 E:\Workspace\yii\framework\web\actions\CInlineAction.php(32): PostController->actionCreate()
#19 E:\Workspace\yii\framework\web\CController.php(300): CInlineAction->run()
#20 E:\Workspace\yii\framework\web\filters\CFilterChain.php(129): PostController->runAction()
#21 E:\Workspace\yii\framework\web\filters\CFilter.php(41): CFilterChain->run()
#22 E:\Workspace\yii\framework\web\CController.php(952): CAccessControlFilter->filter()
#23 E:\Workspace\yii\framework\web\filters\CInlineFilter.php(59): PostController->filterAccessControl()
#24 E:\Workspace\yii\framework\web\filters\CFilterChain.php(126): CInlineFilter->filter()
#25 E:\Workspace\yii\framework\web\CController.php(283): CFilterChain->run()
#26 E:\Workspace\yii\framework\web\CController.php(257): PostController->runActionWithFilters()
#27 E:\Workspace\yii\framework\web\CWebApplication.php(332): PostController->run()
#28 E:\Workspace\yii\framework\web\CWebApplication.php(120): CWebApplication->runController()
#29 E:\Workspace\yii\framework\base\CApplication.php(133): CWebApplication->processRequest()
#30 E:\Workspace\blog\index.php(11): CWebApplication->run()



PostController.php

<?php

class PostController 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->loadPost()));
	}

	/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'show' page.
	 */
	public function actionCreate()
	{
		$model=new Post;
		if(isset($_POST['Post']))
		{
			$model->attributes=$_POST['Post'];
			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->loadPost();
		if(isset($_POST['Post']))
		{
			$model->attributes=$_POST['Post'];
			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->loadPost()->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(Post::model()->count($criteria));
		$pages->pageSize=self::PAGE_SIZE;
		$pages->applyLimit($criteria);

		$models=Post::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(Post::model()->count($criteria));
		$pages->pageSize=self::PAGE_SIZE;
		$pages->applyLimit($criteria);

		$sort=new CSort('Post');
		$sort->applyOrder($criteria);

		$models=Post::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 loadPost($id=null)
	{
		if($this->_model===null)
		{
			if($id!==null || isset($_GET['id']))
				$this->_model=Post::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->loadPost($_POST['id'])->delete();
			// reload the current page to avoid duplicated delete actions
			$this->refresh();
		}
	}
}


Post-Model
<?php

class Post extends CActiveRecord
{
	/**
	 * The followings are the available columns in table 'Post':
	 * @var integer $id
	 * @var string $title
	 * @var string $content
	 * @var string $contentDisplay
	 * @var string $tags
	 * @var integer $status
	 * @var integer $createTime
	 * @var integer $updateTime
	 * @var integer $commentCount
	 * @var integer $authorId
	 */

	const STATUS_DRAFT		= 0;
	const STATUS_PUBLISHED	= 1;
	const STATUS_ARCHIVED	= 2;

	/**
	 * 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 'Post';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		return array(
			array('title', 'content', 'status', 'required'),
			array('title', 'length', 'max' => 128 ),
			array('status', 'in', 'range' => array(0,1,2)),
			array('tags', 'match', 'pattern' => '/*[\w\s,]+$/', 'message' => 'Tags can only contain word characters'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		return array(
			'author'	=> array( self::BELONGS_TO, 'User', 'authorId'),
			'comments'	=> array( self::HAS_MANY, 'Comment', 'postId', 'order' => '??.createTime'),
			'tagsFilter'=> array( self::MANY_MANY, 'Tag', 'PostTag(postId, tagId)',
				'together'	=> true,
				'joinType'	=> 'INNER JOIN',
				'condition'	=> '??.name=:tag',
			),
		);
	}

	public function safeAttributes()
	{
		return array('title', 'content', 'status', 'tags');
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'id'=>'Id',
			'title'=>'Title',
			'content'=>'Content',
			'contentDisplay'=>'Content Display',
			'tags'=>'Tags',
			'status'=>'Status',
			'createTime'=>'Create Time',
			'updateTime'=>'Update Time',
			'commentCount'=>'Comment Count',
			'authorId'=>'Author',
		);
	}

	public function getStatusOptions()
	{
		return array(
			self::STATUS_DRAFT		=> 'Draft',
			self::STATUS_PUBLISHED	=> 'Published',
			self::STATUS_ARCHIVED	=> 'Archived',
		);
	}
	
	public function getStatusText()
	{
		$options = $this->statusOptions;
		return isset( $options[$this->status]) ? $options[$this->status] : "unknown ({$this->status})";
	}
}


I do not understand where is the problem?!!?

please help
thx
Meine Fragen stelle ich öffentlich und baue somit eine Wissensdatenbank für andere auf!
0

#2 User is offline   tri 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,651
  • Joined: 20-November 08
  • Location:Stockholm, Sweden

Posted 26 July 2009 - 12:33 PM

View Postyii, on 26 July 2009 - 11:51 AM, said:

...
public function rules()
{
return array(
array('title', 'content', 'status', 'required'),
array('title', 'length', 'max' => 128 ),
array('status', 'in', 'range' => array(0,1,2)),
array('tags', 'match', 'pattern' => '/*[\w\s,]+$/', 'message' => 'Tags can only contain word characters'),
);
}
...



This line isn't correct (the framework looks for a ContentValidator implementation):
array('title', 'content', 'status', 'required'),

Change it to:
array('title, content, status', 'required'),

/Tommy
Don't forget to read The Definitive Guide to Yii (en) (sv) | The class reference has the details
0

#3 User is offline   yii 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 440
  • Joined: 25-July 09

Posted 26 July 2009 - 12:41 PM

omg ;D
thx you!!!
Meine Fragen stelle ich öffentlich und baue somit eine Wissensdatenbank für andere auf!
0

#4 User is offline   yii 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 440
  • Joined: 25-July 09

Posted 26 July 2009 - 12:47 PM

is it possible to get better informations about the errors?
A better debug mode?
Meine Fragen stelle ich öffentlich und baue somit eine Wissensdatenbank für andere auf!
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users