【问题标题】:How to write rules in UrlManager Yii frameworkUrlManager Yii框架中如何编写规则
【发布时间】:2018-02-18 01:12:37
【问题描述】:

我只想从 URL 中删除这个 "menu-":"example.com/menu-burger-king"

这是actionMenu里面的代码

$url=isset($_SERVER['REQUEST_URI'])?explode("/",$_SERVER['REQUEST_URI']):false;     
    if(!is_array($url) && count($url)<=0){      
         $this->render('404-page',array(
           'header'=>true,
          'msg'=>"Sorry but we cannot find what you are looking for"
        ));         
        return ;
    }           
    $page_slug=$url[count($url)-1];
    $page_slug=str_replace('menu-','',$page_slug);
    if(isset($_GET)){               
        $c=strpos($page_slug,'?');
        if(is_numeric($c)){
            $page_slug=substr($page_slug,0,$c);
        }
    }           
    $page_slug=trim($page_slug);

我已经在 config.php 文件中实现了规则,如下所示:

        'urlManager'=>array(
        'class' => 'UrlManager', 
        'urlFormat'=>'path',            
        'showScriptName'=>false,            
        'rules'=>array(     
            '' => 'store/index',
            '<action:('.$patern.')>' => 'store/<action>',
            '<controller:\w+>/<id:\d+>'=>'<controller>/view',
            '<controller:\w+>'=>'<controller>/index',   '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
            '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
        )           
    ),

这是在 $pattern 里面

$patern="cuisine|signup|signin|merchantsignup|contact|searcharea";
$patern.="|menu|checkout|paymentoption|receipt|logout|paypalinit|paypalverify";
$patern.="|OrderHistory|Profile|howItWork|forgotPassword|PageSetlanguage|stripeInit";
$patern.="|MercadoInit|RenewSuccesful|Browse|PaylineInit|Paylineverify|sisowinit";
$patern.="|PayuInit|BankDepositverify|AutoResto|AutoStreetName|AutoCategory|PayseraInit";
$patern.="|AutoFoodName|Confirmorder|Paymentbcy|Bcyinit|EpayBg|EpyInit";
$patern.="|GuestCheckout|MerchantSignupSelection|MerchantSignupinfo|CancelWithdrawal";
$patern.="|ATZinit|DepositVerify|Verification|Map|GoogleLogin|AddressBook";
$patern.="|AutoZipcode|AutoPostAddress|Item|Ty|EmailVerification|MyPoints|BtrInit|setlanguage";
$patern.="|mollieinit|mollieprocess|home|molliewebhook";
$patern.="|ip8init|ipay88verify|ipay88receiver";
$patern.="|monerisinit|confirmorder|rzrinit|rzrverify|acceptorder|declineorder|cart|restaurant";
$patern.="|voguepaynotify|voguepaysuccess|voguepayfailed|voginit|vognotify|voginit|vogsuccess";
$patern=strtolower($patern);

前端链接是这样的:

<a href="<?php echo Yii::app()->createUrl("/menu-". trim($val['restaurant_slug']))?>">

当我尝试从控制器中删除 menu- 并查看它时会出现致命错误。

致命错误:未捕获的异常“CHttpException”带有消息“无法解析请求”

【问题讨论】:

  • 这一行$pattern 中的内容'&lt;action:('.$patern.')&gt;'
  • 请通过编辑在问题中添加详细信息
  • 问题已更新。感谢您的回复。

标签: php yii url-rewriting yii2 yii-url-manager


【解决方案1】:

这样的事情怎么样:

'menu-<action:[a-zA-Z0-9\-]+>' => 'store/<action>',

假设“burger-king”是 StoreController 中的操作——如果这不是您的意图,请添加特定要求。 (适当调整正则表达式。)

【讨论】:

  • 感谢您的回答...这适用于指导 'menu-&lt;action:[a-zA-Z0-9\-]+&gt;' =&gt; 'store/menu-&lt;action&gt;', 如果我使用此 'menu-&lt;action:[a-zA-Z0-9\-]+&gt;' =&gt; 'store/&lt;action&gt;', 它会出现 404 页面错误。
  • 现在一切正常...'menu-&lt;action:[a-zA-Z0-9\-]+&gt;' =&gt; 'store/menu-&lt;action&gt;', 但我不希望“菜单-”出现在 URL 上。
  • 有可能吗?
  • 是的,您必须使用重定向在服务器端执行此操作,或使用push-state 在客户端执行此操作。无论哪种情况,您都希望确保您也有“最终”模式的规则。虽然不知道你的控制器是什么样的,但你必须弄清楚确切的语法,并且可能有一些beforeAction() 条件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
相关资源
最近更新 更多