Ankündigung

Einklappen
Keine Ankündigung bisher.

Erstellung einer neuen Generation nicht möglich, Eingabeseite erscheint nicht

Einklappen

Neue Werbung 2019

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

  • Erstellung einer neuen Generation nicht möglich, Eingabeseite erscheint nicht

    Hallo zusammen,

    momentan arbeite ich an einem Projekt, dass es ermöglicht, einen Stammbaum zu erstellen. Das Problem ist dabei folgendes:

    Die Erstellung einer neuen Generation - genauer gesagt der Eltern, da vom Kind aus begonnen wird - funktioniert nicht, da nicht die entsprechende Seite zur Eingabe aufgerufen wird.

    Der Code stellt sich wie folgt dar:

    web.php
    PHP-Code:
    Route::post('main/create_parent''GenerationController@createParent')->name('main.createParent');
    Route::post('main/store_parent','GenerationController@storeParent')->name('main.storeParent');
    Route::resource('main''GenerationController')->names(['index' => 'main.overview'])->parameter('main''generation'); 
    app.blade.php
    PHP-Code:
    <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fomantic-ui/2.7.8/semantic.min.css" integrity="sha256-pquaucmYjfUqK251HC4uCXIKb2TQ4brXeUN2STYrJeg=" crossorigin="anonymous" />
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fomantic-ui/2.7.8/semantic.min.js"></script>
    <link rel="stylesheet" href="/public/css/tree.css">
    <body>
        <div class="ui header">
            Stammbaum der Familie Bielefeld
        </div>
        <div class="main-content">
            @yield('overview')
            @yield('entry')
            @yield('edit')
        </div>
    </body> 
    index.blade.php
    PHP-Code:
    @extends('24_layouts.app')
    @
    section('overview')
        {{-- 
    Verlinkung zur Erstellung einer neuen Generation erscheint nurwenn noch kein Stammbaum angelegt wurde --}}
        @if(isset(
    $generations) && ($generations->count() < 1))
            <
    div>
                <
    a href="{{ route('main.create') }}">Neue Generation erstellen</a>
            </
    div>
        @endif
        @foreach (
    $generations as $generation)
            <
    div class="ui card input_field">
                <
    div class="ui header center aligned">
                    {{ 
    $generation->name }}
                </
    div>
                <
    div class="description">
                    <
    div>
                        
    Geburtsdatum: {{ $generation->birth->format('d.m.Y') }}
                    </
    div>
                    <
    div>
                        
    Geschlecht: {{ $generation->gender }}
                    </
    div>
                    @isset(
    $generation->death)
                        <
    div>
                            
    Alter: {{ $generation->birth->diffInYears($generation->death) }} Jahre
                        
    </div>
                    @else
                        <
    div>
                            
    Alter: {{ $generation->birth->diffInYears(now()) }} Jahre
                        
    </div>
                    @
    endisset
                
    </div>
                <
    br>
                <
    div class="ui horizontal basic segments">
                    <
    div class="ui segment">
                        <
    form action="{{ route('main.destroy', $generation->id) }}" method="post">
                            @
    csrf
                            
    @method('DELETE')
                            <
    button class="ui icon button" type="submit">
                                <
    class="trash alternate icon red" style="visibility: visible;"></i>
                            </
    button>
                        </
    form>
                    </
    div>
                    <
    div class="ui segment">
                        <
    strong>
                            <
    em>
                                @if (
    $generation->has('ancestor''<''2'))
                                    <
    div>
                                        <
    a href="{{ route('main.createParent', $generation) }}">Eltern hinzufügen?</a>
                                    </
    div>
                                @endif
                            </
    em>
                        </
    strong>
                    </
    div>
                    <
    div class="ui segment">
                        <
    a href="{{ route('main.edit', $generation) }}">
                            <
    class="edit icon" style="visibility: visible;"></i>
                        </
    a>
                    </
    div>
                </
    div>
                <
    br>
            </
    div>
        @endforeach
    @
    endsection 
    GenerationController.php

    PHP-Code:
    <?php
    namespace App\Http\Controllers;
    use 
    App\Http\Requests\GenerationRequest;
    use 
    App\Models\Generation;
    use 
    Illuminate\Support\Facades\DB;
    use 
    Illuminate\Database\Eloquent\Collection;
    class 
    GenerationController extends Controller
    {
        
    /**
         * Display a listing of the resource.
         *
         * @return \Illuminate\Http\Response
         */
        
    public function index()
        {
            
    $generations Generation::with('ancestor')->get();
            return 
    view('index'compact('generations'));
        }
        
    /**
         * Show the form for creating a new resource.
         *
         * @return \Illuminate\Http\Response
         */
        
    public function create()
        {
            return 
    view('entry');
            
    // else {
                // Übertragung der Daten
                // return view('entry', compact('generations'));
            // }
        
    }
        
    /**
         * Show the form for creating a parent for a specific generation.
         * @param \App\Models\Generation
         */
        
    public function createParent(Generation $generation)
        {
            return 
    view('entry'compact('generation'));
        }
        
    /**
         * Store a newly created resource in storage.
         *
         * @param  \Illuminate\Http\Request  $request
         * @return \Illuminate\Http\Response
         */
        
    public function store(GenerationRequest $request)
        {
            
    Generation::create($request->all());
            return 
    redirect('main')->withStatus('Generation erfolgreich hinzugefügt!');
        }
        public function 
    storeParent(GenerationRequest $requestGeneration $generation)
        {
            
    $generation->ancestor()->create($request->all());
            return 
    redirect('main')->withStatus('Eltern erfolgreich hinzugefügt!');
        }
        
    /**
         * Display the specified resource.
         *
         * @param  \App\Models\Generation  $generation
         * @return \Illuminate\Http\Response
         */
        
    public function show(Generation $successor)
        {
            
    //
        
    }
        
    /**
         * Show the form for editing the specified resource.
         *
         * @param  \App\Models\Generation
         * @return \Illuminate\Http\Response
         */
        
    public function edit(Generation $generation)
        {
            
    $currentGeneration Generation::find($generation)->all();
            return 
    view('update'compact('currentGeneration'));
        }
        
    /**
         * Update the specified resource in storage.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \App\Models\Generation  $generation
         * @return \Illuminate\Http\Response
         */
        
    public function update(GenerationRequest $requestGeneration $generation)
        {
            
    $generation->update($request->all());
            return 
    response('Eintrag erfolgreich aktualisiert!');
        }
        
    /**
         * Remove the specified resource from storage.
         *
         * @param  \App\Models\Generation
         * @return \Illuminate\Http\Response
         */
        
    public function destroy(Generation $generation)
        {
            
    $generation
            
    ->delete();
            return 
    response('Eintrag erfolgreich gelöscht');
        }
    }
    entry.blade.php
    PHP-Code:
    @extends('24_layouts.app')
    @
    section('entry')
        {{--
    Wird nur aufgerufenwenn Stammbaum noch nicht angelegt wurde.--}}
        @empty(
    $generation)
        <
    form action="{{ route('main.store') }}" method="post">
        @else
        <
    form action="{{ route('main.storeParent', $generation) }}" method="post">
        @
    endempty
            
    @csrf
            
    <div class="input_field">
                <
    div class="ui fluid icon input input_field">
                    <
    input name="name" type="text" placeholder="Vollständigen Namen eingeben" required>
                    {{-- 
    TODO Zeige die Error Messages an --}}
                </
    div>
                <
    br>
                <
    div>
                    <
    select name="gender" class="ui selection dropdown" id="gender" required>
                        <
    option value="">--Bitte Geschlecht auswählen--</option>
                        <
    option value="männlich">männlich</option>
                        <
    option value="weiblich">weiblich</option>
                    </
    select>
                    {{-- 
    TODO Zeige die Error Messages an --}}
                </
    div>
                <
    br>
                <
    div class="ui fluid icon input">
                    <
    label for="birth">Geburtsdatum</label>
                    <
    input name="birth" type="date" placeholder="Geburtsdatum eingeben" required>
                    {{-- 
    TODO Zeige die Error Messages an --}}
                </
    div>
                <
    br>
                <
    div class="ui fluid icon input">
                    <
    label for="death">Todesdatum (optional)</label>
                    <
    input name="death" type="date" placeholder="Todesdatum eingeben (optional)">
                    {{-- 
    TODO Zeige die Error Messages an --}}
                </
    div>
                <
    br>
                <
    input type="submit" value="Erstellen!">
                <
    br>
                <
    br>
                <
    a href="{{ route('main.overview') }}">Zurückkehren zur Stammbaumübersicht</a>
            </
    div>
        </
    form>
    @
    endsection 
    2023_10_02_100347_create_generations_table.php
    PHP-Code:
    <?php
    use Illuminate\Database\Migrations\Migration;
    use 
    Illuminate\Database\Schema\Blueprint;
    use 
    Illuminate\Support\Facades\Schema;
    return new class extends 
    Migration
    {
        
    /**
         * Run the migrations.
         *
         * @return void
         */
        
    public function up()
        {
            
    Schema::create('generations', function (Blueprint $table) {
                
    $table->bigIncrements('id');
                
    $table->string('name'40);
                
    $table->date('birth');
                
    $table->date('death')->nullable();
                
    $table->string('gender'30);
                
    $table->integer('parent')->nullable();
                
    $table->timestamps();
            });
        }
        
    /**
         * Reverse the migrations.
         *
         * @return void
         */
        
    public function down()
        {
            
    Schema::dropIfExists('generations');
        }
    };
    Generation.php
    PHP-Code:
    <?php
    namespace App\Models;
    use 
    Illuminate\Database\Eloquent\Factories\HasFactory;
    use 
    Illuminate\Database\Eloquent\Model;
    use 
    Illuminate\Database\Eloquent\Relations\HasMany;
    class 
    Generation extends Model
    {
        use 
    HasFactory;
        protected 
    $guarded = ['id''timestamps'];
        protected 
    $dates = ['birth''death'];
        protected 
    $with = ['ancestor'];
        public function 
    ancestor()
        {
            return 
    $this->hasMany('App\Models\Generation''parent')->limit(2);
        }
        public function 
    ancestorRecursive() {
            return 
    $this->ancestor()->with('ancestorRecursive');
        }
        public function 
    getParentCount()
        {
            return 
    $this->ancestor()->count();    
        }
    }


    Was ich schon probiert habe:

    Da ich den Eindruck hatte, dass das Problem möglicherweise bei der Kontrollstruktur in "entry.blade.php" (also der Eingabeseite für die Anlage einer neuen Generation) liegt, habe ich wahlweise mal @empty($generation), @isset($generation) oder @if($generation == null) ausprobiert. Solange die Datenbank noch über keine Daten verfügt, erscheint die Eingabeseite und ich kann eine neue Generation anlegen. Sobald ich aber von der neuen Generation aus die Eltern anlegen möchte, erscheint nur eine blanke Seite. Beispiel:

    Vor Anlage:

    Generation.PNG

    Nach Klick auf "Eltern hinzufügen?":

    Seite_blank.png

    Ich habe auch schon überlegt, ob das Problem bereits in der Index-Datei ("index.blade.php") verursacht.

    Hat jemand einen Hinweis auf eine Fehlerquelle?

    Vielen Dank im Voraus für die Rückmeldungen.

    VG

  • #2
    Zitat von valePHP2023 Beitrag anzeigen
    Sobald ich aber von der neuen Generation aus die Eltern anlegen möchte, erscheint nur eine blanke Seite. […]
    Hat jemand einen Hinweis auf eine Fehlerquelle?
    Das Errorlog von PHP. Eine leere Seite ist idR ein Hinweis auf einen Fehler welcher das Erzeugen der Seite abbricht, der aber aufgrund der Einstellung display_errors nicht angezeigt wird.

    Kommentar

    Lädt...
    X