You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在多个Laravel视图传递变量实现更新?求更优解决方案

跨视图传递变量执行UPDATE的简化方案

嘿,针对你在Laravel里需要在editScadenza和elaborazioneScadenza两个视图间传递变量完成UPDATE操作的需求,我整理了几个更简洁优雅的方案,不用重复写查询逻辑或者手动传递ID:

方案1:路由模型绑定+统一数据传递

Laravel的路由模型绑定可以帮你自动获取模型实例,避免手动调用find($id),同时能轻松把模型传递到多个视图:

第一步:定义带模型绑定的路由

// web.php
Route::get('/scadenze/edit/{scadenza}', [ScadenzaController::class, 'edit'])->name('scadenze.edit');
Route::get('/scadenze/elaborazione/{scadenza}', [ScadenzaController::class, 'showElaborazione'])->name('scadenze.elaborazione');
Route::put('/scadenze/update/{scadenza}', [ScadenzaController::class, 'update'])->name('scadenze.update');

第二步:修改控制器方法

利用路由模型绑定直接注入Scadenza实例,不用手动查询:

// ScadenzaController.php
public function edit(\App\Scadenza $scadenza) { 
    // 直接把模型传给editScadenza视图
    return view('scadenze.editScadenza', compact('scadenza')); 
}

public function showElaborazione(\App\Scadenza $scadenza) {
    // 把同一个模型实例传给elaborazioneScadenza视图
    return view('scadenze.elaborazioneScadenza', compact('scadenza'));
}

public function update(Request $request, \App\Scadenza $scadenza) { 
    $this->validate($request,[ 
        'titolo'=>'required', 
        'termine_stimato'=>'required', 
        'responsabile'=>'required' // 补全你截断的验证规则
    ]); 

    // 直接用注入的模型执行更新
    $scadenza->update($request->only(['titolo', 'termine_stimato', 'responsabile']));

    // 更新完成后重定向到elaborazione视图,自动带上模型
    return redirect()->route('scadenze.elaborazione', $scadenza);
}

第三步:视图中使用模型

在两个视图里直接使用$scadenza变量即可,比如editScadenza.blade.php:

<form action="{{ route('scadenze.update', $scadenza) }}" method="POST">
    @csrf
    @method('PUT')
    <input type="text" name="titolo" value="{{ $scadenza->titolo }}">
    <!-- 其他表单字段 -->
    <button type="submit">更新</button>
</form>
<!-- 跳转到elaborazione视图的链接 -->
<a href="{{ route('scadenze.elaborazione', $scadenza) }}">前往处理页面</a>

方案2:隐藏字段传递ID(适合表单流场景)

如果elaborazioneScadenza是在UPDATE操作完成后跳转的页面,也可以通过表单隐藏字段传递ID,然后在对应方法中查询模型:

在editScadenza视图添加隐藏字段

<form action="{{ route('scadenze.update', $scadenzaRecuperata->id) }}" method="POST">
    @csrf
    @method('PUT')
    <input type="hidden" name="scadenza_id" value="{{ $scadenzaRecuperata->id }}">
    <!-- 其他表单字段 -->
</form>

修改update方法重定向到elaborazione视图

public function update(Request $request, $id) { 
    $this->validate($request,[ 
        'titolo'=>'required', 
        'termine_stimato'=>'required', 
        'responsabile'=>'required'
    ]); 

    $scadenza = \App\Scadenza::findOrFail($id);
    $scadenza->update($request->validated());

    // 重定向时带上ID,在elaborazione方法中查询
    return redirect()->route('scadenze.elaborazione', $id);
}

public function showElaborazione($id) {
    $scadenza = \App\Scadenza::findOrFail($id);
    return view('scadenze.elaborazioneScadenza', compact('scadenza'));
}

方案3:视图共享(适合高频复用场景)

如果这两个视图属于同一组功能,经常需要Scadenza模型,可以在控制器构造方法中共享数据(仅对当前控制器的方法生效):

public function __construct()
{
    $this->middleware(function ($request, $next) {
        if ($request->route('scadenza')) {
            $scadenza = \App\Scadenza::findOrFail($request->route('scadenza'));
            view()->share('scadenza', $scadenza);
        }
        return $next($request);
    });
}

这样在edit和showElaborazione方法中就不用手动传模型到视图了,两个视图直接用$scadenza即可。


内容的提问来源于stack exchange,提问作者Carmine Rub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:19:49