Yii Framework Forum: Adding A Filter (Chapter 5, Page ~ 98) - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • This topic is locked

Adding A Filter (Chapter 5, Page ~ 98)

#1 User is offline   codemode 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 14
  • Joined: 24-August 14
  • Location:Caracas, Venezuela

Posted 30 September 2014 - 09:32 AM

Hello people,

I'm trying to follow the book (for the trackstar application), and i'm stuck in a part where we need to add a filter to the project.

According to the book, i should get a "403 error", however i am getting a 400...
Below is my IssueController pasted, please tell me if i'm missing something...
Many thanks!

<?php

class IssueController extends Controller
{
	/**
	 * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
	 * using two-column layout. See 'protected/views/layouts/column2.php'.
	 */
	public $layout='//layouts/column2';

	private $_project = null;

	protected function loadProject($projects)
	{
		if($this->_project===null)
		{
			$this->_project=Project::model()->findByPk($projectId);
			if($this->_project===null)
			{
				throw new CHttpException(404, 'The requested project does not exist');
			}
		}
		return $this->_project;
	}

	

	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
			'postOnly + create', // we only allow deletion via POST request
		);
	}

	/**
	 * 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 'index' and 'view' actions
				'actions'=>array('index','view'),
				'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('*'),
			),
		);
	}

	/**
	 * Displays a particular model.
	 * @param integer $id the ID of the model to be displayed
	 */
	public function actionView($id)
	{
		$this->render('view',array(
			'model'=>$this->loadModel($id),
		));
	}

	/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
	public function actionCreate()
	{
		$model=new Issue;

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Issue']))
		{
			$model->attributes=$_POST['Issue'];
			if($model->save())
				$this->redirect(array('view','id'=>$model->id));
		}

		$this->render('create',array(
			'model'=>$model,
		));
	}

	/**
	 * Updates a particular model.
	 * If update is successful, the browser will be redirected to the 'view' page.
	 * @param integer $id the ID of the model to be updated
	 */
	public function actionUpdate($id)
	{
		$model=$this->loadModel($id);

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Issue']))
		{
			$model->attributes=$_POST['Issue'];
			if($model->save())
				$this->redirect(array('view','id'=>$model->id));
		}

		$this->render('update',array(
			'model'=>$model,
		));
	}

	/**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'admin' page.
	 * @param integer $id the ID of the model to be deleted
	 */
	public function actionDelete($id)
	{
		$this->loadModel($id)->delete();

		// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
		if(!isset($_GET['ajax']))
			$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
	}

	/**
	 * Lists all models.
	 */
	public function actionIndex()
	{
		$dataProvider=new CActiveDataProvider('Issue');
		$this->render('index',array(
			'dataProvider'=>$dataProvider,
		));
	}

	/**
	 * Manages all models.
	 */
	public function actionAdmin()
	{
		$model=new Issue('search');
		$model->unsetAttributes();  // clear any default values
		if(isset($_GET['Issue']))
			$model->attributes=$_GET['Issue'];

		$this->render('admin',array(
			'model'=>$model,
		));
	}

	/**
	 * 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 $id the ID of the model to be loaded
	 * @return Issue the loaded model
	 * @throws CHttpException
	 */
	public function loadModel($id)
	{
		$model=Issue::model()->findByPk($id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}

	/**
	 * Performs the AJAX validation.
	 * @param Issue $model the model to be validated
	 */
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='issue-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}

	public function filterProjectContext($filterChain)
	{
		if(isset($_GET['pid']))
			$this->loadProject($_GET['pid']);
		else
			throw new CHttpException(403, 'Must specify a project before specifying this action');
		$filerChain->run();
	}

	
}

0

#2 User is offline   Bizley 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 922
  • Joined: 29-July 14
  • Location:Wrocław

Posted 30 September 2014 - 12:03 PM

If this is pasted - do you know you have got here $filerChain->run(); instead of $filterChain->run(); ?
http://bizley.pl ʕ•ᴥ•ʔ
1

#3 User is offline   codemode 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 14
  • Joined: 24-August 14
  • Location:Caracas, Venezuela

Posted 30 September 2014 - 03:30 PM

View PostBizley, on 30 September 2014 - 12:03 PM, said:

If this is pasted - do you know you have got here $filerChain->run(); instead of $filterChain->run(); ?

Hello, thank you for catching another error. No, the code was not copy/pasted - and hence the typo...
I'm still trying to figure out, why is the "403 error" not displaying
0

#4 User is offline   codemode 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 14
  • Joined: 24-August 14
  • Location:Caracas, Venezuela

Posted 02 October 2014 - 02:41 PM

...could someone help me out? I'm really stuck bad here.
Thanks :)
0

#5 User is offline   designpromote.co.uk 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 20-November 14

Posted 03 December 2014 - 07:23 PM

You didn't apply the filter (filterProjectContext).

add 'profectContext' //apply filter here!
inside public function filters()
0

#6 User is offline   Ashoo 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 11-August 15

Posted 11 August 2015 - 04:52 PM

What I found is that 404 error is not due to loadProject and filterProjectContext functions, its due to getUserOption function which has to populate owner and requester dropdown in issue creation form, because user table is inaccessible and I am still trying to figure out how to get it right?
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • This topic is locked

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