如何将用户输入存储到变量中并将该信息用于另一个变量

时间:2016-07-29 13:40:17

标签: php laravel

所以我在表单标签中有四个用户输入:

<form id="alexa-query" method="POST" enctype="application/x-www-form-urlencoded">
    <input type="text" name="ds.alexa.mainUrl" style="width:350px; border-radius:3px;">
    <input type="text" name="ds.alexa.competitorUrl1" style="width:350px; border-radius:3px;">
    <input type="text" name="ds.alexa.competitorUrl2" style="width:350px; border-radius:3px;">
    <input type="text" name="ds.alexa.competitorUrl3" style="width:350px; border-radius:3px;">
</form>

我将输入存储到四个php变量中:

<?php
if(isset($_POST['submit'])){
   $mainUrl = $_POST["ds.alexa.mainUrl"];
   $competitorUrl1 = $_POST["ds.alexa.competitorUrl1"];
   $competitorUrl2 = $_POST["ds.alexa.competitorUrl2"];
   $competitorUrl3 = $_POST["ds.alexa.competitorUrl3"];
?>

这发生在项目中此位置的刀片中:

\resources\views\users\admin\dynamic-dashboard\widget-steps\widget\general

在涉及项目的不同刀片中,我需要将这四个变量中的信息用于单个变量:

$site = $mainUrl.$competitorUrl1.$competitorUrl2.$competitorUrl3;

此刀片的位置为:

\app\Libraries\Services

我是laravel和后端编程的新手,所以如果我的问题看起来很愚蠢或者我做错了什么我很抱歉。我的想法是,我需要将来自这四个输入标签的用户输入存储在名为$site的php变量中。因此,我不需要将输入存储到数据库中,我需要在两个视图之间共享它。 有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:0)

您可以使用Flash data

  

有时您可能希望仅在下一个会话中存储会话中的项目   请求。您可以使用flash方法执行此操作。数据存储在   使用此方法的会话仅在后续会话期间可用   HTTP请求,然后将被删除。

如果您需要在会话中存储变量,可以使用

$request->session()->put('key', 'value');

然后您可以使用

检索该值
$value = $request->session()->get('key', 'default');

看看session documentation

答案 1 :(得分:0)

如果您想避免将其存储在数据库中,您是否考虑过会话?在将提交的数据保存到变量的页面上,也将其保存到会话变量中。像:

$_SESSION['competitorUrl1'] = $competitorUrl1 = $_POST["ds.alexa.competitorUrl1"];

然后您可以使用以下方式访问其他页面上的此数据:

$_SESSION['competitorUrl1']

当然,只有在大多数情况下浏览器窗口关闭之前,它才可用。

答案 2 :(得分:0)

这是我很久以前给我的两条通用编程建议,我认为这些建议与此相关。 (我在下面给出了更多直接答案)

关注点分离

理想情况下,视图中应该包含非常少的逻辑 - 如果有的话。所有这些逻辑应该直接与视图相关 - 而不是与数据相关。避免在视图中创建新变量或编辑现有变量。

将任何与处理数据和渲染数据(即你的顾虑)分开的东西都会使代码更易于推理和思考。

避免全局

另外,避免直接使用全局变量和超全局变量 - 例如PHP $_POST$_SESSION

Laravel实际上拥有所有这些包装纸,它们几乎总是更友好,更安全。通常建议使用它们。

例如,您可以从请求对象获取用户输入:

// You can use the facade anywhere in laravel
\Request::input('ds.alexa.competitorUrl1')
// or if you have the request object (like, in a controller)
$request->input('ds.alexa.competitorUrl1')

同样,不依赖于特定的全局状态会使代码更容易推理和调试!

实际上回答你的问题

如果您正在按照我的想法行事,那么您就会尝试传递数据&#34;横向&#34;在观点之间,并且已经认识到它很尴尬:)

如果是这样,您的问题可能会有结构或架构解决方案。

我认为你要做的最好是在上面视图级别(在Controller中完成,或者,如果有很多逻辑需要完成,则在另一个类中完成控制器使用),并传递给主视图,主视图可以将其传递给任何子视图。

例如,请求对象在控制器级别可用(您可以注入它 - see the example for method injection in the docs)。

从那里,您可以从中获取用户输入,随意操作它,并将其传递给视图。