为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel - 如何使用表单将变量从视图传递到控制器

Laravel - 如何使用表单将变量从视图传递到控制器

PHP
跃然一笑 2023-08-06 10:34:28
我正在使用 Laravel 7 构建一个请求系统。在索引页面中,有一个供用户填写的表单和一个提交按钮。如果单击该按钮,表格中的数据将通过电子邮件发送给主管。主管收到的电子邮件、所有用户输入数据将与&ldquo;批准&rdquo;按钮和&ldquo;拒绝&rdquo;按钮一起列出。如果单击&ldquo;批准&rdquo;按钮,用户输入的数据将存储在数据库中。所有用户输入数据都存储在电子邮件模板视图中$data并可以在电子邮件模板视图中访问。那么,在电子邮件模板中,如何将用户输入数据传递给Auth::user()->id控制器以便开始存储过程?是否可以将刀片变量从<form>电子邮件模板视图传递到控制器,以便我可以使用<button>?更新:index.blade.php:<form action="/sendSupervisor" method="post">  <input type="text">  <input type="text">  <button type="submit">Send</button></form>网页.php:Route::post('/sendSupervisor', 'CatViewController@sendSupervisor')->middleware('auth')->middleware('verified');CatViewController.php:// one of the methodspublic function sendSupervisor()    {        $data = request();        Mail::to('supervisor@abc.com')->send(new ApprovalMail($data));        return redirect('/');    }批准.blade.php:<!-- Email Template -->User Input: {{ $data->name }}<form action="/approve">    <button>Approve</button></form><form action="/reject">    <button>Reject</button></form>
查看完整描述

3 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

电子邮件不是浏览器,几乎在所有情况下<form>标签都不起作用。您无法从电子邮件中检索用户输入,但是在您的情况下,如果电子邮件中有两个按钮,并且该电子邮件正在发送给系统中存在的用户,并且您收到的输入是“接受”或“拒绝” ' 根据他们点击的按钮,这是可行的。

您可以拥有两条可公开访问的路由,并构建两个带有 href 的“按钮”来执行这些操作。喜欢:

Route::get('email/accept/{user_id}', 'EmailController@accept');
Route::get('email/reject/{user_id}', 'EmailController@reject');

然后链接到您的电子邮件寺庙中的这些路线,例如:

<a href="{{ action('EmailController@accept', ['user_id' => $user->id ]) }}">Accept</a>
<a href="{{ action('EmailController@reject', ['user_id' => $user->id ]) }}">Reject</a>

然后在该控制器中,您可以根据这些方法中的 id 解析用户,并且可以执行您想要的任何逻辑。

请注意:由于这些链接需要公开访问,因此使用 id 并不理想。您应该生成某种令牌来解析用户。


查看完整回答
反对 回复 2023-08-06
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

更好的方法:


最好在用户发布请求后使用名为“状态”的列标志保存用户请求,其中包含(“待处理”、“已批准”、“已拒绝”),然后向主管发送电子邮件


索引刀片


<form action="/sendRequest" method="post">

     <input type="text">

     <input type="text">


     <button type="submit">Send</button>

</form>

网页.php


Route::get('/sendRequest', 'MyController@sendRequest)

我的控制器.php


public function sendRequest(Request $request){

       // UserRequest table should has column 'status' with default value 'Pending'

       $userRequest = UserRequest::create($request->all());

       Mail::to('supervisor@abc.com')->send(new ApprovalMail($userRequest));


       return redirect('/');

}

电子邮件模板应仅通知主管对请求采取行动,并使用“采取行动”按钮在浏览器中打开一个页面供主管采取行动。


电子邮件模板.blade


<!-- User data displayed for example in a table --> 

<a href={{ route('takeAction', $userRequest->id) }}>

   <button> Take Action <button>

</a>

网页.php


Route::get('/take-action/{requestId}', 'SupervisorController@takeAction')

     ->name('taleAction');

SupervisorController.php


public function takeAction($requestId){

       $userRequest = UserRequest::find($requestId);

       return view('take-action', [$userRequest]);

}

采取行动.blade


<-- User data displayed for example in a table --> 

<form method='POST' action={{ route('takeActionPost', $userRequest->id) }}>

      @csrf

      <input type='hidden' name='action' value='Approved'>

      <button type='submit'>Approve</button>

</form>


<form method='POST' action={{ route('takeActionPost', $userRequest->id) }}>

      @csrf

      <input type='hidden' name='action' value='Rejected'>

      <button type='submit'>Rejected</button>

</form>

网页.php


Route::post('/take-action/{requestId}', 'SupervisorController@takeActionPost')

     ->name('takaActionPost');

SupervisorController.php


public function takeActionPost(Request $request, $requestId){

       $userRequest = UserRequest::find($requestId);

       $userRequest->update(['status', $request->action]);

当然我在这里使用的名字很糟糕,我只是想解释一下我的想法


查看完整回答
反对 回复 2023-08-06
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

在表单中添加隐藏输入字段,其值为用户数据。但我认为您的系统有更好的设计,我将在单独的答案中进行解释。



查看完整回答
反对 回复 2023-08-06
  • 3 回答
  • 0 关注
  • 66 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信