【问题标题】:Passing data from view to controller in Laravel在 Laravel 中将数据从视图传递到控制器
【发布时间】:2020-04-15 22:16:05
【问题描述】:

我知道通过 url 传递记录 ID 通常不是一个好主意,但我想知道在我的情况下如何避免它:

我的目标是在用户仪表板上列出工作状态并允许用户调整状态。

我创建视图并使用会话将变量传递给它:

userController.php

public function getdashboard()
    {
       //reading the user information
    $arrPageData['user'] = Sentry::getUser();
       //reading the job interviews
    $arrPageData['jobInterviews'] = JobInterview::readCurrentInterviews($this->userID);

    return View::make('clients.dashboard', $arrPageData);
    }

这部分效果很好,我不在路线中使用记录 ID。我在仪表板视图中遍历 jobInterviews。根据数据库表中列出的状态,我给用户选项

查看文件:dashboard.blade.php (sn-p)

@foreach ($jobInterviews as $interviews)
    @if ($interviews->j == $job->id)
        <tbody>
        <tr>
        <td>
        {{$interviews->contact_name}}
        @if ($interviews->status == 'interview request accepted')

    <a href="#"  class="btn btn-danger btn-small" data-toggle="modal" data-target=".mymodal{{ $interviews->interview_id }}">Hire</a>
       @elseif ($interviews->status == 'hired')
        <button id="complete" class="btn btn-info btn-small">Mark Project Complete</button>
        @endif
        </td>
        <td>{{$interviews->status}} </td>
        </tr>
        </tbody>
         ...

我遇到的问题是为了完成作业状态更改,我正在调用该方法并传入记录ID:

仍在dashboard.blade.php中

<form action="../jobs/offer/{{$interviews->interview_id}}" method="post">

然后路由通过:

Route::post('/jobs/offer/{id}','JobController@jobOffer');

一切都如我所愿,但从安全的角度来看,我认为我的做法并不正确。从我遍历的数组中获取数据时,除了使用路由中的记录 id 之外,还有更好的方法来调用 jobOffer 方法并更改状态吗?

提前感谢您的帮助。

【问题讨论】:

  • 将其添加为表单变量,&lt;form action="../jobs/offer" method="post"&gt;&lt;input type="hidden" name="id" value="{$interviews-&gt;interview_id}"&gt; 不是路由参数,然后以正常方式访问它 - 无论 $_POST['id'] 周围的 laravel 包装器是什么
  • @user574632 用户不能同时更改隐藏字段的默认值吗?
  • 是的,他们可以——您总是需要验证用户输入。如果您担心一个用户可以编辑另一个用户的详细信息,那么您需要重构以包括一些检查服务器端,该用户实际上可以访问详细信息,sudo 代码:if(user-&gt;canEdit($id){//do edit}
  • @user574632 好的,谢谢。这为我解决了这个问题。我很感激。
  • 发送 bu 操作和路由方法在用户的控制之下,因为它们出现在 url 中。

标签: php laravel laravel-4


【解决方案1】:

你可以试试这个:

{{ Form::open(array('action' => array('JobController@jobOffer', $interviews->interview_id))) }}
    <!-- Rest of the form fields -->
{{ Form::close() }}

这样您就不需要手动添加csrf/_method 输入,默认情况下METHOD 将是POST,因此您可以省略它。

【讨论】:

  • 可以通过jquery提交这样包含变量的表单吗?
  • Articles 解释了从控制器到视图的传递数据,即关联数组。 devtrainings.com/2016/04/…
猜你喜欢
  • 2017-01-29
  • 1970-01-01
  • 2019-04-15
  • 2015-07-25
  • 2017-09-03
  • 2016-01-30
  • 2018-06-11
  • 2017-12-02
相关资源
最近更新 更多