Jump to content
Larry Ullman's Book Forums

Conflict With Slugs And Modules


abderrahmane
 Share

Recommended Posts

Hey guys,

 

I created a controller 'PageController.php' with a default action 'actionShow' like this:

public function actionShow( $slug = '' ) {

  if ( empty( $slug ) ) {
    $model=Pages::model()->findByAttributes( array( 'slug' => 'accueil' ) );
  }
  else {
    $model = Pages::model()->find('slug = :slug', array(':slug' => $slug));

  if($model===null) {
    throw new CHttpException(404,'The requested page does not exist.');
  }
}

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

Then I created a module (and this is where things got problems) called "admin", and declared it in config/main.php

 

And I set up the urls in config/main.php like that:

'urlManager'=>array(
  'urlFormat'=>'path',
  'showScriptName'=>false,
  'rules'=>array(
    '<controller:\w+>/<id:\d+>'=>'<controller>/view',
    '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
    '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
    '<module:\w+>/<controller:\w+>/<action:[0-9a-zA-Z_\-]+>/<id:\d+>' => '<module>/<controller>/<action>',
    '<module:\w+>/<controller:\w+>/<action:[0-9a-zA-Z_\-]+>' => '<module>/<controller>/<action>',
    '<module:\w+>/<controller:\w+>' => '<module>/<controller>/index',
    '<slug:\w+>'=> 'page/show',
  ),
),

The problem is when I call the page : maydomain.com/admin, it been processed as a slug for the page and not as a module, I fixed in the actionShow by :

 

if $slug=='admin'
  $this->forward('admin/default/index')

 

 

Is there is a way more clean than this ?

Link to comment
Share on other sites

 Share

×
×
  • Create New...