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

时间:2019-03-27 14:52:50

标签: laravel laravel-blade laravel-5.8

我正在建立一个大学管理网站,教授可以登录。

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

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'));
}


我的问题:

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

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

  1. 我如何使用$subcodes并动态设置按钮?
  2. 如何确保为一个用户创建的按钮对另一用户不可见?

3 个答案:

答案 0 :(得分:0)

  1. 您可以循环编码以创建按钮。这样的东西(用于“刀片”模板引擎):
<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','=', auth()->user()->PID]中使用PID约束,因此将获得该特定PID的按钮。因此没有问题。

答案 1 :(得分:0)

借助Air Petr,我设法找到了解决方案。

显然,您无法嵌套.idx之类的刀片语法,它会生成错误的php代码。我将Air Petr的解决方案修改为:

{{some_stuff {{ more_stuff }} }}

它完美地生成按钮。一个用户的按钮对另一个用户不可见,因为我在查询中使用了PID约束(['PID','=',auth()-> user()-> PID])。

答案 2 :(得分:0)

传递密码数组以查看:

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