Yii rest only work on one controller ( all controllers are same)

Hi

My rest app work on localhost with no error but on host only user controller works fine and all other controllers it return this:




{

  "name": "PHP Fatal Error",

  "message": "Class 'app\\models\\store' not found",

  "code": 1,

  "type": "yii\\base\\ErrorException",

  "file": "/home/coolapps/public_html/vendor/yiisoft/yii2/rest/Action.php",

  "line": 88,

  "stack-trace": [

    "#0 [internal function]: yii\\base\\ErrorHandler->handleFatalError()",

    "#1 {main}"

  ]

}



there is a relation between store and user models and i can get the relation on user controller without any error:

here are my controllers:

base controller:




<?php


namespace app\controllers;


use yii\filters\auth\CompositeAuth;

use yii\filters\auth\HttpBasicAuth;

use yii\filters\auth\HttpBearerAuth;

use yii\filters\auth\QueryParamAuth;

use yii\rest\ActiveController;


class BaseActiveController extends ActiveController

{

    public function behaviors()

    {

        $behaviors = parent::behaviors();

        $behaviors['authenticator'] = [

            'class' => CompositeAuth::className(),

            'authMethods' => [

                HttpBasicAuth::className(),

                HttpBearerAuth::className(),

                QueryParamAuth::className(),

            ],

        ];

        return $behaviors;

    }

}



user controllers:





<?php


namespace app\controllers;


class UserController extends BaseActiveController

{

    public $modelClass = 'app\models\user';


}




store controller:




<?php


namespace app\controllers;


class StoreController extends BaseActiveController

{

    public $modelClass = 'app\models\store';


}



thank in advance!

Post the source code of these models: app\models\user, app\models\store

Store:




<?php

namespace app\models;


use Yii;

use yii\db\ActiveRecord;


/**

 * This is the model class for table "store".

 *

 * @property integer $id

 * @property string $title

 * @property integer $code

 * @property string $logo

 * @property string $address

 * @property boolean $paid

 * @property integer $created_at

 * @property integer $updated_at

 * @property integer $user_id

 *

 * @property Category[] $categories

 * @property User $user

 */

class Store extends ActiveRecord

{

    /**

     * @inheritdoc

     */

    public static function tableName()

    {

        return 'store';

    }




    /**

     * @inheritdoc

     */

    public function rules()

    {

        return [

            [['title', 'address'], 'required'],

            [['code', 'created_at', 'updated_at', 'user_id'], 'integer'],

            [['title', 'logo', 'address'], 'string', 'max' => 255],

            [['code'], 'unique'],

            ['paid', 'boolean'],

            ['paid', 'default', 'value' => 0],

        ];

    }


    /**

     * @inheritdoc

     */

    public function attributeLabels()

    {

        return [

            'id' => Yii::t('app', 'ID'),

            'title' => Yii::t('app', 'Title'),

            'code' => Yii::t('app', 'Store code'),

            'logo' => Yii::t('app', 'Logo'),

            'address' => Yii::t('app', 'Address'),

            'created_at' => Yii::t('app', 'Created At'),

            'updated_at' => Yii::t('app', 'Updated At'),

            'user_id' => Yii::t('app', 'User ID'),

        ];

    }


    /**

     * @return \yii\db\ActiveQuery

     */

    public function getCategories()

    {

        return $this->hasMany(Category::className(), ['store_id' => 'id']);

    }


    /**

     * @return \yii\db\ActiveQuery

     */

    public function getUser()

    {

        return $this->hasOne(User::className(), ['id' => 'user_id']);

    }


    public function extraFields()

    {

        return ['categories'];

    }

}




User:




<?php

namespace app\models;


use Yii;

use yii\behaviors\TimestampBehavior;

use yii\db\ActiveRecord;

use yii\web\IdentityInterface;


/**

 * User model

 *

 * @property integer $id

 * @property integer $mobile

 * @property integer $type

 * @property string $first_name

 * @property string $last_name

 * @property string $password_hash

 * @property string $password_reset_token

 * @property string $email

 * @property string $auth_key

 * @property integer $status

 * @property integer $created_at

 * @property integer $updated_at

 * @property string $password write-only password

 */

