主頁(yè) > 知識(shí)庫(kù) > Yii2使用駝峰命名的形式訪問(wèn)控制器的示例代碼

Yii2使用駝峰命名的形式訪問(wèn)控制器的示例代碼

熱門(mén)標(biāo)簽:外呼系統(tǒng)人工客服 400電話(huà)申請(qǐng)辦理 商丘外呼系統(tǒng)好處 全國(guó)各省地圖標(biāo)注點(diǎn) 福建高頻外呼防封系統(tǒng)哪家好 網(wǎng)絡(luò)電話(huà)400申請(qǐng) 周口網(wǎng)絡(luò)回?fù)芡夂粝到y(tǒng) 百度地圖標(biāo)注類(lèi)型是酒店 隨州銷(xiāo)售電銷(xiāo)機(jī)器人公司

yii2在使用的時(shí)候,訪問(wèn)控制器的時(shí)候,如果控制器的名稱(chēng)是駝峰命名法,那訪問(wèn)的url中要改成橫線的形式。例如:

public function actionRoomUpdate()
{
//
}
//訪問(wèn)的時(shí)候就要www.test.com/room-update這樣訪問(wèn)

最近在做某渠道的直連的時(shí)候,他們提供的文檔上明確指出接口的形式:

剛開(kāi)始以為YII2中肯定有這樣的設(shè)置,然后就去google了下,發(fā)現(xiàn)都說(shuō)不行,自己去看了下,果然,框架里面直接是寫(xiě)死的:(源碼)\vendor\yiisoft\yii2\base\Controller.php

/**
  * Creates an action based on the given action ID.
  * The method first checks if the action ID has been declared in [[actions()]]. If so,
  * it will use the configuration declared there to create the action object.
  * If not, it will look for a controller method whose name is in the format of `actionXyz`
  * where `Xyz` stands for the action ID. If found, an [[InlineAction]] representing that
  * method will be created and returned.
  * @param string $id the action ID.
  * @return Action the newly created action instance. Null if the ID doesn't resolve into any action.
  */
 public function createAction($id)
 {
  if ($id === '') {
   $id = $this->defaultAction;
  }
  $actionMap = $this->actions();
  if (isset($actionMap[$id])) {
   return Yii::createObject($actionMap[$id], [$id, $this]);
  } elseif (preg_match('/^[a-z0-9\\-_]+$/', $id)  strpos($id, '--') === false  trim($id, '-') === $id) {
   $methodName = 'action' . str_replace(' ', '', ucwords(implode(' ', explode('-', $id))));
   if (method_exists($this, $methodName)) {
    $method = new \ReflectionMethod($this, $methodName);
    if ($method->isPublic()  $method->getName() === $methodName) {
     return new InlineAction($id, $this, $methodName);
    }
   }
  }
  return null;
 }

這點(diǎn)有點(diǎn)low,不過(guò)問(wèn)題倒不大,這個(gè)代碼很容易理解,我們發(fā)現(xiàn),其實(shí)如果在這個(gè)源碼的基礎(chǔ)上再加上一個(gè)else就可以搞定,但是還是不建議直接改源碼。

由于我們的項(xiàng)目用的事yii2的advanced版本,并且里面有多個(gè)項(xiàng)目,還要保證其他項(xiàng)目使用正常(也就是個(gè)別的控制器才需要使用駝峰命名的方式訪問(wèn)),這也容易:

我們可以寫(xiě)個(gè)components處理:\common\components\zController.php

?php
/**
 * Created by PhpStorm.
 * User: Steven
 * Date: 2017/10/26
 * Time: 16:50
 */
namespace common\components;
use \yii\base\Controller;
use yii\base\InlineAction;
class zController extends Controller //這里需要繼承自\yii\base\Controller
{
 /**
  * Author:Steven
  * Desc:重寫(xiě)路由,處理訪問(wèn)控制器支持駝峰命名法
  * @param string $id
  * @return null|object|InlineAction
  */
 public function createAction($id)
 {
  if ($id === '') {
   $id = $this->defaultAction;
  }
  $actionMap = $this->actions();
  if (isset($actionMap[$id])) {
   return \Yii::createObject($actionMap[$id], [$id, $this]);
  } elseif (preg_match('/^[a-z0-9\\-_]+$/', $id)  strpos($id, '--') === false  trim($id, '-') === $id) {
   $methodName = 'action' . str_replace(' ', '', ucwords(implode(' ', explode('-', $id))));
   if (method_exists($this, $methodName)) {
    $method = new \ReflectionMethod($this, $methodName);
    if ($method->isPublic()  $method->getName() === $methodName) {
     return new InlineAction($id, $this, $methodName);
    }
   }
  } else {
   $methodName = 'action' . $id;
   if (method_exists($this, $methodName)) {
    $method = new \ReflectionMethod($this, $methodName);
    if ($method->isPublic()  $method->getName() === $methodName) {
     return new InlineAction($id, $this, $methodName);
    }
   }
  }
  return null;
 }
}

