Laravel: Как динамически создавать кнопки ссылок на виде? - PullRequest
0 голосов
/ 27 марта 2019

Я делаю сайт администрации колледжа, где профессор может войти.

У меня есть панель инструментов, где должна быть размещена моя динамически сгенерированная кнопка: (сейчас у нее просто фиктивные кнопки!)

dashboard Сгенерированный этим файлом представления, который я скоро должен буду изменить:

<div class="container d-flex flex-column align-items-center justify-content-center">
<h1>IA DASHBOARD</h1>
<br>
    <div class="grid2">
            <a href="{{ url('/subcode/{subcode}') }}" ><button class="btn btn-outline-primary btn-custom-outline-primary btn-custom">SUBCODE 1</button></a>
            <a href="{{ url('/subcode/{subcode}') }}" ><button class="btn btn-outline-primary btn-custom-outline-primary btn-custom">SUBCODE 2</button></a>
            <a href="{{ url('/subcode/{subcode}') }}" ><button class="btn btn-outline-primary btn-custom-outline-primary btn-custom">SUBCODE 3</button></a>
        </div>


Таблицы в базе данных:

  • таблица iamarks содержит данные (информация об ученике и оценки), которые должны отображаться после /subcode/{subcode}, сужает их до записей только тех студентов, которые в классе назначены текущему вошедшему в систему профессору.
  • classroom_mappers - таблица, используемая для отображения профессора в классе с предметом. Это гарантирует, что в одном классе есть только один профессор по определенному предмету.

маршруты в настоящее время в моем web.php :

route::get('/ia', 'IAController@show')->middleware('auth');
Route::get('/subcode/{subcode}', 'IAController@showTable')->middleware('auth');

... а вот методы внутри моего контроллера:

//shows buttons to the user:
public function show(){
    $subcodes = DB::table('classroom_mappers')
                    ->select('subcode')
                    ->where([['PID','=', auth()->user()->PID]])
                    ->get();
    return view('ia',compact('subcodes'));
}

//when user clicks a button, subcode is to be generated and a table is to be shown:
//it works, I tried it by manually typing in subcode value in URL.

public function showTable($subcode){
    $sem = DB::table('classroom_mappers')
               ->where([['PID','=', auth()->user()->PID],
                        ['subcode','=',$subcode]])
               ->pluck('semester');
    $division = DB::table('classroom_mappers')
                    ->where([['PID','=', auth()->user()->PID],
                             ['semester','=',$sem],
                             ['subcode','=',$subcode]])
                    ->pluck('division');
    $data = DB::table('iamarks')
                ->where([['semester','=',$sem],
                         ['division','=',$division],
                         ['subcode','=',$subcode]])
                ->get();

    return view('subcode',compact('data'));
}


Моя проблема:

Чтобы иметь возможность динамически генерировать {subcode} в URL, я хочу создать кнопки на приборной панели, используя данные $subcodes. Контроллер передает $subcodes (массив предметных кодов, принадлежащих зарегистрированному профессору), которые должны быть превращены в кнопки из метода show().

Кнопки должны иметь имя {subcode} и при нажатии должны добавлять тот же код темы в URL, что и {subcode}.

  1. Как использовать $subcodes и динамически создавать кнопки?
  2. Как сделать так, чтобы кнопки, сделанные для одного пользователя, не были видны другому пользователю?

Ответы [ 3 ]

0 голосов
/ 28 марта 2019

Мне удалось найти решение, благодаря Air Petr.

Очевидно, вы не можете вкладывать синтаксис блейдов, как {{some_stuff {{ more_stuff }} }}, и он генерирует неправильный код php. Я изменил решение Air Petr до:

<div class="grid2">
    @foreach ($subcodes as $subcode)
        <a href="<?php echo e(url('/subcode/'.$subcode->subcode));?>">
            <button class="btn btn-outline-primary btn-custom-outline-primary btn-custom">
                <?php
                    echo e($subcode->subcode);
                ?>
            </button>
        </a>
    @endforeach
</div>

Он генерирует кнопки отлично. Кнопки для одного пользователя не видны другому, так как я использую ограничение PID в запросе (['PID', '=', auth () -> user () -> PID]).

0 голосов
/ 28 марта 2019

Передайте массив паролей для просмотра:

$subcodes = []; // Array retrieved from DB
return view('subcode', compact('subcodes'));

И в subcode.blade.php выполните цикл для каждого подкода:

<div class="grid2">
  @foreach($subcodes as $subcode)
  <a href="{{ url('/subcode/' . $subcode->subcode) }}">
    <button class="btn btn-outline-primary btn-custom-outline-primary btn-custom">SUBCODE {{ $subcode->subcode }}</button>
  </a>
  @endforeach
</div>
0 голосов
/ 27 марта 2019
  1. Вы можете зациклить свои коды для создания кнопок.Примерно так (это для шаблонного движка «blade»):
<div class="grid2">
    @foreach ($subcodes as $subcode)
        <a href="{{ url('/subcode/'.$subcode->subcode) }}" ><button class="btn btn-outline-primary btn-custom-outline-primary btn-custom">{{ $subcode->subcode }}</button></a>
    @endforeach
</div>
Поскольку вы используете ограничение PID в запросе (['PID','=', auth()->user()->PID]), вы получите кнопки для этого конкретного PID.Так что проблем нет.
...