class User extends ActiveRecord implements IdentityInterface

{

    const STATUS_DELETED = 0;

    const STATUS_ACTIVE = 10;


    const TYPE_STORE_MANAGER = 1;

    const TYPE_USER = 2;




    /**

     * @inheritdoc

     */

    public static function tableName()

    {

        return '{{%user}}';

    }


    /**

     * @inheritdoc

     */

    public function behaviors()

    {

        return [

            TimestampBehavior::className(),

        ];

    }


    /**

     * @inheritdoc

     */

    public function rules()

    {

        return [

            ['status', 'default', 'value' => self::STATUS_ACTIVE],

            ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]],

        ];

    }


    /**

     * @inheritdoc

     */

    public static function findIdentity($id)

    {

        return static::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]);

    }




    /**

     * @inheritdoc

     */

    public static function findIdentityByAccessToken($token, $type = null)

    {

        return static::findOne(['id' => $token]);

    }


    /**

     * Finds user by mobile

     *

     * @param integer $mobile

     * @return static|null

     */

    public static function findByMobile($mobile)

    {

        return static::findOne(['mobile' => $mobile, 'status' => self::STATUS_ACTIVE]);

    }


    /**

     * Finds user by password reset token

     *

     * @param string $token password reset token

     * @return static|null

     */

    public static function findByPasswordResetToken($token)

    {

        if (!static::isPasswordResetTokenValid($token)) {

            return null;

        }


        return static::findOne([

            'password_reset_token' => $token,

            'status' => self::STATUS_ACTIVE,

        ]);

    }


    // filter out some fields, best used when you want to inherit the parent implementation

    // and blacklist some sensitive fields.

    public function fields()

    {

        $fields = parent::fields();


        // remove fields that contain sensitive information

        unset($fields['auth_key'], $fields['password_hash'], $fields['password_reset_token']);


        return $fields;

    }




    /**

     * Finds out if password reset token is valid

     *

     * @param string $token password reset token

     * @return boolean

     */

    public static function isPasswordResetTokenValid($token)

    {

        if (empty($token)) {

            return false;

        }


        $timestamp = (int)substr($token, strrpos($token, '_') + 1);

        $expire    = Yii::$app->params['user.passwordResetTokenExpire'];

        return $timestamp + $expire >= time();

    }


    /**

     * @inheritdoc

     */

    public function getId()

    {

        return $this->getPrimaryKey();

    }


    /**

     * @inheritdoc

     */

    public function getAuthKey()

    {

        return $this->auth_key;

    }


    /**

     * @inheritdoc

     */

    public function validateAuthKey($authKey)

    {

        return $this->getAuthKey() === $authKey;

    }


    /**

     * Validates password

     *

     * @param string $password password to validate

     * @return boolean if password provided is valid for current user

     */

    public function validatePassword($password)

    {

        return Yii::$app->security->validatePassword($password, $this->password_hash);

    }


    /**

     * Generates password hash from password and sets it to the model

     *

     * @param string $password

     */

    public function setPassword($password)

    {

        $this->password_hash = Yii::$app->security->generatePasswordHash($password);

    }


    /**

     * Generates "remember me" authentication key

     */

    public function generateAuthKey()

    {

        $this->auth_key = Yii::$app->security->generateRandomString();

    }


    /**

     * Generates new password reset token

     */

    public function generatePasswordResetToken()

    {

        $this->password_reset_token = Yii::$app->security->generateRandomString() . '_' . time();

    }


    /**

     * Removes password reset token

     */

    public function removePasswordResetToken()

    {

        $this->password_reset_token = null;

    }


    public function getStore()

    {

        return $this->hasOne(Store::className(), ['user_id' => 'id']);

    }


    public function extraFields()

    {

        return ['store'];

    }

}




Probably a case sensitivity problem, I guess.

They should be ‘User’ and ‘Store’.