J'ai créé la classe personnalisée suivante que j'aimerais utiliser dans mon application Yii2:
(@ common/components/helper/CustomDateTime.php} _
namespace common\components\helper;
class CustomDateTime{function Now() {...}}
Je veux utiliser cette classe comme ceci:
public function actionDelete($id)
{
$account = $this->findModel($id);
$account->archived = 1;
$account->archived_date = CustomDateTime::Now();
$account->save();
return $this->redirect(['index']);
}
Dans mon fichier @ common/config/bootstrap.php, j'ai créé un classMap conformément à ceci http://www.yiiframework.com/doc-2.0/guide-concept-autoloading.html .
Yii::$classMap['CustomDateTime'] = '@common/components/helper/CustomDateTime.php';
Mais je reçois le message d'erreur suivant: Classe 'app\controllers\myapp\CustomDateTime' non trouvée
QUESTION: Comment créer un classMap afin de ne pas avoir à utiliser l'instruction use au début de chaque contrôleur pour accéder à ma classe personnalisée?
Yii 1.1 avait l'habitude d'avoir une option dans le fichier de configuration pour «importer» un ensemble de code afin qu'un fichier de classe puisse être chargé automatiquement lors de son appel.
SOLUTION
Merci beaucoup à @Animir de m'avoir redirigé vers la documentation d'origine. http://www.yiiframework.com/doc-2.0/guide-concept-autoloading.html .
J'ai constaté que je pouvais utiliser les éléments suivants dans mon fichier @ common/config/bootstrap.php
Yii::$classMap['CustomDateTime'] = '@common/components/helper/CustomDateTime.php';
MAIS - cela ne fonctionne que lorsque le fichier CustomDateTime.php N'A PAS un espace de noms déclaré.
//namespace common\components\helper;
class CustomDateTime{function Now() {...}}
Ajoutez simplement une instruction use
dans un fichier, où vous utilisez une classe.
use common\components\helper\CustomDateTime;
/* some code */
public function actionDelete($id)
{
$dateNow = CustomDateTime::Now();
/* some code */
}
/* some code */
Le chargement automatique dans Yii 2 est assez facile. Vous pouvez l'utiliser en chargeant la classe avec le fichier principal de configuration. comme
Vous avez créé votre classe dans components/helper/CustomDateTime.php. et maintenant dans votre config/main.php en haut du fichier, ajoutez le code ci-dessous
require_once( dirname(__FILE__) . '/../components/helper/CustomDateTime.php');
Maintenant, votre classe est automatiquement chargée dans votre projet, où que vous soyez, vous pouvez l'utiliser comme dans votre contrôleur, votre modèle ou votre vue.
Il suffit d'utiliser comme ça
CustomDateTime-><methodName>();
Essayez ceci, je l'ai utilisé dans mon projet.
Pour référence, vous pouvez utiliser ce lien. cliquez ici
Je sais que cela fait longtemps que cette question a été posée. Je suis tombé sur cela et pour partager ce que je fais.
J'utilise généralement un alias après une instruction use
au lieu d'ajouter 100 lignes d'instructions d'utilisation pour chaque objet de modèle ou de classe. L'ajout de classMap pour la plupart des classes que vous utilisez n'est pas une bonne idée à mon avis. Si vous faites cela, vous ajouterez simplement un mappage inutile, même lorsque vous n'utilisez pas ces objets.
Voici ce que je fais
use Yii;
use common\helpers as Helper;
use yii\helpers as YiiHelper;
use common\models as Model;
use common\components as Component;
Et dans le contrôleur
public function actionIndex(){
$model = Model\SomeModel();
if(Yii::$app->request->isPost){
$post = Yii::$app->request->post('SomeModel');
$model->text = Helper\Text::clean($post['text']);
$model->text = YiiHelper\Html::encode($model->text);
if($model->save()){
return $this->render('thank_you');
}
}
}
J'espère que cela t'aides :)