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>
数据库中的表:
- table
iamarks
包含在 /subcode/{subcode}
将其缩小到仅包含在class 分配给当前登录的教授。
classroom_mappers
是一个 table,用于将教授映射到有学科的 class 房间。它确保一个 class 房间只有一位教授负责特定学科。
目前在我的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}
相同的主题代码。
- 如何使用
$subcodes
并动态制作按钮?
- 如何确保为一个用户制作的按钮对另一个用户不可见?
- 您可以循环代码来创建按钮。类似这样的东西(用于 "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 的按钮。所以没问题。
感谢 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>
我正在制作一个教授可以登录的大学管理网站。
我有一个仪表板,应该放置动态生成的按钮:(现在它只有虚拟按钮!)
<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>
数据库中的表:
- table
iamarks
包含在/subcode/{subcode}
将其缩小到仅包含在class 分配给当前登录的教授。 classroom_mappers
是一个 table,用于将教授映射到有学科的 class 房间。它确保一个 class 房间只有一位教授负责特定学科。
目前在我的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}
相同的主题代码。
- 如何使用
$subcodes
并动态制作按钮? - 如何确保为一个用户制作的按钮对另一个用户不可见?
- 您可以循环代码来创建按钮。类似这样的东西(用于 "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 的按钮。所以没问题。
感谢 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>