'da çalışmaya başlamadan önce denetleyici eylemini gerçekleştirme Yii2
denetleyicisindeki bazı kodları çalıştırmaya çalışıyorum Modelin bir parametre olarak geçiş yapabilmesi için modelden behaviors
bölümüne erişebilmem için bazı kodları çalıştırmam gerekiyor yinelenen sorgular çalıştırmamak; ancak aynı zamanda action
'un çağrıldığını da öğrenmem gerekiyor, ancak fazla şansım yok.Davranış kodu Yii2
Ben beforeAction
kullanarak denedi ama bu beni yardımcı olmuyor yüzden, bu behaviours
kod çalıştırır SONRA koþulur görünüyor.
init
kullanmayı denedim, ancak action
bu noktada $this->action->id
aracılığıyla kullanılamaz.
Bazı örnek kodu:
class MyController extends Controller {
public $defaultAction = 'view';
public function init() {
// $this->action not available in here
}
public function beforeAction() {
// This is of no use as this runs *after* the 'behaviors' method
}
public function behaviors() {
return [
'access' => [
'class' => NewAccessControl::className(),
'only' => ['view','example1','example2'],
'rules' => [
[
'allow' => false,
'authManager' => [
'model' => $this->model,
'other_param' => $foo,
'other_param' => $bar,
],
'actions' => ['view'],
],
// everything else is denied
],
],
];
}
public function viewAction() {
// This is how it is currently instantiated, but we want to instantiate *before* the behavior code is run so we don't need to instantiate it twice
// but to be able to do that we need to know the action so we can pass in the correct scenario
$model = new exampleModel(['scenario' => 'view']);
}
}
authManager
sadece AccessRule
sınıfının bir uzantısı içinde bir member variable
başvurusudur.
Yine de yapabilir miyim?
numaralı telefonu arayın * AccessControll * 'matchCallback' veya bazı özel davranışlardan bahsediyor musunuz? – Tony
@Tony Bu soruyu yayınladığımdan beri, işlerimi nasıl değiştirdiğimi değiştirdim, ancak yine de modeli 'davranışlar' bölümündeki koddan erişebilmem gerekiyor, bu yüzden modeli bir parametre olarak iletebilir ve yinelenen çalışmayı önleyebilirim sorguları. Sorumu güncelleyeceğim. – Brett