friendly-url, problema

ciao a tutti, ho un problemino da risolvere:

ho un modello Post che contiene questa funzione


  public function getUrl() {

    return Yii::app()->createUrl('post/view', array(

      'id' => $this->id,

      'slug' => $this->slug,

    ));

  }

e in main.php nelle rules di urlManager ho


'news/<slug>/<id:\d+>' => 'post/view',

in pratica vorrei ottenere un url che sia nel formato /news/slug/id

ora, la regola funziona e mi porta a vedere l’articolo corretto quando richiamo il link in quel formato

invece la funzione getUrl, che dovrebbe costruirmelo in quel modo, mi restituisce un link in questo formato /post/id?slug=valoreslug, ad esempio /post/1?slug=titolo-notizia

ora credo che il problema dipenda dal fatto che il controller si chiama post ma lo shortlink che voglio io si chiama news… come posso risolvere?

grazie in anticipo

P.S.: provando a fare una cosa apparentemente stupida come questa


    return Yii::app()->createUrl('news/', array(

      'id' => $this->id,

      'slug' => $this->slug,

    ));

già il risultato migliora diventando: /news/id/1/slug/titolo-notizia

ma id e slug non dovrebbero esserci

se invece provo con


    return Yii::app()->createUrl('news/', array(

      $this->id,

      $this->slug,

    ));

il risultato è /news/0/1/1/titolo-news

P.P.S.: ovviamente ho ‘urlFormat’ => ‘path’

Prova con questa regola:




'news/slug/<slug:\w+>/id/<id:\d+>' => 'post/view',



il risultato è /post/1?slug=titolo-news

e non decodifica più all’inverso

:(

Devi cancellare l’altra impostazione che avevi indicato.

Già che ci sei, mi mostri il tuo file di configurazione ed in particolare la parte che riguarda l’urlManager?

l’avevo tolta… cmq ecco qui


'urlManager' => array(

      'showScriptName' => false, //hide index.php

      'urlFormat' => 'path',

      'rules' => array(

        '/activate/<id:\d+>' => 'user/activate',

        //

        '<controller:\w+>/<id:\d+>' => '<controller>/view',

        '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',

        '<controller:\w+>/<action:\w+>' => '<controller>/<action>',

        //

        '/page/<title:.*?>' => 'page/view',

        'news/<slug>/<id:\d+>' => 'post/view', /* Yii::t('app', 'news') . '/<id:\d+>/<slug:.*?>' => 'post/view',*/

      ),

    ),

e nel modello Post per il momento sto tamponando così


  public function getUrl() {

    //FIXME createAbsoluteUrl isnt working in this case...

    return 'http://' . Yii::app()->request->serverName . Yii::app()->baseUrl . '/news/' . $this->slug . '/' . $this->id;

    /*return Yii::app()->createAbsoluteUrl('post/view', array(

      'slug' => $this->slug,

      'id' => $this->id,

    ));*/

  }

il problema è che la decodifica dell’url funziona ma createabsoluteurl non lo crea come mi aspetterei

:blink:

… e alle ore 03:18 scopro che il problema è il posizionamento della dichiarazione nel main.php

và messa prima di


        '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',

io pensavo che non desse disturbo visto che anziché usare "post" sto usando "news" che non è il nome del controller, invece evidentemente a yii gliene sbatte niente della path e si basa solo sul nome del controller

…zio pino…

buonanotte! ::)

Io pensavo non ci fosse nemmeno =).