2016-11-04 19 views
2

我想在我的控制器中添加登錄操作,並在給出頁面時找不到錯誤。 我知道有很多這樣的帖子,但沒有人幫助過我。我控制器如何將自定義操作添加到yii2的yii rest activecontroller擴展控制器中?

代碼:

<?php 
// controller for rest apis 
namespace app\controllers; 
use yii\rest\ActiveController; 
use yii\rest\Controller; 
use yii\web\Response; 
//use yii\web\Controller; 
use app\models\UserMaster; 

//class UserController extends Controller 
class UserController extends ActiveController 
{ 
    public $modelClass = 'app\models\UserMaster'; 
    public $pluralize = false; 
    public function behaviors() 
    { 
     $behaviors = parent::behaviors(); 
     $behaviors['contentNegotiator']['formats']['text/html'] = Response::FORMAT_JSON; 
     return $behaviors; 
    } 
    public function actionLogin(){ 
     return UserMaster::find()->all(); 
    } 
    public function login(){ 
     return UserMaster::find()->all(); 
    }  
} 
?> 

從配置/ web.php代碼:

'urlManager' => [ 
      'enablePrettyUrl' => true, 
      'class'=>'yii\web\UrlManager', 
      'showScriptName' => false, 

      //for specifying rest api model to be used 
      //and by pluralize=false we can use with singular name rather than plural as default (users) 
      'enableStrictParsing' => true, 
      'rules' => [ 
       [ 
       'class' => 'yii\rest\UrlRule', 
       'controller' => 'user', 
       'pluralize'=>false, 
       'extraPatterns' => [ 
        'GET /user/login/' => 'login', // 'xxxxx' refers to 'actionXxxxx' 
        ], 
       ] 
      ], 
     ], 
+0

爲什麼不使用$ behaviors ['authenticator']進行身份驗證?你知道嗎? – yafater

+0

似乎沒問題,只需在extraPatterns中將'GET/user/login /'更改爲'GET登錄'即可。 (現在它試圖從/ user/user/login中獲取)。 – karpy47

回答

1

首先,讓我們從一型號:

<?php 
namespace app\models; 

use Yii; 
use yii\db\ActiveRecord; 

/** 
* My UserMaster model 
*/ 
class UserMaster extends ActiveRecord 
{ 

    public static function tableName() 
    { 
     return 'user_master'; // the name of the table 
    } 

    // other code ... 
} 

然後UserController.php看起來像這樣:

<?php 
namespace app\controllers; 

use Yii; 
use yii\rest\ActiveController; 
use app\models\userMaster; 

/** 
* My User controller 
*/ 
class UserController extends ActiveController 
{ 
    // define the model class 
    public $modelClass = 'app\models\UserMaster'; 

    // add a serializer to make front-end development easier 
    // public $serializer = [ 
    //  'class' => 'yii\rest\Serializer', 
    //  'collectionEnvelope' => 'items', 
    // ]; 

    // the login action 
    public function actionLogin() 
    { 
     return UserMaster::find()->all(); 
    } 
} 

然後,我們配置了urlManager這樣:

'urlManager' => [ 
    'enablePrettyUrl' => true, 
    'enableStrictParsing' => false, 
    'showScriptName' => false, 
    'rules' => [ 

     [ 
      'class' => 'yii\rest\UrlRule', 
      'controller' => 'user', 
      // 'pluralize' => false 
      'extraPatterns' => [ 
       'GET login' => 'login', 
       // other patterns 
      ] 
     ], 

    ], 
], 

現在我們可以通過訪問URI GET /users/login使用我們的登錄。在Yii2 REST Quick Start的更多詳細信息

相關問題