29 KiB
ã¢ãã«
ã¢ãã«ã¯ MVC ã¢ãŒããã¯ãã£ã®äžéšãæããã®ã§ãã ããã¯ãããžãã¹ã®ããŒã¿ãèŠåãããžãã¯ã衚çŸãããªããžã§ã¯ãã§ãã
ã¢ãã«ã»ã¯ã©ã¹ã¯ãyii\base\Model ãŸãã¯ãã®åã¯ã©ã¹ãæ¡åŒµããããšã«ãã£ãŠäœæããããšãåºæ¥ãŸãã åºåºã¯ã©ã¹ yii\base\Model ã¯ã次ã®ãããªæ°å€ãã®æçšãªæ©èœããµããŒãããŠããŸãã
- 屿§: ããžãã¹ã»ããŒã¿ã衚çŸããŸããéåžžã®ãªããžã§ã¯ãã»ããããã£ãé åèŠçŽ ã®ããã«ã㊠ã¢ã¯ã»ã¹ããããšãåºæ¥ãŸãã
- 屿§ã®ã©ãã«: 屿§ã®è¡šç€ºã©ãã«ãæå®ããŸãã
- äžæ¬ä»£å ¥: äžåã®ã¹ãããã§è€æ°ã®å±æ§ã«ããŒã¿ãæå ¥ããããšããµããŒãããŠããŸãã
- æ€èšŒèŠå: 宣èšãããæ€èšŒèŠåã«åºããŠå ¥åãããããŒã¿ã®æå¹æ§ãä¿èšŒããŸãã
- ããŒã¿ã®ãšã¯ã¹ããŒã: ã«ã¹ã¿ãã€ãºå¯èœãªåœ¢åŒã§ã¢ãã«ã»ããŒã¿ãé åã«ãšã¯ã¹ããŒãããããšãåºæ¥ãŸãã
Model
ã¯ã©ã¹ã¯ãã¢ã¯ãã£ãã»ã¬ã³ãŒã ã®ãããªãæŽã«é«åºŠãªã¢ãã«ã®åºåºã¯ã©ã¹ã§ããããŸãã
ãããã®é«åºŠãªã¢ãã«ã«ã€ããŠã®è©³çްã¯ãé¢é£ããããã¥ã¡ã³ããåç
§ããŠãã ããã
Info: ããªãã®ã¢ãã«ã»ã¯ã©ã¹ã®åºåºã¯ã©ã¹ãšã㊠yii\base\Model ã䜿ãããšãèŠæ±ãããŠããèš³ã§ã¯ãããŸããã ããããªãããYii ã®ã³ã³ããŒãã³ãã®å€ãã yii\base\Model ããµããŒãããããã«äœãããŠããŸãã®ã§ãé垞㯠yii\base\Model ãã¢ãã«ã®åºåºã¯ã©ã¹ãšããŠæšå¥šãããŸãã
屿§
ã¢ãã«ã¯ããžãã¹ã»ããŒã¿ã 屿§ ã®åœ¢åŒã§è¡šçŸããŸããå šãŠã®å±æ§ã¯ãããããããªãã¯ã«ã¢ã¯ã»ã¹å¯èœãªã¢ãã«ã®ããããã£ãšåæ§ãªãã®ã§ãã yii\base\Model::attributes() ã¡ãœããããã¢ãã«ãã©ã®ãããªå±æ§ãæã€ããæå®ããŸãã
屿§ã«å¯ŸããŠã¯ãéåžžã®ãªããžã§ã¯ãã»ããããã£ã«ã¢ã¯ã»ã¹ããã®ãšåãããã«ããŠãã¢ã¯ã»ã¹ããããšãåºæ¥ãŸãã
$model = new \app\models\ContactForm;
// "name" 㯠ContactForm ã®å±æ§
$model->name = 'example';
echo $model->name;
ãŸããé åã®èŠçŽ ã«ã¢ã¯ã»ã¹ããããããŠã屿§ã«ã¢ã¯ã»ã¹ããããšãåºæ¥ãŸãã ããã¯ãyii\base\Model ã ArrayAccess ã€ã³ã¿ãã§ã€ã¹ ãš Traversable ã€ã³ã¿ãã§ã€ã¹ ããµããŒãããŠããæ©æµã§ãã
$model = new \app\models\ContactForm;
// é
åèŠçŽ ã®ããã«å±æ§ã«ã¢ã¯ã»ã¹ãã
$model['name'] = 'example';
echo $model['name'];
// ã¢ãã«ã¯ foreach ã§äžèº«ããã©ãããšãåºæ¥ã
foreach ($model as $name => $value) {
echo "$name: $value\n";
}
屿§ãå®çŸ©ãã
ããªãã®ã¢ãã«ã yii\base\Model ãçŽæ¥ã«æ¡åŒµãããã®ã§ããå Žåãããã©ã«ãã§ã¯ãå
šãŠã® static ã§ãªã public 㪠ã¡ã³ã倿°ã¯å±æ§ãšãªããŸãã
äŸãã°ã次ã«ç€ºã ContactForm
ã¢ãã«ã¯åã€ã®å±æ§ãããªãã¡ãname
ãemail
ãsubject
ããããŠãbody
ãæã¡ãŸãã
ãã® ContactForm
ã¢ãã«ã¯ãHTML ãã©ãŒã ããåãåãå
¥åããŒã¿ã衚çŸããããã«äœ¿ãããŸãã
namespace app\models;
use yii\base\Model;
class ContactForm extends Model
{
public $name;
public $email;
public $subject;
public $body;
}
yii\base\Model::attributes() ããªãŒããŒã©ã€ãããŠã屿§ãç°ãªãæ¹æ³ã§å®çŸ©ããããšãåºæ¥ãŸãã
ãã®ã¡ãœããã¯ã¢ãã«ãæã€å±æ§ã®ååãè¿ããªããŠã¯ãªããŸããã
äŸãã°ãyii\db\ActiveRecord ã¯ãé¢é£ä»ããããããŒã¿ããŒã¹ã»ããŒãã«ã®ã³ã©ã åã屿§ã®ååãšããŠè¿ãããšã«ãã£ãŠã屿§ãå®çŸ©ããŠããŸãã
ãã ãããããšåæã«ãå®çŸ©ããã屿§ã«å¯ŸããŠéåžžã®ãªããžã§ã¯ãã»ããããã£ãšåãããã«ã¢ã¯ã»ã¹ããããšãåºæ¥ãããã«ã
__get()
ã __set()
ãªã©ã®ããžãã¯ã»ã¡ãœããããªãŒããŒã©ã€ãããå¿
èŠããããããããªãããšã«æ³šæããŠãã ããã
屿§ã®ã©ãã«
屿§ã®å€ã衚瀺ããããå
¥åããŠããã£ãããããšãã«ã屿§ãšé¢é£ä»ããããã©ãã«ã衚瀺ããå¿
èŠãããããšããããããŸãã
äŸãã°ãfirstName
ãšããååã®å±æ§ãèãããšããå
¥åãã©ãŒã ããšã©ãŒã»ã¡ãã»ãŒãžã®ãããªç®æã§ãšã³ãã»ãŠãŒã¶ã«è¡šç€ºãããšãã¯ã
ãã£ãšãŠãŒã¶ã»ãã¬ã³ããªãŒãª First Name
ãšããã©ãã«ã衚瀺ããããšæãã§ãããã
yii\base\Model::getAttributeLabel() ãåŒã¶ããšã«ãã£ãŠå±æ§ã®ã©ãã«ãåŸãããšãåºæ¥ãŸããäŸãã°ã
$model = new \app\models\ContactForm;
// "Name" ã衚瀺ãã
echo $model->getAttributeLabel('name');
ããã©ã«ãã§ã¯ã屿§ã®ã©ãã«ã¯å±æ§ã®ååããèªåçã«çæãããŸãã
ã©ãã«ã®çæã¯ yii\base\Model::generateAttributeLabel() ãšããã¡ãœããã«ãã£ãŠè¡ãããŸãã
ãã®ã¡ãœããã¯ããã£ã¡ã«ã±ãŒã¹ã®å€æ°åãè€æ°ã®åèªã«åå²ããååèªã®æåã®æåã倧æåã«ããŸãã
äŸãã°ãusername
㯠Username
ãšãªããfirstName
㯠First Name
ãšãªããŸãã
èªåçã«çæãããã©ãã«ã䜿çšããããªãå Žåã¯ãyii\base\Model::attributeLabels() ããªãŒããŒã©ã€ãããŠã 屿§ã®ã©ãã«ãæç€ºçã«å®£èšããããšãåºæ¥ãŸããäŸãã°ã
namespace app\models;
use yii\base\Model;
class ContactForm extends Model
{
public $name;
public $email;
public $subject;
public $body;
public function attributeLabels()
{
return [
'name' => 'Your name',
'email' => 'Your email address',
'subject' => 'Subject',
'body' => 'Content',
];
}
}
è€æ°ã®èšèªããµããŒãããã¢ããªã±ãŒã·ã§ã³ã§ã¯ã屿§ã®ã©ãã«ã翻蚳ããããšæãã§ãããã ãããã以äžã®ããã«ãyii\base\Model::attributeLabels() ã®äžã§è¡ãããšãåºæ¥ãŸãã
public function attributeLabels()
{
return [
'name' => \Yii::t('app', 'Your name'),
'email' => \Yii::t('app', 'Your email address'),
'subject' => \Yii::t('app', 'Subject'),
'body' => \Yii::t('app', 'Content'),
];
}
æ¡ä»¶ã«åŸã£ãŠå±æ§ã®ã©ãã«ãå®çŸ©ããããšãåºæ¥ãŸãã äŸãã°ãã¢ãã«ã䜿çšããã ã·ããªãª ã«åºã¥ããŠãåã屿§ã«å¯ŸããŠéãã©ãã«ãè¿ãããšããšãåºæ¥ãŸãã
Info: å³å¯ã«èšãã°ã屿§ã®ã©ãã«ã¯ ãã¥ãŒ ã®äžéšãæããã®ã§ãã ãããããããŠãã®å Žåãã¢ãã«ã®äžã§ã©ãã«ã宣èšããæ¹ã䟿å©ãè¯ããçµæãšããŠã¯ãªãŒã³ã§åå©çšå¯èœãªã³ãŒãã«ãªããŸãã
ã·ããªãª
ã¢ãã«ã¯ããŸããŸã«ç°ãªã ã·ããªãª ã§äœ¿çšãããŸãã
äŸãã°ãUser
ã¢ãã«ã¯ãŠãŒã¶ã»ãã°ã€ã³ã®å
¥åãåéããããã«äœ¿ãããŸãããåæã«ããŠãŒã¶ç»é²ã®ç®çã§ã䜿ãããŸãã
ç°ãªãã·ããªãªã®äžã§ã¯ãã¢ãã«ã䜿çšããããžãã¹ã»ã«ãŒã«ãšããžãã¯ãç°ãªããã®ã«ãªãåŸãŸãã
äŸãã°ãemail
屿§ã¯ãŠãŒã¶ç»é²ã®éã«ã¯å¿
é ãšãããããç¥ããŸãããããã°ã€ã³ã®éã«ã¯ããã§ã¯ãªãã§ãããã
ã¢ãã«ã¯ yii\base\Model::scenario ããããã£ã䜿ã£ãŠãèªèº«ã䜿ãããŠããã·ããªãªã远跡ããŸãã
ããã©ã«ãã§ã¯ãã¢ãã«ã¯ default
ãšããäžã€ã®ã·ããªãªã ãããµããŒãããŸãã
次ã®ã³ãŒãã¯ãã¢ãã«ã®ã·ããªãªãèšå®ããäºã€ã®æ¹æ³ã瀺ããã®ã§ãã
// ã·ããªãªãããããã£ãšããŠèšå®ãã
$model = new User;
$model->scenario = User::SCENARIO_LOGIN;
// ã·ããªãªãèšå®æ
å ±ã§èšå®ãã
$model = new User(['scenario' => User::SCENARIO_LOGIN]);
ããã©ã«ãã§ã¯ãã¢ãã«ã«ãã£ãŠãµããŒããããã·ããªãªã¯ãã¢ãã«ã§å®£èšãããŠãã æ€èšŒèŠå ã«ãã£ãŠæ±ºå®ãããŸãã ããããæ¬¡ã®ããã«ãyii\base\Model::scenarios() ã¡ãœããããªãŒããŒã©ã€ãããŠã ãã®æ¯ãèããã«ã¹ã¿ãã€ãºããããšãåºæ¥ãŸãã
namespace app\models;
use yii\db\ActiveRecord;
class User extends ActiveRecord
{
const SCENARIO_LOGIN = 'login';
const SCENARIO_REGISTER = 'register';
public function scenarios()
{
return [
self::SCENARIO_LOGIN => ['username', 'password'],
self::SCENARIO_REGISTER => ['username', 'email', 'password'],
];
}
}
Info: äžèšã®äŸãšåŸç¶ã®äŸã§ã¯ãã¢ãã«ã»ã¯ã©ã¹ã¯ yii\db\ActiveRecord ãæ¡åŒµãããã®ãšãªã£ãŠããŸãã ãšããã®ã¯ãè€æ°ã®ã·ããªãªã䜿çšããããšã¯ãéåžžã¯ãã¢ã¯ãã£ãã»ã¬ã³ãŒã ã¯ã©ã¹ã§çºçããããã§ãã
scenarios()
ã¡ãœããã¯ãããŒãã·ããªãªã®ååã§ãããå€ã察å¿ãã ã¢ã¯ãã£ããªå±æ§ ã§ããé
åãè¿ããŸãã
ã¢ã¯ãã£ããªå±æ§ãšã¯ãäžæ¬ä»£å
¥ ããããšãåºæ¥ãŠãæ€èšŒ ã®å¯Ÿè±¡ã«ãªã屿§ã§ãã
äžèšã®äŸã§ã¯ãlogin
ã·ããªãªã«ãããŠã¯ username
ãš password
ã®å±æ§ãã¢ã¯ãã£ãã§ããã
äžæ¹ãregister
ã·ããªãªã«ãããŠã¯ãusername
ãš password
ã«å ã㊠email
ãã¢ã¯ãã£ãã§ãã
scenarios()
ã®ããã©ã«ãã®å®è£
ã¯ãæ€èšŒèŠåã®å®£èšã¡ãœããã§ãã yii\base\Model::rules() ã«çŸããå
šãŠã®ã·ããªãªãè¿ããã®ã§ãã
scenarios()
ããªãŒããŒã©ã€ããããšãã«ãããã©ã«ãã®ã·ããªãªã«å ããŠæ°ããã·ããªãªãå°å
¥ãããå Žåã¯ã
次ã®ãããªã³ãŒããæžããŸãã
namespace app\models;
use yii\db\ActiveRecord;
class User extends ActiveRecord
{
const SCENARIO_LOGIN = 'login';
const SCENARIO_REGISTER = 'register';
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios[self::SCENARIO_LOGIN] = ['username', 'password'];
$scenarios[self::SCENARIO_REGISTER] = ['username', 'email', 'password'];
return $scenarios;
}
}
ã·ããªãªã®æ©èœã¯ãäž»ãšããŠãæ€èšŒ ãš å±æ§ã®äžæ¬ä»£å ¥ ã«ãã£ãŠäœ¿çšãããŸãã ããããä»ã®ç®çã«äœ¿ãããšãå¯èœã§ããäŸãã°ãçŸåšã®ã·ããªãªã«åºã¥ããŠç°ãªã 屿§ã®ã©ãã« ã宣èšããããšãåºæ¥ãŸãã
æ€èšŒèŠå
ã¢ãã«ã®ããŒã¿ããšã³ãã»ãŠãŒã¶ããåãåã£ããšãã¯ãããŒã¿ãæ€èšŒããŠã
ãããäžå®ã®èŠå (æ€èšŒèŠåããããã¯ããããã ããžãã¹ã»ã«ãŒã«) ãæºãããŠããããšã確èªããªããã°ãªããŸããã
ContactForm
ã¢ãã«ãäŸã«æãããªããå
šãŠã®å±æ§ã空ã§ã¯ãªããemail
屿§ãæå¹ãªã¡ãŒã«ã»ã¢ãã¬ã¹ãå«ãã§ããããšã確èªãããã§ãããã
ããããã®å±æ§ã®å€ã察å¿ããããžãã¹ã»ã«ãŒã«ãæºãããŠããªããšãã¯ã
ãŠãŒã¶ããšã©ãŒãèšæ£ããã®ãå©ããé©åãªãšã©ãŒã»ã¡ãã»ãŒãžã衚瀺ãããªããã°ãªããŸããã
åä¿¡ããããŒã¿ãæ€èšŒããããã«ãyii\base\Model::validate() ãåŒã¶ããšãåºæ¥ãŸãã
ãã®ã¡ãœããã¯ãyii\base\Model::rules() ã§å®£èšãããæ€èšŒèŠåã䜿ã£ãŠã該åœãããã¹ãŠã®å±æ§ãæ€èšŒããŸãã
ãšã©ãŒãèŠã€ãããªããã°ãã¡ãœãã㯠true
ãè¿ããŸãã
ããã§ãªããã°ãyii\base\Model::errors ã«ãšã©ãŒãä¿åããŠãfalse
ãè¿ããŸããäŸãã°ã
$model = new \app\models\ContactForm;
// ã¢ãã«ã®å±æ§ã«ãŠãŒã¶ã®å
¥åã代å
¥ãã
$model->attributes = \Yii::$app->request->post('ContactForm');
if ($model->validate()) {
// ãã¹ãŠã®å
¥åå€ã¯æå¹ã§ãã
} else {
// æ€èšŒã倱æ: $errors ã¯ãšã©ãŒã»ã¡ãã»ãŒãžãå«ãé
å
$errors = $model->errors;
}
ã¢ãã«ã«é¢é£ä»ããããæ€èšŒèŠåã宣èšããããã«ã¯ãyii\base\Model::rules() ã¡ãœããããªãŒããŒã©ã€ãããŠã
ã¢ãã«ã®å±æ§ãæºããã¹ãèŠåãè¿ãããã«ããŸãã
次ã®äŸã¯ãContactForm
ã¢ãã«ã®ããã«å®£èšãããæ€èšŒèŠåã瀺ããŸãã
public function rules()
{
return [
// nameãemailãsubjectãbody ã®å±æ§ãå¿
é
[['name', 'email', 'subject', 'body'], 'required'],
// email 屿§ã¯ãæå¹ãªã¡ãŒã«ã»ã¢ãã¬ã¹ã§ãªããã°ãªããªã
['email', 'email'],
];
}
äžã€ã®èŠåã¯ãäžã€ãŸãã¯è€æ°ã®å±æ§ãæ€èšŒããããã«äœ¿ãããšãåºæ¥ãŸãã ãŸããäžã€ã®å±æ§ã¯ãäžã€ãŸãã¯è€æ°ã®èŠåã«ãã£ãŠæ€èšŒããããšãåºæ¥ãŸãã æ€èšŒèŠåãã©ã®ããã«å®£èšãããã«ã€ããŠã®è©³çŽ°ã¯ å ¥åãæ€èšŒãã ã®ã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
æãšããŠãç¹å®ã® ã·ããªãª ã«ã®ã¿é©çšãããèŠåãå¿
èŠã«ãªãã§ãããã
ãã®ããã«ã¯ãäžèšã®ããã«ãèŠåã« on
ããããã£ãæå®ããããšãåºæ¥ãŸãã
public function rules()
{
return [
// "register" ã·ããªãªã§ã¯ãusernameãemailãpassword ã®ãã¹ãŠãå¿
é
[['username', 'email', 'password'], 'required', 'on' => self::SCENARIO_REGISTER],
// "login" ã·ããªãªã§ã¯ãusername ãš password ãå¿
é
[['username', 'password'], 'required', 'on' => self::SCENARIO_LOGIN],
];
}
on
ããããã£ãæå®ããªãå Žåã¯ããã®èŠåã¯å
šãŠã®ã·ããªãªã«é©çšãããããšã«ãªããŸãã
çŸåšã® yii\base\Model::scenario ã«é©çšå¯èœãªèŠå㯠ã¢ã¯ãã£ããªèŠå ãšåŒã°ããŸãã
屿§ãæ€èšŒãããã®ã¯ãããã scenarios()
ã®äžã§ã¢ã¯ãã£ããªå±æ§ã§ãããšå®£èšãããŠããããã€ã
ãã®å±æ§ã rules()
ã®äžã§å®£èšãããŠããäžã€ãŸãã¯è€æ°ã®ã¢ã¯ãã£ããªèŠåãšçµã³ä»ããããŠããå Žåã§ããããŸãããã®ãããªå Žåã ãã§ãã
äžæ¬ä»£å ¥
äžæ¬ä»£å
¥ã¯ãäžè¡ã®ã³ãŒããæžãã ãã§ããŠãŒã¶ã®å
¥åããè€æ°ã®ããŒã¿ãã¢ãã«ã«æå
¥ã§ãã䟿å©ãªæ¹æ³ã§ãã
äžæ¬ä»£å
¥ã¯ãå
¥åãããããŒã¿ã yii\base\Model::$attributes ããããã£ã«çŽæ¥ã«ä»£å
¥ããããšã«ãã£ãŠãã¢ãã«ã®å±æ§ã«ããŒã¿ãæå
¥ããŸãã
次ã®äºã€ã®ã³ãŒãæçã¯ç䟡ã§ãããã©ã¡ãããšã³ãã»ãŠãŒã¶ããéä¿¡ããããã©ãŒã ã®ããŒã¿ã
ContactForm
ã¢ãã«ã®å±æ§ã«å²ãåœãŠãããšãããã®ã§ãã
æããã«ãäžæ¬ä»£å
¥ã䜿ãåè
ã®æ¹ããåŸè
ãããæå¿«ã§ééããèµ·ããã«ããã§ãããã
$model = new \app\models\ContactForm;
$model->attributes = \Yii::$app->request->post('ContactForm');
$model = new \app\models\ContactForm;
$data = \Yii::$app->request->post('ContactForm', []);
$model->name = isset($data['name']) ? $data['name'] : null;
$model->email = isset($data['email']) ? $data['email'] : null;
$model->subject = isset($data['subject']) ? $data['subject'] : null;
$model->body = isset($data['body']) ? $data['body'] : null;
å®å šãªå±æ§
äžæ¬ä»£å
¥ã¯ããããã å®å
šãªå±æ§ãããªãã¡ãyii\base\Model::scenarios() ã«ãããŠã¢ãã«ã®çŸåšã®
yii\base\Model::scenario ã®ããã«ãªã¹ããããŠãã屿§ã«å¯ŸããŠã®ã¿é©çšãããŸãã
äŸãã°ãUser
ã¢ãã«ã次ã®ãããªã·ããªãªå®£èšãæã£ãŠããå Žåã«ãããŠãçŸåšã®ã·ããªãªã login
ã§ãããšãã¯ã
username
ãš password
ã®ã¿ãäžæ¬ä»£å
¥ãå¯èœã§ãã
ãã®ä»ã®å±æ§ã¯ãã£ããè§ŠããããŸããã
public function scenarios()
{
return [
self::SCENARIO_LOGIN => ['username', 'password'],
self::SCENARIO_REGISTER => ['username', 'email', 'password'],
];
}
Info: äžæ¬ä»£å ¥ãå®å šãªå±æ§ã«å¯ŸããŠã®ã¿é©çšãããã®ã¯ããšã³ãã»ãŠãŒã¶ã®å ¥åããŒã¿ãã©ã®å±æ§ãä¿®æ£ããããšãåºæ¥ããã ãšããããšãå¶åŸ¡ããå¿ èŠãããããã§ãã äŸãã°ã
User
ã¢ãã«ã«ããŠãŒã¶ã«å²ãåœãŠãããæš©éãæ±ºå®ããpermission
ãšãã屿§ãããå Žåã ãã®å±æ§ãä¿®æ£ã§ããã®ã¯ã管çè ãããã¯ãšã³ãã®ã€ã³ã¿ãã§ã€ã¹ãéããŠããæã ãã«å¶éãããã§ãããã
yii\base\Model::scenarios() ã®ããã©ã«ãã®å®è£ 㯠yii\base\Model::rules() ã«çŸãããå šãŠã®ã·ããªãªãšå±æ§ãè¿ããã®ã§ãã åŸã£ãŠããã®ã¡ãœããããªãŒããŒã©ã€ãããªãå Žåã¯ãã¢ã¯ãã£ããªæ€èšŒèŠåã®ã©ããã«åºçŸããéãã ãã®å±æ§ã¯å®å šã§ããããšããããšã«ãªããŸãã
ãã®ãããå®éã«æ€èšŒããããšãªã屿§ãå®å
šã§ãããšå®£èšã§ããããã«ã
safe
ãšãããšã€ãªã¢ã¹ãäžããããç¹å¥ãªããªããŒã¿ãæäŸãããŠããŸãã
äŸãã°ã次ã®èŠå㯠title
ãš description
ã®äž¡æ¹ãå®å
šãªå±æ§ã§ãããšå®£èšããŠããŸãã
public function rules()
{
return [
[['title', 'description'], 'safe'],
];
}
å®å šã§ãªã屿§
äžèšã§èª¬æããããã«ãyii\base\Model::scenarios() ã¡ãœããã¯äºã€ã®ç®çãæã£ãŠããŸãã
ããªãã¡ãã©ã®å±æ§ãæ€èšŒãããã¹ãããæ±ºããããšãšãã©ã®å±æ§ãå®å
šã§ããããæ±ºããããšã§ãã
ãã£ãã«ãªãå ŽåãšããŠã屿§ãæ€èšŒããå¿
èŠã¯ããããå®å
šã§ãããšããå°ã¯ä»ããããªãããšããããšããããŸãã
ããããæã¯ãäžã®äŸã® secret
屿§ã®ããã«ãååã®åã«æå笊 !
ãä»ã㊠scenarios()
ã®äžã§å®£èšããããšãåºæ¥ãŸãã
public function scenarios()
{
return [
self::SCENARIO_LOGIN => ['username', 'password', '!secret'],
];
}
ãã®ã¢ãã«ã login
ã·ããªãªã«ããå Žåãäžã€ã®å±æ§ã¯å
šãŠæ€èšŒãããŸãã
ããããusername
ãš password
ã®å±æ§ã ããäžæ¬ä»£å
¥ãå¯èœã§ãã
secret
屿§ã«å
¥åå€ãå²ãåœãŠãããã«ã¯ãäžèšã®ããã«æç€ºçã«ä»£å
¥ãå®è¡ããå¿
èŠããããŸãã
$model->secret = $secret;
åãäºã rules()
ã¡ãœããã®äžã§ãåºæ¥ãŸãã
public function rules()
{
return [
[['username', 'password', '!secret'], 'required', 'on' => 'login']
];
}
ãã®å Žåãusername
ãpassword
ãã㊠secret
ã®å±æ§ãå¿
é é
ç®ãšãããŸãããsecret
ã¯æç€ºçã«ä»£å
¥ãããå¿
èŠããããŸãã
ããŒã¿ã®ãšã¯ã¹ããŒã
ã¢ãã«ãä»ã®åœ¢åŒã«ãšã¯ã¹ããŒãããå¿ èŠãçããããšã¯ãããããŸããäŸãã°ãã¢ãã«ã®ã³ã¬ã¯ã·ã§ã³ã JSON ã Excel 圢åŒã«å€æãããå Žåãããã§ãããã ãã®ãšã¯ã¹ããŒãã®ããã»ã¹ã¯äºã€ã®ç¬ç«ããã¹ãããã«åå²ããããšãåºæ¥ãŸãã
- ã¢ãã«ãé åã«å€æããã
- é åãç®çã®åœ¢åŒã«å€æãããã
ããªãã¯æåã®ã¹ãããã ãã«æ³šåããããšãåºæ¥ãŸãã ãšèšãã®ã¯ã第äºã®ã¹ãããã¯æ±çšçãªããŒã¿ã»ãã©ãŒããã¿ãäŸãã° yii\web\JsonResponseFormatter ã«ãã£ãŠéæã§ããããã§ãã
ã¢ãã«ãé åã«å€æããæãç°¡åãªæ¹æ³ã¯ãyii\base\Model::$attributes ããããã£ã䜿ãããšã§ãã äŸãã°ã
$post = \app\models\Post::findOne(100);
$array = $post->attributes;
ããã©ã«ãã§ã¯ãyii\base\Model::$attributes ããããã£ã¯ yii\base\Model::attributes() ã§å®£èšãããŠãã å šãŠ ã®å±æ§ã®å€ãè¿ããŸãã
ã¢ãã«ãé åã«å€æããããã®ãã£ãšæè»ã§åŒ·åãªæ¹æ³ã¯ãyii\base\Model::toArray() ã¡ãœããã䜿ãããšã§ãã ãã®ã¡ãœããã®ããã©ã«ãã®åäœã¯ yii\base\Model::$attributes ã®ãããšåããã®ã§ãã ããããªããããã®ã¡ãœããã䜿ããšãã©ã®ããŒã¿é ç® (ãã£ãŒã«ã ãšåŒã°ããŸã) ãçµæã®é åã«å ¥ãããããããŠããã®é ç®ã«ã©ã®ãããªæžåŒãé©çšããããéžã¶ããšãåºæ¥ãŸãã å®éãã¬ã¹ãã³ã¹åœ¢åŒã®èšå® ã§èª¬æãããŠããããã«ãRESTful ãŠã§ããµãŒãã¹ã®éçºã«ãããŠã¯ã ãããã¢ãã«ããšã¯ã¹ããŒãããããã©ã«ãã®æ¹æ³ãšãªã£ãŠããŸãã
ãã£ãŒã«ã
ãã£ãŒã«ããšã¯ãåã«ãã¢ãã«ã® yii\base\Model::toArray() ã¡ãœãããåŒã¶ããšã«ãã£ãŠååŸãããé åã«å«ãŸããã ååä»ãã®èŠçŽ ã®ããšã§ãã
ããã©ã«ãã§ã¯ããã£ãŒã«ãã®ååã¯å±æ§ã®ååãšçãããã®ã«ãªããŸãã
ãããããã®ããã©ã«ãã®åäœã¯ãyii\base\Model::fields() ããã³/ãŸã㯠yii\base\Model::extraFields() ã¡ãœããããªãŒããŒã©ã€ãããŠã倿Žããããšãåºæ¥ãŸãã
ã©ã¡ãã®ã¡ãœãããããã£ãŒã«ãå®çŸ©ã®ãªã¹ããè¿ããã®ã§ãã
fields()
ã«ãã£ãŠå®çŸ©ããããã£ãŒã«ãã¯ãããã©ã«ãã»ãã£ãŒã«ãã§ããããªãã¡ãtoArray()
ã¯ããã©ã«ãã§ãããã®ãã£ãŒã«ããè¿ãããšããããšãæå³ããŸãã
extraFields()
ã¡ãœããã¯ã$expand
ãã©ã¡ãŒã¿ã«ãã£ãŠæå®ããéãã«ãã㊠toArray()
ã«ãã£ãŠè¿ãããã远å ã®ãã£ãŒã«ããå®çŸ©ãããã®ã§ãã
äŸãšããŠã次ã®ã³ãŒãã¯ãfields()
ã§å®çŸ©ãããå
šãŠã®ãã£ãŒã«ããšã(extraFields()
ã§å®çŸ©ãããŠããã°)
prettyName
ãš fullAddress
ãã£ãŒã«ããè¿ããã®ã§ãã
$array = $model->toArray([], ['prettyName', 'fullAddress']);
fields()
ããªãŒããŒã©ã€ãããŠããã£ãŒã«ãã远å ãåé€ããªããŒã ãåå®çŸ©ããããšãåºæ¥ãŸãã
fields()
ã®è¿ãå€ã¯é
åã§ãªããã°ãªããŸãããé
åã®ããŒã¯ãã£ãŒã«ãåã§ãããé
åã®å€ã¯å¯Ÿå¿ãããã£ãŒã«ãå®çŸ©ã§ãã
ãã£ãŒã«ãã®å®çŸ©ã«ã¯ãããããã£/屿§ ã®ååãããŸãã¯ã察å¿ãããã£ãŒã«ãã®å€ãè¿ãç¡å颿°ã䜿ãããšãåºæ¥ãŸãã
ãã£ãŒã«ãåããããå®çŸ©ãã屿§åãšåäžã§ãããšããç¹æ®ãªå Žåã«ãããŠã¯ãé
åã®ããŒãçç¥ããããšãåºæ¥ãŸãã
äŸãã°ã
// æç€ºçã«å
šãŠã®ãã£ãŒã«ãããªã¹ãããæ¹æ³ã(API ã®åŸæ¹äºææ§ãä¿ã€ããã«) DB ããŒãã«ã
// ã¢ãã«å±æ§ã®å€æŽããã£ãŒã«ãã®å€æŽãåŒãèµ·ãããªãããšãä¿èšŒãããå Žåã«é©ããŠããã
public function fields()
{
return [
// ãã£ãŒã«ãåã屿§åãšåã
'id',
// ãã£ãŒã«ãå㯠"email"ã察å¿ãã屿§å㯠"email_address"
'email' => 'email_address',
// ãã£ãŒã«ãå㯠"name"ããã®å€ã¯ PHP ã³ãŒã«ããã¯ã§å®çŸ©
'name' => function () {
return $this->first_name . ' ' . $this->last_name;
},
];
}
// ããã€ãã®ãã£ãŒã«ããé€å€ããæ¹æ³ã芪ã®å®è£
ãç¶æ¿ãã€ã€ãå
¬éãã¹ãã§ãªããã£ãŒã«ãã
// é€å€ããããšãã«æé©ã
public function fields()
{
$fields = parent::fields();
// å
¬éãã¹ãã§ãªãæ
å ±ãå«ããã£ãŒã«ããåé€ãã
unset($fields['auth_key'], $fields['password_hash'], $fields['password_reset_token']);
return $fields;
}
Warning: ããã©ã«ãã§ã¯ã¢ãã«ã®å šãŠã®å±æ§ããšã¯ã¹ããŒããããé åã«å«ãŸãããããããŒã¿ã粟æ»ããŠã å ¬éãã¹ãã§ãªãæ å ±ãå«ãŸããŠããªãããšã確èªããªããã°ãªããŸããã ããããæ å ±ãããå Žåã¯ã
fields()
ããªãŒããŒã©ã€ãããŠãé€å€ããªããã°ãªããŸããã äžèšã®äŸã§ã¯ãauth_key
ãpassword_hash
ããã³password_reset_token
ãé€å€ããŠããŸãã
ãã¹ãã»ãã©ã¯ãã£ã¹
ã¢ãã«ã¯ãããžãã¹ã®ããŒã¿ãèŠåãããžãã¯ã衚ããäžå¿çãªãªããžã§ã¯ãã§ãã ã¢ãã«ã¯ããããŠããããŸããŸãªå Žæã§åå©çšãããå¿ èŠããããŸãã è¯ãèšèšãããã¢ããªã±ãŒã·ã§ã³ã§ã¯ãéåžžãã¢ãã«ã¯ ã³ã³ãããŒã© ãããã¯ããã«å€ªã£ããã®ã«ãªããŸãã
èŠçŽãããšãã¢ãã«ã¯ã
- ããžãã¹ã»ããŒã¿ã衚çŸãã屿§ãå«ãããšãåºæ¥ãŸãã
- ããŒã¿ã®æå¹æ§ãšæŽåæ§ãä¿èšŒããæ€èšŒèŠåãå«ãããšãåºæ¥ãŸãã
- ããžãã¹ã»ããžãã¯ãå®è£ ããã¡ãœãããå«ãããšãåºæ¥ãŸãã
- ãªã¯ãšã¹ããã»ãã·ã§ã³ããŸãã¯ä»ã®ç°å¢ããŒã¿ã«çŽæ¥ã¢ã¯ã»ã¹ããã¹ãã§ã¯ãããŸããã ãããã®ããŒã¿ã¯ãã³ã³ãããŒã© ã«ãã£ãŠã¢ãã«ã«æ³šå ¥ãããã¹ãã§ãã
- HTML ãåã蟌ããªã©ã®è¡šç€ºçšã®ã³ãŒãã¯é¿ããã¹ãã§ã - 衚瀺㯠ãã¥ãŒ ã§è¡ãæ¹ãè¯ãã§ãã
- ããŸãã«å€ãã® ã·ããªãª ãäžã€ã®ã¢ãã«ã§æã€ããšã¯é¿ããŸãããã
å€§èŠæš¡ã§è€éãªã·ã¹ãã ãéçºãããšãã«ã¯ããããŠããäžèšã®æåŸã«ãããæšå¥šäºé ãèæ ®ããã®ãè¯ãã§ãããã ããããã·ã¹ãã ã§ã¯ãã¢ãã«ã¯æ°å€ãã®å Žæã§äœ¿çšãããããã«åŸã£ãŠãæ°å€ãã®èŠåã»ãããããžãã¹ã»ããžãã¯ãå«ãããã éåžžã«å€ªã£ããã®ã«ãªãåŸãŸãã ã³ãŒãã®äžã¶æã«è§Šããã ãã§æ°ã¶æã®éã£ãå Žæã«åœ±é¿ãåã¶ãããã€ãã«ã¯ãã¢ãã«ã®ã³ãŒãã®ä¿å®ãæªå€¢ã«ãªã£ãŠããŸãããšããããããŸãã ã¢ãã«ã®ã³ãŒãã®ä¿å®æ§ãé«ããããã«ã¯ã以äžã®æŠç¥ããšãããšãåºæ¥ãŸãã
- ç°ãªã ã¢ããªã±ãŒã·ã§ã³ ãŸã㯠ã¢ãžã¥ãŒã« ã«ãã£ãŠå ±æãããäžé£ã®åºåºã¢ãã«ã»ã¯ã©ã¹ãå®çŸ©ããŸãã ãããã®ã¢ãã«ã»ã¯ã©ã¹ã¯ããã¹ãŠã§å ±éã«äœ¿çšãããæå°éã®èŠåã»ãããšããžãã¯ã®ã¿ãå«ãã¹ãã§ãã
- ã¢ãã«ã䜿çšããããããã® ã¢ããªã±ãŒã·ã§ã³ ãŸã㯠ã¢ãžã¥ãŒã« ã«ãããŠã 察å¿ããåºåºã¢ãã«ã»ã¯ã©ã¹ããæ¡åŒµããå ·äœçãªã¢ãã«ã»ã¯ã©ã¹ãå®çŸ©ããŸãã ãã®å ·äœçãªã¢ãã«ã»ã¯ã©ã¹ãããã®ã¢ããªã±ãŒã·ã§ã³ãã¢ãžã¥ãŒã«ã«åºæã®èŠåãããžãã¯ãå«ãã¹ãã§ãã
äŸãã°ãã¢ããã³ã¹ãã»ãããžã§ã¯ãã»ãã³ãã¬ãŒã ã®äžã§ãåºåºã¢ãã«ã»ã¯ã©ã¹ common\models\Post
ãå®çŸ©ããããšãåºæ¥ãŸãã
次ã«ãããã³ããšã³ãã»ã¢ããªã±ãŒã·ã§ã³ã«ãããŠã¯ãcommon\models\Post
ããæ¡åŒµããå
·äœçãªã¢ãã«ã»ã¯ã©ã¹
frontend\models\Post
ãå®çŸ©ããŠäœ¿ããŸãã
ãŸããããã¯ãšã³ãã»ã¢ããªã±ãŒã·ã§ã³ã«ãããŠããåæ§ã«ãbackend\models\Post
ãå®çŸ©ããŸãã
ãã®æŠç¥ãåããšãfrontend\models\Post
ã®äžã®ã³ãŒãã¯ããã³ããšã³ãã»ã¢ããªã±ãŒã·ã§ã³åºæã®ãã®ã§ãããšä¿èšŒããããšãåºæ¥ãŸãã
ãããŠãããã³ããšã³ãã®ã³ãŒãã«ã©ã®ãããªå€æŽãå ããŠããããã¯ãšã³ãã»ã¢ããªã±ãŒã·ã§ã³ãå£ããããããªããšå¿é
ããå¿
èŠããªããªããŸãã