我正在尝试做某事,但是我不知道我必须使用哪种方法。我对Laravel非常陌生,这对我来说也是新的。
因此,我试图做的是在找到数据时在“商店信息”卡框中显示以下内容。见图片。
保存该信息的刀片为shopDetails.blade.php
现在,当它没有数据时,我希望它显示addShop.blade.php
但是我得到了
这是我家用刀片服务器中的代码。 (商店信息卡)
<div class="row justify-content-center">
<div class="col-md-6">
<div class="card">
<div class="card-header">Shop Information</div>
<div class="card-body">
@if($message = Session::get('successs'))
<div class="alert alert-success alert-dismissible fade show" role="alert">
<p>{{$message}}</p>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
@endif
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
{{ \App\Http\Controllers\ShopController::checkShop()}}
</div>
这是控制器中的代码。
//Checks If user has added A shop
static function checkShop()
{
$shop = DB::table('shop')->where('userid',Auth::id())->first();
if($shop){
return redirect()->route('shopDetails');
}
elseif(!$shop) {
return redirect()->route('addShop');
}
}
为什么我将HTML代码作为回报而不是我希望获得的回报?还有一种更好的方法来检查记录是否存在,并显示其他形式供用户添加该记录。在这种情况下,用户可以添加一个商店。 如果用户尚未添加自己的商店,则会提示您添加它。
基本上就是我想做的。
如果用户已添加商店。 在该卡中显示商店信息 如果用户未添加商店 在该卡中显示商店注册表格
答案 0 :(得分:1)
问题出在您的Blade文件中:
{{ \App\Http\Controllers\ShopController::checkShop() }}
这将输出checkShop()计算得出的结果,而这恰好是路由重定向的内容。
您可以通过将checkShop()
逻辑移到HomeController方法中,然后将Blade文件中的代码添加到这两个路由的视图中来解决此问题。
答案 1 :(得分:0)
在laravel中,当您这样返回时
return redirect()->route('shopDetails');
这意味着您正在将用户重定向到路由为shopDetails
所以您真正需要做的是以下事情:
像在这里一样找到您的商店
$shop = DB::table('shop')->where('userid',Auth::id())->first();
使用此变量返回视图
就像是:
return('nameOfTheView')->with('shop', $shop);
在nameOfTheView
刀片文件中,您应该使用返回的变量并按照预期的方式显示它
请看一下https://laravel.com/docs/5.7/views#passing-data-to-views
您可以在其中找到有关将数据传递到视图的更多信息
答案 2 :(得分:0)
不确定从哪里开始。 您不应在视图中调用控制器。 将数据发布到控制器方法时,或者要将用户重定向到该页面之外时(例如,未经授权时),应使用redirect()。
假设您有路径/ my-shop
Route::get('/my-shop', 'ShopController@showShop')
;
在ShopController中:
public function showShop()
{
$shop = DB::table('shop')->where('userid',request()->user()->id);
if($shop){
return view('shopDetails', compact('shop')); // we are calling view with shop details
}
return view('addShop'); // we call the form so user can create new shop
}
有很多方法可以做到这一点。我现在可以想到的最简单。 shopDetails.blade.php和addShop.blade.php是视图,它们不能用于route()或return或类似的东西。
基本上,当您打开URL时,Laravel会检查路由,调用控制器,从您的方法中执行数据(您可以在其中收集数据),然后调用视图