PDA

View Full Version : کش در Yii



beh3000
چهارشنبه 28 آبان 1393, 16:29 عصر
سلام دوستان

من توی پروژه ام در config main.php قسمت زیر رو فعال کردم


'cache'=>array(
'class'=>'system.caching.CDBCache',
'connectionID'=>'db',
),


یک جدول در دیتابیس به نام yiicache (http://localhost/phpmyadmin/sql.php?server=1&db=online&table=yiicache&pos=0&token=1ebf75e7652970af94b6791e6522f8b0) ساخته شد و یه چیزایی توشه

الان یعنی صفحاتی که با بانک اطلاعاتی کار میکنند کش شده هستند همشون ؟؟؟

این نحوه کش کردن بهتره یا اینکه با sqllite کش کنیم بهتره ؟؟

اساتید جواب بدن لطفا

MMSHFE
پنج شنبه 29 آبان 1393, 15:40 عصر
الان شما فقط کش رو فعال کردین و گفتین تو دیتابیس ذخیره کنه ولی ازش استفاده نکردین. باید بسته به نیازتون از کش کوئری یا تمام صفحه یا بخشی از صفحه استفاده کنید.

beh3000
جمعه 30 آبان 1393, 08:23 صبح
layout رو چجوری میشه کش کرد ؟ چون یه جایی دیده بودم که در حالت معمول امکانپذیر نیست با begincache


$this->beginCache()

beh3000
جمعه 30 آبان 1393, 08:55 صبح
از 2 نوع کش میشه استفاده کرد ؟

دیتا کشینگ رو میخوام از sqllite استفاده کنم page caching , fragment caching از کش apc

MMSHFE
جمعه 30 آبان 1393, 09:01 صبح
توصیه میکنم یکم مطالعاتتون رو درمورد کش کردن اطلاعات در Yii بیشتر کنید:
http://www.yiiframework.com/doc/guide/1.1/en/caching.data

beh3000
جمعه 30 آبان 1393, 09:36 صبح
ببخشین که پشت سر هم دارم پست میذارم به مبحث کش رسیدم و دارم یاد میگیرم اینجوری میشه دیگه ببخشین ...

فقط اینکه این قطعه کدی که نوشتم برای دیتا کش درسته ؟


$cid='u'.Yii::app()->session['userid'];
$val=Yii::app()->cache->get( $cid );
if($val===false)
{
$val = User::model()->findByPk(Yii::app()->session['userid']);
Yii::app()->cache->set( $cid , $val , 60);
}

MMSHFE
جمعه 30 آبان 1393, 10:17 صبح
$cid = 'u' . Yii::app()->user->id;
if(!($val = Yii::app()->cache->get($cid))) {
$val = User::model()->findByPk(Yii::app()->user->id);
Yii::app()->cache->set($cid, $val, 60);
}

beh3000
جمعه 30 آبان 1393, 10:35 صبح
مرسی که بهینه تر نوشتین ولی تست کردم توی پروژه من Yii::app()->user->id یوزر نیم کاربره آیدی کاربر نیست !!! چرا ؟ من اصلا نمیدونستم از این طریق باید به آیدی کاربر دسترسی پیدا کرد ! توی سشن ذخیره میکردم ! کارم درسته ؟


سوال دوم اینکه : میشه اگه داده ها ( مثلا کاربر اطلاعات پروفایلشو تغییر داد) داده های جدید رو بخونه ولی اگه قبلی بود از کش بخونه ؟ اصلا dependency رو متوجه نشدم ... ببخشین

MMSHFE
جمعه 30 آبان 1393, 10:53 صبح
نه اینطوری خوب نیست. توی کلاس UserIdentity (توی components) این کارها رو انجام بدین:
1- دو فیلد private اضافه کنید:

private $_id;
private $_name;
2- توی متد authenticate جایی که مدل کاربر رو پیدا میکنید، این کدها رو اضافه کنید (جایی که مشخص میشه نام کاربری و رمز عبور درسته (قسمت else رو توی بلاک { } بگذارین) :

$this->_id = $user->id;
$this->_name = $user->username;
3- این متدها رو به کلاس اضافه کنید:

public function getId()
{
return $this->_id;
}
public function getName()
{
return $this->_name;
}
با این کار باید کد شما درست کار کنه و با Yii::app()->user->name به فیلد username و با Yii::app()->user->id به id اون دسترسی پیدا کنید. حتی میتونید درصورت نیاز، نام و نام خانوادگی رو بجای Yii::app()->user->name استفاده کنید. کافیه این خط رو توی مورد 2 اصلاح کنید:

$this->_name = $user->name . ' ' . $user->family;

MMSHFE
جمعه 30 آبان 1393, 10:57 صبح
یک مثال کامل از کلاس UserIdentity :

<?php

class UserIdentity extends CUserIdentity
{
private $_id;
private $_name;

public function authenticate()
{
$user = Users::model()->find('LOWER(username)=:username AND confirmed=1', array(':username'=>strtolower($this->username)));
if(!$user) {
$this->errorCode=self::ERROR_USERNAME_INVALID;
}
elseif(!$user->validatePassword($this->password)) {
$this->errorCode=self::ERROR_PASSWORD_INVALID;
}
else {
$this->errorCode=self::ERROR_NONE;
$this->_id = $user->id;
$this->_name = $user->name . ' ' . $user->family;
}
return !$this->errorCode;
}

public function getId()
{
return $this->_id;
}

public function getName()
{
return $this->_name;
}
}

beh3000
پنج شنبه 06 آذر 1393, 13:08 عصر
مرسی استاد انجام هم دادم خیلی هم عالی ! فقط اینکه این متغیرهای _id و ... کجا ذخیره میشن که بهشون توی هر صفحه ای دسترسی داریم ؟ خود Yii بصورت اتومات تو سشن ذخیره میکنه ؟

arta.nasiri
پنج شنبه 06 آذر 1393, 16:19 عصر
مرسی استاد انجام هم دادم خیلی هم عالی ! فقط اینکه این متغیرهای _id و ... کجا ذخیره میشن که بهشون توی هر صفحه ای دسترسی داریم ؟ خود Yii بصورت اتومات تو سشن ذخیره میکنه ؟

بعد از لاگین کاربر اگه remember me نداشته باشی تو session ذخیره میشه در غیر اینصورت تو cookie