2016-11-04 1 views
2

Я хочу добавить действие входа в контроллер, давая мне страницу не найдена ошибка. Я знаю, что есть много сообщений вроде этого, но пока никто мне не помог.Как добавить пользовательское действие в yii rest activecontroller расширенный контроллер в yii2?

код для моего контроллера:

<?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

Кажется, просто измените 'GET/user/login /' на 'GET login' в extraPatterns. (Теперь он пытается получить из/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

Смежные вопросы