Ankündigung

Einklappen
Keine Ankündigung bisher.

Laravel Autoregistering von Repositories im ServiceProvider über Annotations am Model

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Laravel Autoregistering von Repositories im ServiceProvider über Annotations am Model

    PHP-Code:
        /**
         * Register services.
         *
         * @return void
         * @throws ReflectionException
         */
        
    public function register()
        {
            
    $modelClasses glob('./../app/*.php');

            foreach (
    $modelClasses as $modelClass) {
                if (
                    
    strpos($modelClass'Interface') === false &&
                    
    strpos($modelClass'Trait') === false
                
    ) {
                    foreach ([
    'php''.''/''app'] as $pattern) {
                        
    $modelClass str_replace($pattern''$modelClass);
                    }

                    
    $reflectionClass = new ReflectionClass('App\\' $modelClass);
                    
    $docBlock        $reflectionClass->getDocComment();

                    if (!empty(
    $docBlock) && strpos($docBlock'@Repository') !== false) {
                        
    $repositoryName explode('"'$docBlock)[1];

                        
    $this->app->singleton(
                            
    'App\\Contracts\\Repositories\\' $repositoryName 'Interface',
                            
    'App\\Repositories\\Eloquent\\' $repositoryName
                        
    );
                    }
                }
            }
        } 
    Ich schreibe gerade eine recht umfangreiche CRUD App mit Laravel und das ist die register Methode eines neu erstellten Service Providers für meine Repositories.

    Es werden schon einige Repositories werden und ich bin zu faul bzw. finde es umständlich, jedes Repository mit Interface und Klasse im Service Provider zu registrieren. Ich halte mich streng an meine Konventionen und sehe momentan kein Risiko, vom oben erkennbaren Muster abzuweichen.

    Ich weiß, dass Laravel das Active Record Pattern nutzt und es daher evtl. unüblich ist, Repositories zu nutzen. Ich weiß aber aus anderen Projekten auch, dass es schnell passieren kann, dass die gleichen Abfragen redundant im Code oder gar in Templates vorliegen und möchte diese hier in Repositories kapseln. Dazu wird das Projekt irgendwann zwei verschiedene Datenhaltungen haben.

    Kann man das so wie oben machen?

    Mit Facaden und Real Time Facaden hat man keine Autovervollständigung in PhpStorm und zudem fühlt es sich unnatürlich an, Logikklassen für Datenzugriffe "einfach so" in den Code zu schmeißen, weswegen ich sie lieber (in die Controller und die anderen Logikklassen) injizieren möchte.

    Vielen Dank für jede Antwort und viele Grüße.

  • #2
    Wozu musst Du da was registrieren? Laravel beherrscht doch Auto-Wiring.

    Kommentar

    Lädt...
    X