(0)
Artikel
bewerten
(100% positiv)
(1)

Wie in dem zuvor veröffentlichten Artikel "Übersicht Laravel Funktion" bereits angekündigt, habe ich für Laravel 5 ein Praxis-Beispiel erstellt. Das Beispiel kann bestimmte Datenbankeinträge erstellen, anzeigen, bearbeiten und löschen. In einem nächsten Beispiel werde ich zu dem hier beschriebenen Beispiel eine Benutzeranmeldung und Berechtigung hinzufügen (Authentification, Authorization), vorerst starten wir ohne dieser ...
 

 

 

Für ein besseres Verständnis, hier nochmal die schematische Darstellung vom vorherigen Artikel: Laravel - Einleitung 

 

Erstellen des Models und der Migration:

Befehl:  php artisan make:model Myinput --migration

vagrant@homestead:~/Code/Laravel$ php artisan make:model Myinput --migration
Model created successfully.
Created Migration: 2016_08_18_093759_create_myinputs_table
vagrant@homestead:~/Code/Laravel$

Der Befehl erstellt folgende Dateien:

  • database\migrations\DATUM_create_myinputs_table.php
  • app\Myinput.php

Die Dateien müssen natürlich auf unsere Bedürfnisse angepasst werden:

Anpassen der Datenbankmigration

Bevor die Datenbank angepasst wird, müssen wir Laravel unser gewünschtes Layout in der Migration mitteilen, dazu bearbeite ich die zuvor erstellte Datei: database\migrations\DATUM_create_myinputs_table.php.

Für die Erweiterung der Datenbanktabelle, füge ich zusätzliche Felder ein:

$table->string('string', 255);
$table->string('email', 255);
$table->integer('integer');

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateMyinputsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('myinputs', function (Blueprint $table) {
            $table->increments('id');
            $table->string('string', 255);
            $table->string('email', 255);
            $table->integer('integer');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('myinputs');
    }
}

app\Myinput.php

Nachdem wir gerade mit dem Layout der Datenbanktabelle beschäftigt sind: Damit die Einträge in der Datenbank später gespeichert werden können, teilen wir das Layout dem Model mit:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Myinput extends Model
{
  protected $fillable = [
      'string', 'email', 'integer'
  ];
}

Erstellen der Datenbank

Das eigentliche Anpassen der Datenbank erfolgt anhand der Migrations-Information mit folgendem Befehl: 

php artisan migrate

vagrant@homestead:~/Code/Laravel$  php artisan migrate
Migration table created successfully.
Migrated: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_100000_create_password_resets_table
Migrated: 2016_08_18_093759_create_myinputs_table
vagrant@homestead:~/Code/Laravel$

Route

hier die bereit in der Einleitung erwähnte Datei: app\Http\routes.php (Laravel 5.2) oder routes\web.php (Laravel 5.3) siehe: Laravel - Beispiel - Übersicht 

Route::resource('myinputs', 'MyinputController');

Controller erstellen

Damit die routes.php-Datei nicht ins leere zeigt, erstellen wir einen zugehörigen Controller:

php artisan make:controller MyinputController

Der Befehl erstellt folgende Datei: app\Http\Controllers\MyinputController.php

In dieser Datei erfolgen die eigentlichen Aktionen:

Anpassen des Controllers:index, create, store, show, edit, update, destroy

Datei: app\Http\Controllers\MyinputController.php

<?php

namespace App\Http\Controllers;
use App\Myinput;
use View;
use Illuminate\Http\Request;
use App\Http\Requests;


class MyinputController extends Controller
{
  /**
      * Display a listing of the resource.
      */
     public function index()
     {
       // get all the myinputs
       $myinputs = Myinput::all();
       // load the view and pass the myinputs
       return View::make('myinputs.index')
           ->with('myinputs', $myinputs);
     }

     /**
      * Show the form for creating a new resource.
      */
     public function create()
     {
       // load the create form (app/views/myinputs/create.blade.php)
       return View::make('myinputs.create');
     }

