Laravel: 如何在视图上动态创建 link 按钮?

Laravel: How to create link buttons on a view dynamically?

我正在制作一个教授可以登录的大学管理网站。

我有一个仪表板,应该放置动态生成的按钮:(现在它只有虚拟按钮!)

由这个视图文件生成,我很快就要修改它:

<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>


数据库中的表:


目前在我的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'));
}


我的问题:

为了能够在 URL 中动态生成 {subcode},我想使用数据 $subcodes 在仪表板中创建按钮。控制器将$subcodes(属于已登录教授的主题代码数组)交给show()方法,这些代码将被制成按钮。

按钮的名称应为 {subcode},单击时应在 URL 中附加与 {subcode} 相同的主题代码。

  1. 如何使用 $subcodes 并动态制作按钮?
  2. 如何确保为一个用户制作的按钮对另一个用户不可见?
  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>
  1. 由于您在查询中使用 PID 约束 (['PID','=', auth()->user()->PID]),您将获得该特定 PID 的按钮。所以没问题。

感谢 Air Petr,我设法找到了解决方案。

显然,您不能像 {{some_stuff {{ more_stuff }} }} 那样嵌套 blade 语法,它会生成错误的 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]).

传递密码数组查看:

$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>