Laravel использует контроллер в лезвии - PullRequest
0 голосов
/ 31 августа 2018

Я только начинаю изучать 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, затем я хочу использовать функцию adsController.php в ads.blade.php, но это может не найти adsController

Извините, я новичок в Laravel

Ответы [ 4 ]

0 голосов
/ 31 августа 2018

Чаще всего, когда вы получаете эту ошибку, когда ваше объявление пространства имен в контроллере неверно. В типичном сценарии вы генерируете заглушку контроллера с помощью Artisan, а затем перемещаете ее в другое место из местоположения по умолчанию.

В некоторых случаях вам нужно запустить:

Композитор dumpautoload

Создать новую оптимизированную карту загрузчика классов.

0 голосов
/ 31 августа 2018

В начале блейд-файла вы можете включить следующее

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

тогда на вашем шаблоне блейда вы можете использовать контроллер, как вы использовали здесь. Но это действительно плохая привычка использовать его напрямую.

Поскольку вы новичок в Laravel, измените эту практику кодирования.

Вы можете использовать своего рода сервис-провайдера, если хотите, чтобы эти данные постоянно отображались в определенном блэйд-представлении.

0 голосов
/ 31 августа 2018

Как все говорили, не рекомендуется вызывать контроллер с экрана. Вот что я бы сделал:

В вашей модели:

<?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]);
}
0 голосов
/ 31 августа 2018

Вы должны попробовать это, несмотря на то, что я не рекомендую подход, которого вы пытаетесь достичь.

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

Это должно работать, но это очень неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...