     /**
      * Store a newly created resource in storage.
      */
     public function store(Request $request)
     {
       // validate

               $this->validate($request, [
                   'string'       => 'required',
                   'email'      => 'required|email',
                   'integer' => 'required|numeric']);


                   // store
                  Myinput::create([
                   'string'      =>  $request->string,
                   'email'      =>  $request->email,
                   'integer' =>  $request->integer,
                 ]);
          return back();

     }

     /**
      * Display the specified resource.
      */  
     public function show($id)
     {
       // get the myinput
       $myinput = Myinput::find($id);

       // show the view and pass the myinput to it
       return View::make('myinputs.show')
           ->with('myinput', $myinput);
     }

     /**
      * Show the form for editing the specified resource.
      */
     public function edit($id)
     {
       // get the myinput
       $myinput = Myinput::find($id);

       // show the edit form and pass the myinput
       return View::make('myinputs.edit')
           ->with('myinput', $myinput);
     }

     /**
      * Update the specified resource in storage.
      */
     public function update(Request $request, $id)
     {
       $this->validate($request, [
           'string'       => 'required',
           'email'      => 'required|email',
           'integer' => 'required|numeric']);

              $myinput = Myinput::find($id);
              $myinput->update($request->all());

          return back();
     }

     /**
      * Remove the specified resource from storage.
      */
     public function destroy($id)
     {
       // delete
       $myinput = Myinput::find($id);
       $myinput->delete();
       // redirect
        return back();
     }
}

zugehörige Views

resources/views/ layouts/app.blade.php

Wer sich an dieser Stelle wundert: Die Datei app.blade.php habe ich bisher noch nicht erwähnt.

Der Sinn dieser Datei ist folgender:

Damit nicht in allen View-Dateien immer wieder der selbe Header und Footer geladen werden muss, kann dafür eine Vorlage erstellt werden. Die Vorlage kann von mehreren View-Dateien verwendet werden, diese ändern nur einen bestimmten Bereich in der Vorlage, an der Stelle:  @yield('content')

<!-- resources/views/layouts/app.blade.php -->
<!DOCTYPE html>
<html>
  <head>
      <title>Myinput Test</title>
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  </head>
  <body>
       @yield('content')
       <!-- JavaScripts -->
            <script   src="https://code.jquery.com/jquery-2.2.4.min.js"   integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="   crossorigin="anonymous"></script> 
     <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  </body>
</html>

Die folgenden Dateien verwenden die Vorlage und rufen diese über @extends('layouts.app') auf, bzw. verwenden den Bereich @yield('content') mit dem Befehl:@section('content')

resources/views/ myinputs/index.blade.php

app/views/myinputs/edit.blade.php

<!-- resources/views/myinputs/index.blade.php -->
@extends('layouts.app')
@section('content')
<div class="container">
<nav class="navbar navbar-inverse">
    <ul class="nav navbar-nav">
        <li><a href="{{ URL::to('myinputs/create') }}">Create a Myinput</a>
    </ul>
</nav>
<h1>All the Myinputs</h1>

<!-- will be used to show any messages -->
@if (Session::has('message'))
    <div class="alert alert-info">{{ Session::get('message') }}</div>
@endif

