Ich habe die folgende benutzerdefinierte Klasse erstellt, die ich in meiner Yii2-Anwendung verwenden möchte:
@ common/components/helper/CustomDateTime.php
namespace common\components\helper;
class CustomDateTime{function Now() {...}}
Ich möchte diese Klasse so verwenden:
public function actionDelete($id)
{
$account = $this->findModel($id);
$account->archived = 1;
$account->archived_date = CustomDateTime::Now();
$account->save();
return $this->redirect(['index']);
}
In meiner @ common/config/bootstrap.php-Datei habe ich eine classMap gemäß dieser http://www.yiiframework.com/doc-2.0/guide-concept-autoloading.html erstellt.
Yii::$classMap['CustomDateTime'] = '@common/components/helper/CustomDateTime.php';
Ich erhalte jedoch die Fehlermeldung: Klassen-App\Controller\Myapp\CustomDateTime 'nicht gefunden
FRAGE: Wie erstelle ich eine classMap, damit ich nicht am Anfang jedes Controllers die Anweisung use verwenden muss, um auf meine benutzerdefinierte Klasse zuzugreifen?
Yii 1.1 hatte in der Konfigurationsdatei eine Option, um einen Satz Code zu "importieren", sodass eine Klassendatei beim Aufruf automatisch geladen werden konnte.
LÖSUNG
Vielen Dank an @Animir für die Rückführung auf die Originaldokumentation. http://www.yiiframework.com/doc-2.0/guide-concept-autoloading.html .
Ich habe festgestellt, dass ich Folgendes in meiner @ common/config/bootstrap.php -Datei verwenden kann
Yii::$classMap['CustomDateTime'] = '@common/components/helper/CustomDateTime.php';
ABER - es funktioniert nur, wenn die CustomDateTime.php-Datei NICHT über einen deklarierten Namespace verfügt.
//namespace common\components\helper;
class CustomDateTime{function Now() {...}}
Fügen Sie einfach eine use
-Anweisung in die Datei ein, in der Sie eine Klasse verwenden.
use common\components\helper\CustomDateTime;
/* some code */
public function actionDelete($id)
{
$dateNow = CustomDateTime::Now();
/* some code */
}
/* some code */
Sie können this auch ohne die Verwendung von use
Yii::$app->cdt->Now(); // cdt - CustomDateTime
damit dies jedoch erfolgreich ist, fügen Sie unten app/config/web.php
(die Konfigurationsdatei) hinzu.
...
'components' => [
'cdt' => [
'class' => 'common\components\helper\CustomDateTime',
],
...
]
...
Das automatische Laden in Yii 2 ist ziemlich einfach. Sie können es verwenden, indem Sie die Klasse mit der config-Hauptdatei laden. mögen
Sie haben Ihre Klasse in components/helper/CustomDateTime.php erstellt. und nun in deiner config/main.php oben in der Datei den Code hinzufügen
require_once( dirname(__FILE__) . '/../components/helper/CustomDateTime.php');
Jetzt wird Ihre Klasse automatisch in Ihr Projekt geladen, wo immer Sie sie verwenden möchten, wie Sie es in Ihrem Controller, Modell oder Ihrer Ansicht verwenden können
Verwenden Sie einfach so
CustomDateTime-><methodName>();
Versuchen Sie dies, ich habe es in meinem Projekt verwendet.
Zur Information können Sie diesen Link verwenden. klick auf hier
Ich weiß, dass diese Frage schon lange nicht mehr gestellt wurde. Ich bin auf dieses Thema gestoßen und möchte mitteilen, was ich mache.
Normalerweise verwende ich nach der use
-Anweisung einen Alias, anstatt für jedes Modell oder jedes Klassenobjekt 100 Verwendungszeilen-Anweisungen hinzuzufügen. Das Hinzufügen von classMap für viele der von Ihnen verwendeten Klassen ist aus meiner Sicht keine gute Idee. Wenn Sie dies tun, fügen Sie nur unnötige Zuordnungen hinzu, auch wenn Sie diese Objekte nicht verwenden.
Hier ist was ich mache
use Yii;
use common\helpers as Helper;
use yii\helpers as YiiHelper;
use common\models as Model;
use common\components as Component;
Und im Controller
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');
}
}
}
Hoffe das hilft :)