【问题标题】:How to pass Request Object from a form to Php如何将请求对象从表单传递到 PHP
【发布时间】:2019-11-23 05:03:20
【问题描述】:

我正在使用 Laravel 5.7 开发 Laravel 应用程序,但遇到以下问题:

  1. 我正在将请求对象“req”从控制器传递给视图。
  2. 在视图中我显示了传递给视图的请求对象的内容
  3. 我在同一个视图中有一个表单,它假设将相同的请求对象“req”转发到一个控制器,在那里我对其进行一些处理,但不知道如何发送整个请求对象而不是发送单个元素。

我想做这样的事情

<form method="post" action="/story/editorsubmit" enctype="multipart/form-data">
    @csrf

    <input type="hidden" name="fullobject" value={{ $req }}>

    <button type="submit" name="submitButton" value="edit" class="btn btn-primary">Edit</button>
</form>

【问题讨论】:

  • 您是否尝试过遍历对象属性并使用 foreach 创建隐藏的输入字段?
  • 查看您的问题,$request-&gt;flash(); 正是您可能正在寻找的一切!如果您需要打印回来,请使用$request-&gt;old('username'); 或您的表格&lt;input type="text" name="username" value="{{ old('username') }}"&gt;。在此处查看有关它的文档:laravel.com/docs/5.8/requests
  • 我应该把$request-&gt;flash()放在哪里?任何代码sn-p?

标签: php laravel forms request


【解决方案1】:

从表单提交的数据成为请求。您还缺少一些引号。

<form method="post" action="/story/editorsubmit" enctype="multipart/form-data">
    @csrf

    <input type="hidden" name="fullobject" value="{{ $req }}">

    <button type="submit" name="submitButton" value="edit" class="btn btn-primary">Edit</button>
</form>

您当前的数据可以在表单提交时使用提交属性的名称在控制器中访问。但我怀疑这会起作用,因为 $req 是一个对象,而不是一个字符串。

$object = request('fullobject');

但理想情况下,您应该分别定义属性。我假设这些隐藏元素实际上代表可编辑的表单输入?如果什么都没有改变,那么这样做是没有意义的。

编辑:添加了处理数组的方法。

<form method="post" action="/story/editorsubmit" enctype="multipart/form-data">
    @csrf

    @foreach ($req->all() as $key => $value)
        @if (is_array($value))
            @foreach($value as $v)
                <input type="hidden" name="{{ $key }}[]" value="{{ $v }}">
            @endforeach
        @else
            <input type="hidden" name="{{ $key }}" value='{{ $value }}'>
        @endif
    @endforeach

    <button type="submit" name="submitButton" value="edit" class="btn btn-primary">Edit</button>
</form>

然后提交的请求将像以前一样包含各个属性。

【讨论】:

  • 是的,这就是我的建议,但不确定这是否是最好的方法。
  • 只是一个小修正,{{ key }} 应该是 {{ $key }}。我在@endforeach 行出现数组到字符串转换错误。有些字段中包含 base64 图像文件。这可能是问题吗?
  • 抱歉打错了。我不认为它会。您的 $req 对象更有可能包含一个或多个数组值。你愿意详细说明你到底想要做什么吗?也许发布您的请求转储dd($req-&gt;all()),以便我们查看数据类型?
  • +request: ParameterBag {#44 ▼ #parameters: array:11 [▼ "_token" =&gt; "VjhQlax2U9QdWWtiY2E6rkUY1tlmdbEbcXBI4Cye" "title" =&gt; null "titleimageTemp" =&gt; "&lt;img src="data:image/jpeg;base64,/9j/4AAQ... ▶" "category" =&gt; "novalue" "description" =&gt; null "storytextTemp" =&gt; null "storytext" =&gt; null "includename" =&gt; array:1 [▼ 0 =&gt; null ] "storyprice" =&gt; null "safeforkids" =&gt; "yes" "submitButton" =&gt; "Preview" ] }
  • 它表明includename 是一个数组,正如我所料。 Base64 通常是安全的,但您没有提到它们是完整的图像标签。在这种情况下,我们需要考虑双引号。最简单的做法是将值字段切换为单引号。我可以发布一些编辑内容,让其立即生效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-12
  • 2011-04-22
  • 2022-10-18
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多