<table class="table table-striped table-bordered">
    <thead>
        <tr>
            <td>ID</td>
            <td>String</td>
            <td>Email</td>
            <td>Integer</td>
            <td>Actions</td>
        </tr>
    </thead>
    <tbody>
    @foreach($myinputs as $key => $value)
        <tr>
            <td>{{ $value->id }}</td>
            <td>{{ $value->string }}</td>
            <td>{{ $value->email }}</td>
            <td>{{ $value->integer }}</td>

            <!-- we will also add show, edit, and delete buttons -->
            <td>

                <!-- show the myinput (uses the show method found at GET /myinputs/{id} -->
                <a class="btn btn-small btn-success" href="{{ URL::to('myinputs/' . $value->id) }}">Show this Myinput</a>

                <!-- edit this myinput (uses the edit method found at GET /myinputs/{id}/edit -->
                <a class="btn btn-small btn-info" href="{{ URL::to('myinputs/' . $value->id . '/edit') }}">Edit this Myinput</a>

                <!-- delete the myinput (uses the destroy method DESTROY /myinputs/{id} -->
                <form action="./myinputs/{{$value->id }}"  onsubmit="return confirm('Are you sure to delete: {{ $value->string}}')" method="POST">
                    {{ csrf_field() }}
                    {{ method_field('DELETE') }}
                    <button type="submit" class="btn btn-danger">
                        <i class="fa fa-btn fa-trash">Delete</i>
                    </button>
                </form>
            </td>
        </tr>
    @endforeach
    </tbody>
</table>
</div>
@endsection

resources/views/ myinputs/show.blade.php

<!-- resources/views/myinputs/show.blade.php -->
@extends('layouts.app')
@section('content')
<div class="container">
      <nav class="navbar navbar-inverse">
          <ul class="nav navbar-nav">
              <li><a href="{{ URL::to('myinputs') }}">View All Myinputs</a></li>
          </ul>
      </nav>
<h1>Showing {{ $myinput->string }}</h1>

    <div class="jumbotron text-center">
        <h2>{{ $myinput->string }}</h2>
        <p>
            <strong>Email:</strong> {{ $myinput->email }}<br>
            <strong>Level:</strong> {{ $myinput->level }}
        </p>
    </div>
</div>
@endsection

resources/views/ myinputs/create.blade.php

<!-- resources/views/myinputs/create.blade.php -->
@extends('layouts.app')
@section('content')
<div class="container">
      <nav class="navbar navbar-inverse">
          <ul class="nav navbar-nav">
              <li><a href="{{ URL::to('myinputs') }}">View All Myinputs</a></li>
          </ul>
      </nav>
<h1>Create a Myinput</h1>

<!-- if there are creation errors, they will show here -->
@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif
<form action="{{ url('myinputs') }}" method="POST" class="form-horizontal">
    {{ csrf_field() }}


    <div class="form-group">
        <label for="formGroupExampleInput">String:</label>
        <input type="text" name="string" class="form-control" value="{{ old('string') }}">

    </div>

    <div class="form-group">
        <label for="formGroupExampleInput">Email:</label>
        <input type="text" name="email" class="form-control" value="{{ old('email') }}">
    </div>

    <div class="form-group">
        <label for="formGroupExampleInput">Integer:</label>
        <input type="text" name="integer" class="form-control" value="{{ old('integer') }}">
    </div>

    <div class="form-group">
</div>

<!-- Add Button -->
 <div class="form-group">
     <div class="col-sm-offset-3 col-sm-6">
         <button type="submit" class="btn btn-default">
             <i class="fa fa-btn fa-plus"></i>Add
         </button>
     </div>
 </div>

</form>
</div>
@endsection

resources/views/ myinputs/edit.blade.php

<!-- resources/views/myinputs/edit.blade.php -->
@extends('layouts.app')
@section('content')
<div class="container">
      <nav class="navbar navbar-inverse">
          <ul class="nav navbar-nav">
              <li><a href="{{ URL::to('myinputs') }}">View All Myinputs</a></li>
          </ul>
      </nav>
<h1>Edit {{ $myinput->string }}</h1>

<!-- if there are creation errors, they will show here -->
@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

<form action="{{ url('myinputs') }}/{{$myinput->id }}" method="POST" class="form-horizontal">
    {{ csrf_field() }}
    {{ method_field('PATCH')}}

    <div class="form-group">
        <label for="formGroupExampleInput">String:</label>
        <input type="text" name="string" class="form-control" value="{{ $myinput->string }}">

    </div>

    <div class="form-group">
        <label for="formGroupExampleInput">Email:</label>
        <input type="text" name="email" class="form-control" value="{{ $myinput->email }}">
    </div>

    <div class="form-group">
        <label for="formGroupExampleInput">Level:</label>
        <input type="text" name="integer" class="form-control" value="{{ $myinput->integer }}">
    </div>

    <div class="form-group">
</div>

<!-- Update Button -->
 <div class="form-group">
     <div class="col-sm-offset-3 col-sm-6">
         <button type="submit" class="btn btn-default">
             <i class="fa fa-btn fa-plus">update</i>
         </button>
     </div>
 </div>

</form>
</div>
@endsection

 



Kommentare


Laravel Datenbank

Laravel Datenbank

Laravel: Anlegen und Verwenden einer Datenbank

Laravel Datenbank