Zum Inhalt

Hinzufügen einer Datei#

Eine der wichtigsten Tätigkeiten ist das Hinzufügen von Dateien am richtigen Ort. Das ist nicht immer ganz einfach, da die Ordnerstruktur nicht immer ganz klar ist. Zudem sollte die Vererbung beachtet werden. Im Folgenden wird erklärt wie Dateien hinzugefügt werden sollten und wie die Vererbung funktioniert.

Controller#

Die Controller werden in der Regel in der Ordnerstruktur app/Controller abgelegt. Die Datei sollte den Namen des Controllers haben, also z.B. app/Controller/CarCompany.php. Der Controller sollte die Klasse Controller erweitern. Die Datei sollte folgenden Inhalt haben:

<?php
class CarCompany extends Controller
{
    public function index()
    {
        echo 'carCompany/index';
    }

    public function test()
    {
        // Model laden (1)
        $car = $this->loadModel('Car');

        // Werte initialisieren
        $car->brand = 'BMW';
        $car->model = 'M3';
        $car->color = 'schwarz';
        $car->description = 'This is a BMW M3';
        $car->year = '2018';
        $car->price = '100000';

        // View erstellen (2)
        $this->loadView('home/car-company', ['car' => $car]);
    }
}
  1. Das Model wird aus dem Ordner app/models geladen und instanziiert.
  2. Aus dem Ordner app/views wird die Datei home/car-company.php geladen. Parameter, welche übergeben werden sollten, können am Ende als assoziatives Array hinterlegt werden.
<?php
class Controller
{
    protected function loadModel(string $model)
    {
        if (file_exists('../app/models/' . $model . '.php')) {
            require_once '../app/models/' . $model . '.php';
            return new $model();
        } else {
            echo 'Error : Model does not exists!';
        }
    }

    protected function loadView(string $view, $data = [])
    {
        if (file_exists('../app/views/' . $view . '.php')) {
            require_once '../app/views/' . $view . '.php';
        } else {
            echo 'Error : View does not exists!';
        }
    }
}

Model#

Die Models sind Entitäten, welche in der Datenbank gespeichert werden oder eine andere Businesslogik besitzen. Die Models werden unter app/Model abgelegt. Es wäre sinnvoll, wenn die Entität Getter/Setter besitzt, um die Zugriffe zu limitieren.

<?php
class Car
{
    public string $brand;
    public string $model;
    public string $color;
    public string $description;
    public int $year;
    public float $price;
}

View#

Die Views sind die Darstellung der Daten zuständig. Sie werden mit PHP geschrieben und nehmen aus einem assoziativen Array die Daten entgegen. So könnte jeder Controller die View benutzen. Die Views werden unter app/View gespeichert.

Brand: BMW
Model M3
Color schwarz
Description This is a BMW M3
Year 2018
Price 100000
<table class="table table-hover">
    <thead>
        <tr>
            <th scope="row">Brand:</th>
            <th><?= $data['car']->brand ?></th>
    </thead>
    <tbody class="table-group-divider">
        <tr>
            <th scope="row">Model</th>
            <td><?= $data['car']->model ?></td>
        </tr>
        <tr>
            <th scope="row">Color</th>
            <td><?= $data['car']->color ?></td>
        </tr>
        <tr>
            <th scope="row">Description</th>
            <td><?= $data['car']->description ?></td>
        </tr>
        <tr>
            <th scope="row">Year</th>
            <td><?= $data['car']->year ?></td>
        </tr>
        <tr>
            <th scope="row">Price</th>
            <td><?= $data['car']->price ?></td>
        </tr>
    </tbody>
</table>