Ankündigung

Einklappen
Keine Ankündigung bisher.

Slim und Eloquent

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

  • Slim und Eloquent

    Guten Tag zusammen,

    ich habe mir eine Website gebaut. Diese läuft zwar aktuell und macht was sie soll, ist aber durch viele Nachbesserungen und zusätzlichen Features von der Programmierung her nicht mehr strukturiert.

    Ich hab mir damals an einem aktuell eher veralteten MVC-Skeleton die Basics beigebracht und die Webseite darauf aufgebaut.

    Aufbau:
    controllers (Pro Seite sozusagen die Intelligenz der Seite, extended eine Controller.class aus dem library Verzeichnis die als Übergabepunkt dient)
    librarys (hauptsächlich für das Routing und die View-Erstellung)
    models(hier liegen die Datenbank-Querys pro Seite die ich dann im Controller verwende)
    views(Hier liegen die index.html Seiten für die Darstellung der Seiten und die Formulare)
    webroot(hier liegen die css, js dateien so wie die index.php usw.)

    Nachdem ich festgestellt habe, das ich meine Querys gerne allgemeiner schreiben möchte, wollte ich das ganze umschreiben.
    (wie zum Beispiel, "function search (needle)" die ich in jeder Seite nutzen möchte, um gegen doppelte Funktionen vorzugehen)

    Ich bin zum Schluss gekommen das vielleicht ein aktuelles Framework hilfreicher und schneller sein könnte, vor allem durch die externen librarys die man je nach Projekt hinzufügen kann.

    Also hab ich mir das Slim-Framework rausgesucht, soweit so gut alles in einfacher kürzer und besser wieder nachgebaut.

    Nun zu meinem Problem, nachdem mir die Tutorials aufgrund der gefühlt 50 Millionen verschiedenen Ansätze nicht weiterbringen, hege ich die Hoffnung, dass ich hier jemanden finde der mir weiterhelfen kann.

    Aufbau:
    app
    \src
    \Action
    \HomeAction - hier liegt zusagen mein Controller, indem ich die View rendere und die Funktion der Seite erstelle. Funktionen aufrufen, Parameter vom Post weiterverarbeite usw.
    \Model
    \User.php - hier sollte laut meinem Verständnis die Datenbank "geladen" werden. Ich dachte mir nachdem man mir bei Slim Eloquent empfiehlt nutze ich dieses.
    \templates
    \.twig - hier liegen meine twig templates, also meine views aufgeteilt in ein base.twig und je nach Seite eine extension des base twigs
    dependencies.php - Container die ich aus Gründen meines geringen Verständnisses bisher nur als Schnittstelle von externen Librarys verwende
    middleware.php - hab ich noch nicht ganz Verstanden
    routes.php - hier leg ich das Routing der Seite fest
    settings.php - Allgemeine Einstellungen der Website
    log
    public - so ziemlich das gleiche wie webroot


    Das ganze funktioniert für mich soweit das ich Sachen aus der Datenbank holen und darstellen kann. Nachdem mir ein "Hallo ich versteh nicht wie ich das machen muss um Sachen in meine Datenbank zu kriegen" nichts bringen wird, habe ich eine andere Frage.

    Sollte ich Eloquent komplett rausnehmen, wenn ja welche Alternative gibt es und wie muss Sie integriert werden. Was wäre ein gute Beispielaufbau.

    Mir würde es auch einfach helfen, wenn mir jemand kurz erklärt wo sich Eloquent genau einordnet in meine Struktur.

    PHP-Code:
    <?php
    namespace App\Model;

    use 
    Illuminate\Database\Eloquent\Model as Eloquent;

    class 
    User extends Eloquent {
        
    /**
         * The database table used by the model.
         *
         * @var string
         */
        
    protected $table 'co_users';

        protected 
    $primaryKey 'co_id';


    }
    PHP-Code:
    <?php
    namespace App\Action;

    use 
    Slim\Views\Twig;
    use 
    App\Model\User;
    use 
    Psr\Log\LoggerInterface;
    use 
    Slim\Http\Request;
    use 
    Slim\Http\Response;

    final class 
    HomeAction
    {
        private 
    $view;
        private 
    $logger;

        public function 
    __construct(Twig $viewLoggerInterface $logger)
        {
            
    $this->view $view;
            
    $this->logger $logger;
        }

        public function 
    __invoke(Request $requestResponse $response$args)
        {
            
    $this->logger->info("Homepage action dispatched");

            
    $user User::all()->toArray();

            foreach (
    array_chunk($user3true) as $array) {

                
    $value[] = $array;

            }

            
    $users $value;

            
    $this->view->render($response'/Home/home.twig', ['users'=> $users]);

            return 
    $response;
        }
    }
    So nutze ich aktuell das Model um Dinge aus der Datenbank zu ziehen und im twig darzustellen.
    Ich verstehe nicht wie ich zum Beispiel bei einem Übergebenen-Postwert in die Datenbank schreiben soll.

    PHP-Code:
    <?php
    namespace App\Action;

    use 
    App\Model\Order;
    use 
    Slim\Views\Twig;
    use 
    App\Model\Sort;
    use 
    Psr\Log\LoggerInterface;
    use 
    Slim\Http\Request;
    use 
    Slim\Http\Response;

    final class 
    OrderAction
    {
        private 
    $view;
        private 
    $logger;

        public function 
    __construct(Twig $viewLoggerInterface $logger)
        {
            
    $this->view $view;
            
    $this->logger $logger;
        }

        public function 
    __invoke(Request $requestResponse $response$args)
        {
            
    $this->logger->info("Homepage order dispatched");

            
    $sort Sort::all()->toArray();

            
    $post_id $request->getParam('id');
            
    $post_sort $request->getParam('order');

            foreach (
    array_chunk($sort4true) as $array) {

                
    $value[] = $array;

            }

            
    $sorts $value;

            if(
    $post_sort){

              
    Hier ist der Punkt an dem ich nicht weiterkomme.

            }

            
    $this->view->render($response'/Orders/orders.twig', ['sorts'=> $sorts]);

            return 
    $response;
        }



    }
    Laut dem Internet, soll es über folgendes funktionieren:

    PHP-Code:
       public function store(Request $request)     {         // Validate the request...          $order= new Order;          $order->sort_id= $post_sort->sort_id;          $order->save();     } } 
    Benötige ich dafür dann noch einen extra Controller oder wo muss ich das in meiner aktuellen Programmierung einbauen?

    Sorry für den langen Post.

    Mit freundlichen Grüßen

    Simon


  • #2
    MOD: Verschoben von PHP-Einsteiger
    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar

    Lädt...
    X