创建页面后重定向用户时遇到一个小问题。
问题在于,我在2个函数中共有3个返回,显然无法完成,我正在寻找一种方法来改变它,但我不知道它应该是什么。
流程是这样的。
用户创建页面:代码保存到javascript变量中。 用户为页面选择一个名称:代码保存到另一个javascript变量中。
Ajax将这些值传递给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();
return $newName;
return $this->website($newName);
}
public function website($newName)
{
dd($newName);
Website::where('name', $newName)->first()->html;
return view('layouts/website');
}
保存到数据库后,我返回$ newName的值,这是网站的实际名称,或者我应该说URL并返回(调用另一个函数),然后搜索匹配名称的html代码,并返回视图处理显示它:
@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('/name').then(
html => document.querySelector('html').innerHTML = html
);
</script>
</html>
@endsection @show
所以基本上在用户将其保存到数据库后,我想将它们重定向到保存变量$ newName中的页面,并检索与显示变量中的名称匹配的显示html。
Route::group(['middleware' => ['web']], function () {
Route::get('home', 'BuilderController@homepage');
Route::get('template', 'BuilderController@templates');
Route::post('template', 'BuilderController@postDB');
Route::get('logout', 'BuilderController@getLogout');
Route::get('/{name}', 'BuilderController@website');
});
template.blade.php
<button onClick=" updateDatabase(this);" type="button" class="form-control margin btn btn-success" id="getRequest changes">
Save Website
</button>
JS:
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");
});
}
编辑:我已经更新了我的代码,就像我在下面的答案中被告知的那样,但现在我得到了:
Trying to get property of non-object (View: C:\xampp\htdocs\fyproject\resources\views\layouts\website.blade.php)
in 87bb9cbe60b5bd1fe6f78e1246f2227dbd0f328f.php line 5
at CompilerEngine->handleViewException(object(ErrorException), '1') in PhpEngine.php line 44
at PhpEngine->evaluatePath('C:\xampp\htdocs\fyproject\storage\framework\views/87bb9cbe60b5bd1fe6f78e1246f2227dbd0f328f.php', array('__env' => object(Factory), 'app' => object(Application), 'errors' => object(ViewErrorBag), 'name' => ' <title>Template 1</title> <link href="http://localhost/templates/css.css" rel="stylesheet" type="text/css"> <div class="logo"> <img class="images" id="image" src="#" alt="Your Logo"> </div> <div contenteditable="true" id="content" class="draggable ui-widget-content refresh ui-draggable ui-draggable-handle" style="position: relative; left: 209px; top: 139px;"><p>Change Text inside this box</p></div> <div id="editTxt" class="refresh" contenteditable="true"> <p>This text can be by the user.</p> </div> ')) in CompilerEngine.php line 59
at CompilerEngine->get('C:\xampp\htdocs\fyproject\resources\views/layouts/website.blade.php', array('__env' => object(Factory), 'app' => object(Application), 'errors' => object(ViewErrorBag), 'name' => ' <title>Template 1</title> <link href="http://localhost/templates/css.css" rel="stylesheet" type="text/css"> <div class="logo"> <img class="images" id="image" src="#" alt="Your Logo"> </div> <div contenteditable="true" id="content" class="draggable ui-widget-content refresh ui-draggable ui-draggable-handle" style="position: relative; left: 209px; top: 139px;"><p>Change Text inside this box</p></div> <div id="editTxt" class="refresh" contenteditable="true"> <p>This text can be by the user.</p> </div> ')) in View.php line 149
答案 0 :(得分:0)
我会建议这样的事情:
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();
// Now we go to our other function
$this->website($newName);
}
public function website($newName)
{
// Return our "website" object
$website = Website::where('name', $newName)->first();
// Pass the contents of the "html" property to the view
return view('layouts/website', [
'html' => $website->html
);
}
这样,您就可以使用$html
访问刀片模板中“html”属性的内容。
如果您将控制器用于API,您可能会考虑不返回视图,而是返回一个可以监听的json响应:
return response()->json([
'url' => $website->name,
'html' => $website->html
]);
然后,您可以使用javascript处理页面内容或重定向