0

yii でパス形式の URL を作成しようとしていますが、常に get 形式で作成されます。何がうまくいかないのかわかりません。

これはmain.phpです

 'urlManager'=>array(
                'urlFormat'=>'path',
                            'showScriptName'=>FALSE,
                'rules'=>array(
'airlineSearch/roundTripSearch/<origin:\w+>'=>'airlineSearch/roundTripSearch/<origin>',
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
                ),
            ),

そしてこれがコントローラー

class AirlineSearchController extends Controller
{
public function actionRoundTripSearch($origin)
       {
           echo $origin;   
       }

       public function actionLets()
       {
          echo $this->createUrl('roundTripSearch',array('origin'=>'delhi'));
       }
}

しかし、それは常に/services/airlineSearch/roundTripSearch?origin=delhi
質問になります:-どうすればパス形式で取得できますか?

4

2 に答える 2

0

デフォルトの Yii URL ルールを削除して、独自の特定のルールを追加することを常にお勧めします。また、useStrictParsingを使用してみてください。これらは両方とも、URL をより厳密に制御するのに役立ち、必要に応じて 404 を生成します。

これが私のアプローチです:

'urlManager'=>array(
    'showScriptName' => false,
    'urlFormat'=>'path',
    'useStrictParsing'=>true,
    'rules'=>array(

        'services/airline-search/<trip:round-trip|one-way>/<origin:\w+>' => 'airlineSearch/roundTripSearch',
    ),
),

そして、コントローラーで:

<?php

class AirlineSearchController extends Controller
{
    public function actionRoundTripSearch($origin)
    {
        print_r($_GET); // Array ( [trip] => round-trip [origin] => delhi )

        // Use the full route as first param 'airlineSearch/roundTripSearch'
        // This may have been the cause of your issue
        echo $this->createUrl('airlineSearch/roundTripSearch',array('trip' => 'round-trip', 'origin'=>'delhi'));
        // echoes  /services/airline-search/round-trip/delhi
    }

    public function actionLets()
    {

    }


?>
于 2014-02-07T13:37:28.800 に答える