ok ,這就可以支持使用駝峰形式訪問(wèn)了,當(dāng)然這個(gè)的形式很多,也可以寫(xiě)成一個(gè)控制器,然后其它控制器繼承這個(gè)控制器就行了,但是原理是一樣的

如果使用?  是需要用駝峰命名形式訪問(wèn)的控制器中,繼承下這個(gè)zController就可以了,

?php
/**
 * Created by PhpStorm.
 * User: Steven
 * Date: 2017/10/18
 * Time: 15:57
 */
namespace backend\modules\hotel\controllers;
use yii\filters\AccessControl;
use yii\filters\ContentNegotiator;
use yii\web\Response;
use common\components\zController;
class QunarController extends zController
{
 public $enableCsrfValidation = false;
 public function behaviors()
 {
  $behaviors = parent::behaviors();
  unset($behaviors['authenticator']);
  $behaviors['corsFilter'] = [
   'class' => \yii\filters\Cors::className(),
   'cors' => [ // restrict access to
    'Access-Control-Request-Method' => ['*'], // Allow only POST and PUT methods
    'Access-Control-Request-Headers' => ['*'], // Allow only headers 'X-Wsse'
    'Access-Control-Allow-Credentials' => true, // Allow OPTIONS caching
    'Access-Control-Max-Age' => 3600, // Allow the X-Pagination-Current-Page header to be exposed to the browser.
    'Access-Control-Expose-Headers' => ['X-Pagination-Current-Page'],
   ],
  ];
  //配置ContentNegotiator支持JSON和XML響應(yīng)格式
  /*$behaviors['contentNegotiator'] = [
   'class' => ContentNegotiator::className(), 'formats' => [
    'application/xml' => Response::FORMAT_XML
   ]
  ];*/
  $behaviors['access'] = [
   'class' => AccessControl::className(),
   'rules' => [
    [
     'ips' => ['119.254.26.*', //去哪兒IP訪問(wèn)白名單
      '127.0.0.1','106.14.56.77','180.168.4.58' //蜘蛛及本地IP訪問(wèn)白名單
     ], 'allow' => true,
    ],
   ],
  ];
  return $behaviors;
 }
}
?>

示例:

/**
  * Author:Steven
  * Desc:酒店靜態(tài)數(shù)據(jù)接口
  */
 public function actiongetFullHotelInfo()
 {
 }

訪問(wèn)的時(shí)候url為www.test.com/getFullHotelInfo

總結(jié)

以上所述是小編給大家介紹的Yii2使用駝峰命名的形式訪問(wèn)控制器,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

您可能感興趣的文章:
  • 詳解PHP的Yii框架中的Controller控制器
  • Yii2創(chuàng)建控制器(createController)方法詳解
  • yii2控制器Controller Ajax操作示例
  • Yii2使用$this->context獲取當(dāng)前的Module、Controller(控制器)、Action等
  • Yii2設(shè)置默認(rèn)控制器的兩種方法
  • Yii控制器中操作視圖js的方法
  • Yii控制器中filter過(guò)濾器用法分析
  • Yii2使用駝峰命名的形式訪問(wèn)控制器(實(shí)例講解)
  • Yii2框架控制器、路由、Url生成操作示例
  • yii2 在控制器中驗(yàn)證請(qǐng)求參數(shù)的使用方法
  • Yii 框架控制器創(chuàng)建使用及控制器響應(yīng)操作示例

標(biāo)簽:佛山 樂(lè)山 迪慶 六安 定西 南寧 十堰 海南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Yii2使用駝峰命名的形式訪問(wèn)控制器的示例代碼》,本文關(guān)鍵詞  Yii2,使用,駝峰,命名,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Yii2使用駝峰命名的形式訪問(wèn)控制器的示例代碼》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Yii2使用駝峰命名的形式訪問(wèn)控制器的示例代碼的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章