


Framework de développement PHP Tutoriel Yii Framework (8) Utilisation de FormModel
Jan 21, 2017 am 09:54 AMGrace aux études précédentes, nous avons compris les composants de base des applications Web Yii et pouvons également écrire des applications simples comme le jeu de devinettes de mots du Pendu. Dans le premier exemple de tutoriel concis de développement de Yii Framework (1) la première application Hello World, nous avons présenté le modèle MVC adopté par l'application Web Yii, et avons également expliqué que le but de ce tutoriel est à travers différentes perspectives (principalement à travers le développement d'applications Windows C, point de vue du programmeur C#) aide les programmeurs d'applications de bureau Windows ou ASP.Net à ma?triser rapidement le cadre d'application PHP Yii Framework.
Plus t?t, nous avons introduit la création d'une vue (formulaire d'affichage de page) via CHtml et la gestion des événements de soumission des utilisateurs via CController. Par analogie avec les applications de bureau Windows ou ASP.Net, la vue intermédiaire Yii (formulaire HTML) est similaire à WinForm. ou la page Asp.Net. Classe de contr?le Controller est similaire à la classe de traitement d'événements (Code-Behind) des applications de bureau Windows ou Asp.Net. La différence est que les applications de bureau Asp.Net et Windows peuvent définir des ID pour chaque composant de l'interface utilisateur, tels que des zones de texte et des boutons, puis ajouter un traitement d'événements pour différents composants de l'interface utilisateur. Il n'existe aucun mécanisme correspondant permettant aux applications PHP ou aux applications Yii de définir un identifiant pour les composants d'interface utilisateur définis dans le formulaire HTML et de définir la gestion des événements pour les composants d'interface utilisateur. Cependant, le framework Yii fournit CFormModel pour prendre en charge des fonctions similaires, via CFormModel, des variables peuvent être définies pour les widgets d'interface utilisateur dans le formulaire HTML, et ces variables sont accessibles dans sa classe de contr?le Controller. Chaque vue Yii (formulaire) fournit généralement un "bouton de soumission". L'utilisateur clique sur ce "bouton de soumission" pour déclencher la méthode actionXXX correspondant à l'objet CController. Dans la méthode actionXXX, les composants de l'interface utilisateur du formulaire HTML sont accessibles via CFormModel. . valeur.
Comme mentionné dans le tutoriel précédent, le modèle dans Yii est une instance de CModel ou de sa sous-classe. Les modèles sont utilisés pour gérer les données et la logique métier associée.
Yii implémente deux types de modèles?: le modèle de formulaire et l'Active Record. Les deux héritent de la même classe de base CModel.
Les modèles de formulaire sont des instances de CFormModel. Le modèle de formulaire est utilisé pour contenir les données obtenues à partir de la saisie de l'utilisateur. Ces données sont souvent acquises, utilisées, puis supprimées. Par exemple, dans une page de connexion, nous pouvons utiliser le modèle de formulaire pour représenter les informations de nom d'utilisateur et de mot de passe fournies par l'utilisateur final. Pour plus de détails, veuillez vous référer au formulaire d'utilisation. Cet article présente l'utilisation de CFormModel.
Active Record (AR) est un modèle de conception utilisé pour résumer l'accès à la base de données via un style orienté objet. Chaque objet AR est une instance de CActiveRecord ou de l'une de ses sous-classes. Représente une ligne dans la table de données. Les champs de la ligne correspondent aux propriétés de l'objet AR. Pour plus de détails sur AR, veuillez lire Active Record. Nous le présenterons plus tard lorsque nous présenterons l'utilisation des bases de données.
Cet article utilise une interface de connexion simple pour présenter l'utilisation de FormModel. Téléchargez cet exemple.
1. Définissez la classe de modèle
Ci-dessous, nous créons une classe de modèle LoginForm (protected/models/LoginForm.php) pour collecter les entrées de l'utilisateur dans une page de connexion. étant donné que les informations de connexion ne sont utilisées que pour authentifier l'utilisateur et n'ont pas besoin d'être enregistrées, nous créons LoginForm comme modèle de formulaire.
class LoginForm extends CFormModel { public $username; public $password; public $rememberMe=false; }
2. Déclarer les règles de validation
Une fois que l'utilisateur soumet sa saisie et que le modèle est rempli, nous devons nous assurer que la saisie de l'utilisateur est valide avant utilisation. Ceci est réalisé en validant la saisie de l'utilisateur par rapport à une série de règles. Nous spécifions ces règles de validation dans la méthode Rules(), qui doit renvoyer un tableau de configurations de règles.
class LoginForm extends CFormModel { public $username; public $password; public $rememberMe=false; private $_identity; public function rules() { return array( array('username, password', 'required'), array('rememberMe', 'boolean'), array('password', 'authenticate'), ); } public function authenticate($attribute,$params) { $this->_identity=new UserIdentity($this->username, $this->password); if(!$this->_identity->authenticate()) $this->addError('password','錯誤的用戶名或密碼。'); } }
Le code ci-dessus précise?: le nom d'utilisateur et le mot de passe sont requis, le mot de passe doit être authentifié et RememberMe doit être une valeur booléenne. Chaque règle renvoyée par
rules() doit être au format suivant?:
array('AttributeList', 'Validator', 'on'=>'ScenarioList', ...附加選項)
où AttributeList (liste d'attributs) est le caractère de la liste d'attributs qui doit être vérifié par cette règle Une cha?ne avec chaque nom d'attribut séparé par des virgules ; Validator (validator) spécifie le type de validation à effectuer ; le paramètre on est facultatif et spécifie une liste de scénarios auxquels cette règle doit être appliquée ; tableau de paires nom-valeur, valeur de propriété utilisée pour initialiser le validateur correspondant.
Il existe trois fa?ons de spécifier un validateur dans une règle de validation. Premièrement, Validator peut être le nom d'une méthode dans la classe modèle, comme authentifier dans l'exemple ci-dessus. La méthode de vérification doit être de la structure suivante?:
/** * @param string 所要驗證的特性的名字 * @param array 驗證規(guī)則中指定的選項 */ public function ValidatorName($attribute,$params) { ... }
第二,Validator 可以是一個驗證器類的名字,當(dāng)此規(guī)則被應(yīng)用時, 一個驗證器類的實例將被創(chuàng)建以執(zhí)行實際驗證。規(guī)則中的附加選項用于初始化實例的屬性值。 驗證器類必須繼 承自 CValidator。
第三,Validator 可以是一個預(yù)定義的驗證器類的別名。在上面的例子中, required 名字是 CRequiredValidator 的別名,它用于確保所驗證的特性值不為空。 下面是預(yù)定義的驗證器別名的完整列表:
boolean: CBooleanValidator 的別名, 確保特性有一個 CBooleanValidator::trueValue 或CBooleanValidator::falseValue 值。
captcha: CCaptchaValidator 的別名,確保特性值等于 CAPTCHA 中顯示的驗證碼。
compare: CCompareValidator 的別 名,確保特性等于另一個特性或常量。
email: CEmailValidator 的別名,確保特性是一個有效的Email地址。
default: CDefaultValueValidator 的別名,指定特性的默認(rèn)值。
exist: CExistValidator 的別名,確保特性值可以在指定表的列中 可以找到。
file: CFileValidator 的別名,確保特性含有一個上傳文件的名字。
filter: CFilterValidator 的別名,通 過一個過濾器改變此特性。
in: CRangeValidator 的別名,確保數(shù)據(jù)在一個預(yù)先指定的值的范圍之內(nèi)。
length: CStringValidator 的別名,確保數(shù)據(jù)的長度在一個指定的范圍之內(nèi)。
match: CRegularExpressionValidator 的別名,確保 數(shù)據(jù)可以匹配一個正則表達(dá)式。
numerical: CNumberValidator 的別名,確保數(shù)據(jù)是一個有效的數(shù)字。
required: CRequiredValidator 的別名,確保特性不為空。
type: CTypeValidator 的別名,確保特性是指定的數(shù)據(jù)類型。
unique: CUniqueValidator 的別名,確保數(shù)據(jù)在數(shù)據(jù)表的列中是唯一的。
url: CUrlValidator 的別名,確保數(shù)據(jù)是一個有效的 URL 。
下面我們列出了幾個只用這些預(yù)定義驗證器的示例:
// 用戶名為必填項 array('username', 'required'), // 用戶名必須在 3 到 12 個字符之間 array('username', 'length', 'min'=>3, 'max'=>12), // 在注冊場景中,密碼password必須和password2一致。 array('password', 'compare', 'compareAttribute'=>'password2', 'on'=>'register'), // 在登錄場景中,密碼必須接受驗證。 array('password', 'authenticate', 'on'=>'login'),
3. 安全的特性賦值
在一個類的實例被創(chuàng)建后,我 們通常需要用最終用戶提交的數(shù)據(jù)填充它的特性。 這可以通過如下塊賦值(massive assignment)方式輕松實現(xiàn):
$model=new LoginForm;
if(isset($_POST['LoginForm']))
$model->attributes=$_POST['LoginForm'];最后的表達(dá)式被稱作 塊賦值(massive assignment) ,它將 $_POST['LoginForm'] 中的每一項復(fù)制到相應(yīng)的模型特性中。這相當(dāng)于如下賦值方法:
foreach($_POST ['LoginForm'] as $name=>$value) { if($name 是一個安全的特性) $model->$name=$value; }
檢測特性的安全非常重要,例如,如果我們以為一個表的主鍵是安全的而暴露了它,那么攻擊者可能就獲得了一個修 改記錄的主鍵的機(jī)會, 從而篡改未授權(quán)給他的內(nèi)容。
檢測特性安全的策略在版本 1.0 和 1.1 中是不同的,下面我們將 分別講解:
1.1 中的安全特性
在版本 1.1 中,特性如果出現(xiàn)在相應(yīng)場景的一個驗證規(guī)則中,即被認(rèn)為是安全的 。 例如:
array('username, password', 'required', 'on'=>'login, register'),
array('email', 'required', 'on'=>'register'),如上所示, username 和 password 特性在 login 場景中是必 填項。而 username, password 和 email 特性在register 場景中是必填項。 于是,如果我們在 login 場景中執(zhí)行塊賦值,就 只有 username 和 password 會被塊賦值。 因為只有它們出現(xiàn)在 login 的驗證規(guī)則中。 另一方面,如果場景是 register , 這三個特性就都可以被塊賦值。
// 在登錄場景中 $model=new User('login'); if(isset($_POST['User'])) $model->attributes=$_POST['User']; // 在注冊場景中 $model=new User('register'); if(isset($_POST['User'])) $model->attributes=$_POST['User'];
那么為什么我們使用這樣一種策略來檢測特性是否安全呢? 背后的基 本原理就是:如果一個特性已經(jīng)有了一個或多個可檢測有效性的驗證規(guī)則,那我們還擔(dān)心什么呢?
請記住,驗證規(guī)則是 用于檢查用戶輸入的數(shù)據(jù),而不是檢查我們在代碼中生成的數(shù)據(jù)(例如時間戳,自動產(chǎn)生的主鍵)。 因此,不要 為那些不接受 最終用戶輸入的特性添加驗證規(guī)則。
有時候,我們想聲明一個特性是安全的,即使我們沒有為它指定任何規(guī)則。 例如, 一篇文章的內(nèi)容可以接受用戶的任何輸入。我們可以使用特殊的 safe 規(guī)則實現(xiàn)此目的:
array('content', 'safe')
為了完成起見,還有一個用于聲明一個屬性為不安全的 unsafe 規(guī)則:
array ('permission', 'unsafe')
unsafe 規(guī)則并不常用,它是我們之前定義的安全特性的一個例外 。
1.0 中的安全特性
在版本1.0中,決定一個數(shù)據(jù)項是否是安全的,基于一個名為 safeAttributes 方法的返回值 和數(shù)據(jù)項被指定的場景. 默認(rèn)的,這個方法返回所有公共成員變量作為 CFormModel 的安全特性,而它也返回了除了主鍵外, 表中 所有字段名作為 CActiveRecord的安全特性.我們可以根據(jù)場景重寫這個方法來限制安全特性 .例如, 一個用戶模型可以包含很 多特性,但是在 login 場景.里,我們只能使用 username 和 password 特性.我們可以按照如下來指定這一限制 :
public function safeAttributes() { return array( parent::safeAttributes(), 'login' => 'username, password', ); }safeAttributes 方法更準(zhǔn)確的返回值應(yīng)該是如下結(jié)構(gòu)的 : array( // these attributes can be massively assigned in any scenario // that is not explicitly specified below 'attr1, attr2, ...', * // these attributes can be massively assigned only in scenario 1 'scenario1' => 'attr2, attr3, ...', * // these attributes can be massively assigned only in scenario 2 'scenario2' => 'attr1, attr3, ...', )
如果模型不是場景敏感的(比如,它只在一個場景中使用,或者所有場景共享了一套同樣的安全特性),返 回值可以是如 下那樣簡單的字符串.
'attr1, attr2, ...'
而那些不安全的數(shù)據(jù)項,我們需要使用獨立的賦值語句來分 配它們到相應(yīng)的特性.如下所示:
$model->permission='admin'; $model->id=1;4. 觸發(fā)驗證
一旦模型被用戶提交的數(shù)據(jù)填充,我們就可以調(diào)用 CModel::validate() 出發(fā) 數(shù)據(jù)驗證進(jìn)程。此方法返回一個指示驗證是否成功的值。 對 CActiveRecord 模型來說,驗證也可以在我們調(diào)用其 CActiveRecord::save() 方法時自動觸發(fā)。
我們可以使用 scenario 設(shè)置場景屬性,這樣,相應(yīng)場景的驗證規(guī)則就會被 應(yīng)用。
驗證是基于場景執(zhí)行的。 scenario 屬性指定了模型當(dāng)前用于的場景和當(dāng)前使用的驗證規(guī)則集。 例如,在 login 場景中,我們只想驗證用戶模型中的 username 和 password 輸入; 而在 register 場景中,我們需要驗證更多的輸入,例如 email, address, 等。 下面的例子演示了如何在 register 場景中執(zhí)行驗證:
// 在注冊場景中創(chuàng)建一個 User 模型 。等價于: // $model=new User; // $model->scenario='register'; $model=new User('register'); // 將輸入的值填充到模型 $model->attributes=$_POST['User']; // 執(zhí)行驗證 if($model->validate()) // if the inputs are valid ... else ...規(guī)則關(guān)聯(lián)的場景可以通過規(guī)則中的 on 選項指定。如果 on 選項未設(shè)置,則此規(guī)則會應(yīng)用于所有場景。例如: public function rules() { return array( array('username, password', 'required'), array('password_repeat', 'required', 'on'=>'register'), array('password', 'compare', 'on'=>'register'), ); }
第一個規(guī)則將應(yīng)用于所有場景,而第二個將只會應(yīng)用于 register 場景。
5. 提取驗證錯誤
驗證完成 后,任何可能產(chǎn)生的錯誤將被存儲在模型對象中。 我們可以通過調(diào)用 CModel::getErrors()和CModel::getError() 提取這些錯 誤信息。 這兩個方法的不同點在于第一個方法將返回 所有 模型特性的錯誤信息,而第二個將只返回 第一個 錯誤信息。
6. 特性標(biāo)簽
當(dāng)設(shè)計表單時,我們通常需要為每個表單域顯示一個標(biāo)簽。 標(biāo)簽告訴用戶他應(yīng)該在此表單域中填寫 什么樣的信息。雖然我們可以在視圖中硬編碼一個標(biāo)簽, 但如果我們在相應(yīng)的模型中指定(標(biāo)簽),則會更加靈活方便。
默認(rèn)情況下 CModel 將簡單的返回特性的名字作為其標(biāo)簽。這可以通過覆蓋 attributeLabels() 方法自定義。 正如在 接下來的小節(jié)中我們將看到的,在模型中指定標(biāo)簽會使我們能夠更快的創(chuàng)建出更強(qiáng)大的表單。
7. 創(chuàng)建動作Action方法
創(chuàng)建好LoginForm 表單Model后,我們就可以為它編寫用戶提交后的處理代碼(對應(yīng)到Controller中的某個Action方法) 。本例使用缺省的SiteController,對應(yīng)的action為actionLogin.
public function actionLogin() { $model=new LoginForm; // collect user input data if(isset($_POST['LoginForm'])) { $model->attributes=$_POST['LoginForm']; // validate user input and redirect to the previous page if valid if($model->validate() && $model->login()){ $this->render('index'); return; } } // display the login form $this->render('login',array('model'=>$model)); }
如上所示,我們首先創(chuàng)建了一個 LoginForm 模型示例; 如果請求是一個 POST 請求(意味著這個登錄表單被提交了 ),我們則使用提交的數(shù)據(jù) $_POST['LoginForm'] 填充 $model ;然后我們驗證此輸入,如果驗證成功,則顯示index 頁面。 如果驗證失敗,或者此動作被初次訪問,我們則渲染 login 視圖。
注意的我們修改了SiteController 的缺省 action為login.
/** * @var string sets the default action to be 'login' */ public $defaultAction='login';
因此用戶見到的第一個頁面為login頁面而非index頁面,只有在用戶輸入正確的用 戶名,本例使用固定的用戶名和密碼,參見UserIdentity類定義,實際應(yīng)用可以讀取數(shù)據(jù)庫或是LDAP服務(wù)器。
/** * UserIdentity represents the data needed to identity a user. * It contains the authentication method that checks if the provided * data can identity the user. */ class UserIdentity extends CUserIdentity { /** * Authenticates a user. * The example implementation makes sure if the username and password * are both 'demo'. * In practical applications, this should be changed to authenticate * against some persistent user identity storage (e.g. database). * @return boolean whether authentication succeeds. */ public function authenticate() { $users=array( // username => password 'demo'=>'demo', 'admin'=>'admin', ); if(!isset($users[$this->username])) $this->errorCode=self::ERROR_USERNAME_INVALID; else if($users[$this->username]!==$this->password) $this->errorCode=self::ERROR_PASSWORD_INVALID; else $this->errorCode=self::ERROR_NONE; return !$this->errorCode; } }
讓我們特別留意一下 login 動作中出現(xiàn)的下面的 PHP 語句:
$model->attributes=$_POST ['LoginForm'];
正如我們在 安全的特性賦值 中所講的, 這行代碼使用用戶提交的數(shù)據(jù)填充模型。 attributes 屬性由 CModel定義,它接受一個名值對數(shù)組并將其中的每個值賦給相應(yīng)的模型特性。 因此如果 $_POST ['LoginForm'] 給了我們這樣的一個數(shù)組,上面的那段代碼也就等同于下面冗長的這段 (假設(shè)數(shù)組中存在所有所需的特 性):
$model->username=$_POST['LoginForm']['username']; $model->password=$_POST ['LoginForm']['password']; $model->rememberMe=$_POST['LoginForm'] ['rememberMe'];
8. 構(gòu)建視圖
編寫 login 視圖是很簡單的,我們以一個 form 標(biāo)記開始,它的 action 屬性應(yīng)該是前面講述的 login 動作的URL。 然后我們需要為 LoginForm 類中聲明的屬性插入標(biāo)簽和表單域。最后, 我們插入 一個可由用戶點擊提交此表單的提交按鈕。所有這些都可以用純HTML代碼完成。
Yii 提供了幾個助手(helper)類簡化 視圖編寫。例如, 要創(chuàng)建一個文本輸入域,我們可以調(diào)用 CHtml::textField(); 要創(chuàng)建一個下拉列表,則調(diào)用 CHtml::dropDownList()。
信息: 你可能想知道使用助手的好處,如果它們所需的代碼量和直接寫純HTML的代碼量相當(dāng)?shù)?話。 答案就是助手可以提供比 HTML 代碼更多的功能。例如, 如下代碼將生成一個文本輸入域,它可以在用戶修改了其值時觸 發(fā)表單提交動作。
CHtml::textField($name,$value,array('submit'=>''));
不然的話你就 需要寫一大堆 JavaScript 。
下面,我們使用 CHtml 創(chuàng)建一個登錄表單。我們假設(shè)變量 $model 是 LoginForm 的實例 。
<center class="form"> <?php echo CHtml::beginForm(); ?> <?php echo CHtml::errorSummary($model); ?> <center class="row"> <?php echo CHtml::activeLabel($model,'username'); ?> <?php echo CHtml::activeTextField($model,'username') ?> </center> <center class="row"> <?php echo CHtml::activeLabel($model,'password'); ?> <?php echo CHtml::activePasswordField($model,'password') ?> </center> <center class="row rememberMe"> <?php echo CHtml::activeCheckBox($model,'rememberMe'); ?> <?php echo CHtml::activeLabel($model,'rememberMe'); ?> </center> <center class="row submit"> <?php echo CHtml::submitButton('Login'); ?> </center> <?php echo CHtml::endForm(); ?> </center><!-- form -->
上述代碼生成了一個更加動態(tài)的表單,例如, CHtml::activeLabel() 生成一個與 指定模型的特性相關(guān)的標(biāo)簽。 如果此特性有一個輸入錯誤,此標(biāo)簽的CSS class 將變?yōu)?error,通過 CSS 樣式改變了標(biāo)簽的外 觀。 相似的,CHtml::activeTextField() 為指定模型的特性生成一個文本輸入域,并會在錯誤發(fā)生時改變它的 CSS class。
如果我們使用由 yiic 腳本生提供的 CSS 樣式文件,生成的表單就會像下面這樣:
CSS 樣式定義在css目錄下,本例使用的為Yii缺省的樣式。
從版本 1.1.1 開始,提供了一個新的小物件 CActiveForm 以簡化表單創(chuàng)建。 這個小物件可同時提供客戶端及服務(wù)器端無縫的、一致的驗證。使用 CActiveForm, 上面的代 碼可重寫為:
<center class="form"> <?php $form=$this->beginWidget('CActiveForm'); ?> <?php echo $form->errorSummary($model); ?> <center class="row"> <?php echo $form->label($model,'username'); ?> <?php echo $form->textField($model,'username') ?> </center> <center class="row"> <?php echo $form->label($model,'password'); ?> <?php echo $form->passwordField($model,'password') ?> </center> <center class="row rememberMe"> <?php echo $form->checkBox($model,'rememberMe'); ?> <?php echo $form->label($model,'rememberMe'); ?> </center> <center class="row submit"> <?php echo CHtml::submitButton('Login'); ?> </center> <?php $this->endWidget(); ?> </center><!-- form -->
從下篇開始將逐個介紹Yii框架支持的UI組件包括CActiveForm的用法。
以上就是PHP開發(fā)框架Yii Framework教程(8) 使用FormModel的內(nèi)容,更多相關(guān)內(nèi)容請關(guān)注PHP中文網(wǎng)(miracleart.cn)!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Chaque fois que votre PC Windows 11 ou Windows 10 rencontre un problème de mise à niveau ou de mise à jour, vous verrez généralement un code d'erreur indiquant la raison réelle de l'échec. Cependant, une confusion peut parfois survenir lorsqu'une mise à niveau ou une mise à jour échoue sans qu'un code d'erreur ne s'affiche. Grace à des codes d'erreur pratiques, vous savez exactement où se situe le problème afin que vous puissiez essayer de le résoudre. Mais comme aucun code d’erreur n’appara?t, il devient difficile d’identifier le problème et de le résoudre. Cela prendra beaucoup de temps pour simplement découvrir la raison de l'erreur. Dans ce cas, vous pouvez essayer d'utiliser un outil dédié appelé SetupDiag fourni par Microsoft qui vous aide à identifier facilement la véritable raison de l'erreur.

.NET Framework 4 est requis par les développeurs et les utilisateurs finaux pour exécuter les dernières versions des applications sous Windows. Cependant, lors du téléchargement et de l'installation de .NET Framework 4, de nombreux utilisateurs se sont plaints de l'arrêt du programme d'installation à mi-chemin, affichant le message d'erreur suivant : ? .NET Framework 4 n'a pas été installé car le téléchargement a échoué avec le code d'erreur 0x800c0006 ?. Si vous le rencontrez également lors de l'installation de .NETFramework4 sur votre appareil, vous êtes au bon endroit
![SCNotification a cessé de fonctionner [5 étapes pour y remédier]](https://img.php.cn/upload/article/000/887/227/168433050522031.png?x-oss-process=image/resize,m_fill,h_207,w_330)
En tant qu'utilisateur Windows, vous rencontrerez probablement une erreur SCNotification a cessé de fonctionner à chaque démarrage de votre ordinateur. SCNotification.exe est un fichier de notification système Microsoft qui plante à chaque démarrage de votre PC en raison d'erreurs d'autorisation et de pannes de réseau. Cette erreur est également connue sous son nom d’événement problématique. Vous ne verrez donc peut-être pas cela comme un arrêt de SCNotification, mais comme un bug clr20r3. Dans cet article, nous explorerons toutes les étapes à suivre pour réparer SCNotification a cessé de fonctionner afin qu'il ne vous dérange plus. Qu'est-ce que SCNotification.e

Les utilisateurs de Microsoft Windows qui ont installé Microsoft.NET version 4.5.2, 4.6 ou 4.6.1 doivent installer une version plus récente de Microsoft Framework s'ils souhaitent que Microsoft prenne en charge le framework via de futures mises à jour de produit. Selon Microsoft, les trois frameworks cesseront de prendre en charge le 26 avril 2022. Une fois la date de support terminée, le produit ne recevra plus de ? correctifs de sécurité ni de support technique ?. La plupart des appareils domestiques sont tenus à jour grace aux mises à jour Windows. Ces appareils disposent déjà de versions plus récentes de frameworks, telles que .NET Framework 4.8. Les appareils qui ne se mettent pas à jour automatiquement peuvent

à l’ère actuelle de l’information, le big data, l’intelligence artificielle, le cloud computing et d’autres technologies sont devenus au centre des préoccupations des grandes entreprises. Parmi ces technologies, la technologie de rendu des cartes graphiques, en tant que technologie de traitement graphique haute performance, fait l'objet de plus en plus d'attention. La technologie de rendu des cartes graphiques est largement utilisée dans le développement de jeux, les effets spéciaux de films et de télévision, la modélisation technique et d'autres domaines. Pour les développeurs, choisir un framework adapté à leurs projets est une décision très importante. Parmi les langages actuels, PHP est un langage très dynamique. Quelques excellents frameworks PHP comme Yii2, Ph.

Cela fait une semaine que nous parlions du nouveau bug du mode sans échec affectant les utilisateurs ayant installé KB5012643 pour Windows 11. Ce problème embêtant n'apparaissait pas sur la liste des problèmes connus publiée par Microsoft le jour du lancement, prenant ainsi tout le monde par surprise. Eh bien, juste au moment où vous pensiez que les choses ne pourraient pas empirer, Microsoft lache une autre bombe pour les utilisateurs qui ont installé cette mise à jour cumulative. Windows 11 Build 22000.652 pose davantage de problèmes. La société de technologie avertit donc les utilisateurs de Windows 11 qu'ils pourraient rencontrer des problèmes lors du lancement et de l'utilisation de certaines applications .NET Framework 3.5. Cela vous semble familier ? Mais s'il te pla?t, ne sois pas surpris

Le framework Yii est un framework d'application Web PHP open source qui fournit de nombreux outils et composants pour simplifier le processus de développement d'applications Web, dont la requête de données est l'un des composants importants. Dans le framework Yii, nous pouvons utiliser une syntaxe de type SQL pour accéder à la base de données afin d'interroger et de manipuler les données efficacement. Le générateur de requêtes du framework Yii comprend principalement les types suivants : requête ActiveRecord, requête QueryBuilder, requête de commande et requête SQL originale.

à mesure qu’Internet continue de se développer, la demande de développement d’applications Web augmente également. Pour les développeurs, le développement d'applications nécessite un cadre stable, efficace et puissant, qui peut améliorer l'efficacité du développement. Yii est un framework PHP hautes performances de premier plan qui offre des fonctionnalités riches et de bonnes performances. Yii3 est la version nouvelle génération du framework Yii, qui optimise davantage les performances et la qualité du code basé sur Yii2. Dans cet article, nous présenterons comment utiliser le framework Yii3 pour développer des applications PHP.
