2017-01-26 2 views
1

J'ai créé une règle d'URL personnalisée et je souhaite y mettre une certaine logique, mais les méthodes parseRequest et createUrl ne sont pas en cours d'exécution.Yii2. Appliquer la règle de règle d'URL personnalisée

<?php 
namespace app\components; 

use yii\base\Object; 
use yii\web\UrlRuleInterface; 

/** 
* {@inheritDoc} 
*/ 
class CustomUrlRule extends Object implements UrlRuleInterface 
{ 
    /** 
    * {@inheritDoc} 
    */ 
    public function createUrl($manager, $route, $params) 
    { 
     echo __METHOD__; 
     die(); 
    } 

    /** 
    * {@inheritDoc} 
    * @throws \yii\base\InvalidConfigException 
    */ 
    public function parseRequest($manager, $request) 
    { 
     echo __METHOD__; 
     die(); 
    } 
} 

Et puis écrire dans UrlManager$rules

'enablePrettyUrl'  => true, 
    'showScriptName'  => false, 
    'enableStrictParsing' => true, 
    'rules'    => [ 
     'class' => 'app\components\CustomUrlRule', 
    //other rules... 

]

Mais le code ne s'exécute pas. Je peux encore une page de mon application. Comment appliquer mon inutile CustomUrlRule?

Répondre

1

exemple de configuration urlManager correcte est:

'rules' => [ 
    ['class' => 'MyUrlRule', 'pattern' => '...', 'route' => 'site/index', ...], 
    // ... 
] 

Vous devez envelopper cela dans un autre tableau.

Éditer: Vous n'avez pas à étendre yii\web\UrlRule au lieu de yii\base\Object comme je l'ai posté avant, juste l'interface appropriée est nécessaire.

+0

Pourrait-ce être une erreur dans [docs] (http://www.yiiframework.com/doc-2.0/guide-runtime-routing.html#creating-rules)? –

+0

Désolé, mon mauvais, juste l'interface est nécessaire. – Bizley

+0

Merci. Dans 4 minutes, je vais accepter la réponse :) –