تالار گفتمان nCIS.ir

نسخه‌ی کامل: مشکل NameSpace ها در Yii 2
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام.

من میخوام تمام اطلاعات دیتابیس رو با findAll بگیرم . اما توی NameSpace ها به ارور بر میخورم.مشکل چیه؟

کدهای مربوط به Controller :

<?php
namespace frontendcontrollers;
namespace frontendmodels;
use yiiwebController;
use frontendmodelsUsers;

class UsaController extends Controller{
   
   public function actionIndex(){
       
    $Posts=Users::model()-> findAll();
     return $this->render('index',  compact('Posts'));
       
   }

}

کد مربوط به View :

<?php
var_dump($Posts);
?>

کد Model رو هم با gii ایجاد کردم:

<?php

namespace appmodels;

use Yii;

/**
* This is the model class for table "users".
*
* @property integer $id
* @property string $name
* @property string $username
*/
class Users extends yiidbActiveRecord
{
   /**
    * @inheritdoc
    */
   public static function tableName()
   {
       return 'users';
   }

   /**
    * @inheritdoc
    */
   public function rules()
   {
       return [
           [['name', 'username'], 'required'],
           [['name', 'username'], 'string', 'max' => 255]
       ];
   }

   /**
    * @inheritdoc
    */
   public function attributeLabels()
   {
       return [
            'id' => 'ID',
            'name' => 'Name',
            'username' => 'Username',
        ];
   }

   /**
    * @inheritdoc
    * @return UsersQuery the active query used by this AR class.
    */
   public static function find()
   {
       return new UsersQuery(get_called_class());
   }
}

به این صورت لینک رو اجرا میکنم:

http://localhost:81/Yii2_advanced/frontend/web/index.php?r=usa/index
این هم اروری که نشون میده:

نقل قول:
Unknown Class – yiibaseUnknownClassException

Unable to find 'frontendcontrollersUsaController' in file: C:xampphtdocsYii2_advanced/frontend/controllers/UsaController.php. Namespace missing?
namespace دوم رو داخل کلاس کنترلر حذف کنید.
<?php
namespace frontendcontrollers;

use Yii;
use yiiwebController;
use appmodelsUsers;
 
class UsaController extends Controller
{
    public function actionIndex()
    {
        $Posts = Users::findAll();
        return $this->render('index',  compact('Posts'));
    }
}
باز هم ارور میده :

نقل قول:
Unknown Class – yiibaseUnknownClassException
Unable to find 'frontendmodelsUsers' in file: C:xampphtdocsYii2_advanced/frontend/models/Users.php. Namespace missing?
اول همه use ها بگذارین. مثال:
use appmodelsUsers;

ضمناً وقتی فضای نام شما توی مدل appmodels هست، توی کنترلر هم باید از همین استفاده کنید (مثل کد بالا که گذاشتم).
من دقیقا همون کد هایی که شما توی پست قبلی دادین رو تست کردم نمیدونم چرا ارور میده.

بک اسلش هم گذاشتم درست نشد . همون ارور قبلی رو میده .

Unable to find 'frontendmodelsUsers' in file: C:xampphtdocsYii2_advanced/frontend/models/Users.php. Namespace missing?
ظاهرا توی اتصال به دیتابیس مشکل داره.

چون الان بصورت زیر مشکلی نداره:

<?php
namespace frontendcontrollers;

use yiiwebController;
use frontendmodelsUsers;

class UsaController extends Controller{
    
    public function actionIndex(){
        
    // $Posts=Users::model()-> findAll();
        $Posts='test1';
      return $this->render('index',  compact('Posts'));
        
    }

}
دوست عزیز، چرا از متد model استفاده میکنید؟ توی Yii2 این مدلی نیست. باید بنویسید:
Users::findAll();

ضمناً اگه از معماری advanced استفاده میکنید، توی مدلتون namespace رو اصلاح کنید و بجای app همون frontend رو بنویسید.