Laravel重定向返回HTML

时间:2019-01-14 15:11:27

标签: php laravel

我正在尝试做某事,但是我不知道我必须使用哪种方法。我对Laravel非常陌生,这对我来说也是新的。

因此,我试图做的是在找到数据时在“商店信息”卡框中显示以下内容。见图片。 保存该信息的刀片为shopDetails.blade.php 现在,当它没有数据时,我希望它显示addShop.blade.php

enter image description here

但是我得到了

enter image description here

这是我家用刀片服务器中的代码。 (商店信息卡)

    <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">&times;</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代码作为回报而不是我希望获得的回报?还有一种更好的方法来检查记录是否存在,并显示其他形式供用户添加该记录。在这种情况下,用户可以添加一个商店。 如果用户尚未添加自己的商店,则会提示您添加它。

基本上就是我想做的。

如果用户已添加商店。 在该卡中显示商店信息 如果用户未添加商店 在该卡中显示商店注册表格

3 个答案:

答案 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会检查路由,调用控制器,从您的方法中执行数据(您可以在其中收集数据),然后调用视图