Laravel在刀片中使用控制器

时间:2018-08-31 12:10:15

标签: php laravel

我刚刚开始学习Laravel,我陷入了一个问题,我想从数据库中获取数据并将其传递到刀片(视图)文件,然后在另一个视图文件中使用此视图,并希望将一个变量传递给控制器,但出现此错误:

  

“找不到类'adsController'”

web.php

Route::get('seller/panel', 'sellerController@panel');

panel.blade.php

@include('seller\hook\ads')

sellerController.php

public function panel(){
    $ads = DB::table('ads')->get();
    return view('hook\ads', ['ads' => $ads]);
}

adsController.php

class adsController extends Controller {
  public function getStatus($p) {

    if ($p == 'something') {
      $status = 'yeah';
    } else {
      $status = 'blah blahe';
    }
    return view('hook\ads', $status);
  }
}

ads.blade.php

<div class="ads">
@foreach ($ads as $ad)
{{ $ad->name }}
{{ adsController::getStatus($ad->approved) }}
@endforeach
</div>

因此,如您所见,我正试图从sellerController.php的数据库中获取数据,然后将其传递给ads.blade.php,然后我想在ads.blade.php中使用adsController.php的功能,但找不到adsController

对不起,我是laravel的新手

4 个答案:

答案 0 :(得分:1)

正如大家所说,不建议从视图中调用控制器。 这就是我要做的:

在您的模型中:

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Ad extends Model{
    public function getStatus()
    {
        return $this->approved == 'something' ? 'yeah' : 'blah blaehe';
    }
}

您认为:

<div class="ads">
    @foreach ($ads as $ad)
        {{ $ad->name }}
        @include('hook.ads', ['status' => $ad->getStatus()])
    @endforeach
</div>

在您的控制器中:

public function panel(){
    $ads = \App\Ad::all();
    return view('hook\ads', ['ads' => $ads]);
}

答案 1 :(得分:0)

尽管我不推荐您尝试实现的方法,您仍应尝试此操作。

{!! app('App\Http\Controllers\adsController')->getStatus($ad->approved) !!}

它应该工作,但这是非常错误的。

答案 2 :(得分:0)

在刀片文件的开头,您可以添加以下内容

@php
    use App\Http\Controllers\adsController as adsController;
@endphp

然后在刀片模板上,可以像在此一样使用控制器。 但是,直接使用它是一个非常不好的习惯。

由于您是Laravel的新手,因此请更改该编码做法。

如果您希望始终在特定刀片视图上显示该数据,则可以使用某种服务提供商。

答案 3 :(得分:0)

大多数情况下,当控制器中的名称空间声明错误时,您将收到此错误。典型的情况是,您使用Artisan生成控制器存根,然后将其从默认位置移到其他位置。

在某些情况下,您需要运行:

composer dumpautoload

生成新的优化的类加载器映射。