2017-02-10 9 views
0

Ich speichere Daten in der Datenbank, indem ich Variable durch Ajax übergebe und sie in der Steuerung benutze.Laravel gibt keine Seite zurück

Speichern funktioniert gut, es speichert Daten in einer Datenbank, aber das Problem ist gespeicherte Seite anzuzeigen. Datenbank hat 2 Felder, Name und HTML. Name ist offensichtlich Name der Website und HTML ist reiner HTML-Code. so, wenn Benutzerseite mit dem Namen speichert ‚zufällig‘ Ich mag HTML-Seite auf ihn anzuzeigen localhost/random

Fehlermeldung mit mir erhalte, ist:

Der Versuch, Eigentum von Nicht-Objekt (Ansicht zu erhalten: C : \ xampp \ htdocs \ fyproject \ resources \ Ansichten \ Layouts \ website.blade.php)

Hier ist, was ich bisher getan haben:

Ajax:

var web_name; 
function updateDatabase(newCode, name_website) 
{ 
    code2 = document.getElementById("content-link2").innerHTML; 
    web_name = ($('#website_name').val()); 
    // make an ajax request to a PHP file 
    // on our site that will update the database 
    // pass in our lat/lng as parameters 
    $.post('http://localhost/template', { 
      _token: $('meta[name=csrf-token]').attr('content'), 
      newCode: (code2), 
      name_website: (web_name), 
     }) 
     .done(function() { 
     }) 
     .fail(function() { 
      alert("error"); 
     }); 
} 

Controller:

 public function postDB(Request $request) { 
     $newName = $request->input('name_website'); 
     $newLat = $request->input('newCode'); 
     $websites = new Website(); 
     $websites->name = $newName; 
     $websites->html = $newLat; 
     $websites->save(); 
     $name = $newName; 
     return redirect($name); 
    } 
    public function website($name) { 
    $website = Website::where('name', $name)->first()->html; 

    // Render resources/views/template.blade.php or any view you want 
    // and pass the data. E.g. $website, so you can access $website->html in your view. 
    return view('layouts/website', compact('name')); 
} 
} 

Routen:

Route::get('home', '[email protected]'); 
Route::get('template', '[email protected]'); 
Route::post('template', '[email protected]'); 
Route::get('logout', '[email protected]'); 
Route::get('/{name}', '[email protected]'); 

website.blade.php:

@extends('layouts.master') @section('title', 'Website Builder') @section('content') 
<meta name="csrf-token" content="{{ csrf_token() }}" /> 


{{html_entity_decode($name->html)}} 
<script src="https://unpkg.com/axios/dist/axios.min.js"></script> 
<script> 
    axios.get('/localhost/name').then(
     html => document.querySelector('html').innerHTML = html  
    ); 
</script> 
</html> 
@endsection @show 

Was ist los?

+0

Redirect ($ name); und window.location mit neu laden der Seite, benötigen Sie Ihre HTML, ohne die Seite neu zu laden? oder Sie müssen nur Ergebnisse anzeigen, sobald der Benutzer die Daten speichert? –

+0

Ergebnis anzeigen, sobald Benutzer die Daten speichern – Przemek

Antwort

0

Das Problem besteht darin, dass Sie Variable namens Name an Ihre Ansicht übergeben, während Sie $ Website übergeben müssen. Außerdem haben Sie einen Fehler in Ihrer Eloquent-Abfrage.

versuchen Sie die folgenden Änderungen,

$name->html // Change this 
$website->html // to this 
return view('layouts/website', compact('name')); // Change this 
return view('layouts/website', compact('website')); // To this 
$website = Website::where('name', $name)->first()->html; // Change this 
$website = Website::where('name', $name)->first(); // To this 
+0

funktioniert nicht, und ich dachte, es ist der ganze Sinn von Axios auf Arrays zugreifen zu können – Przemek

+0

Ich habe meine Replay aktualisiert, bitte sehen Sie es sich an. –

+0

Immer noch das gleiche Problem :( – Przemek

0

erster Stelle auf postDB der Umleitung, müssen Sie über JavaScript-Weiterleitung

-Controller

public function postDB(Request $request) { 

    $website = new Website(); 
    $website->name = $request->input('name_website'); 
    $website->html = $request->input('newCode'); 
    $website->save(); 

    return response()->json(['url' => url($website->name)]); 
} 

Javascript

-Controller

public function website($name) { 
    $website = Website::where('name', $name)->first(); 
    return view('layouts/website', compact('website')); 
} 

Jetzt können Sie den HTML-Zugriff durch die $ Website Variable Zugriff wie $ Website-> html

+0

Ich bekomme gerade Plan html Code, nicht tatsächlich die Seite – Przemek

+0

Ich verstehe nicht? Was meinst du mit Plan (einfach?) HTML-Code? –

+0

plain html code so wie der tatsächliche Code, der in einem Texteditor so eingegeben wird

etc, so wird der Code angezeigt und es ist nicht zu tatsächlichen Boxen, Farben etc geändert – Przemek