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


How to store user input into a variable and use that information for another variable

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

<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变量中。所以我不需要将输入存储到数据库中,我需要在两个视图之间共享它。有人能帮我吗?

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

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

然后你可以在其他页面上访问这些数据:

$_SESSION['competitorUrl1']

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

以下是很久以前给我的两条通用编程建议,我认为它们在这里很相关。(我在下面也给出了一个更直接的答案)

关注点分离

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

将与操作数据和呈现数据有关的任何内容(即您的关注点)分离,使代码更容易推理和思考。

避免全局参数

此外,避免直接使用全局变量和超全局变量,如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')

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

实际上是在回答你的问题

如果你正在做我认为的事情,那么你正试图在视图之间"横向"传递数据,并意识到这很尴尬:)

如果是这样,那么您的问题很可能有一个结构或体系结构解决方案。

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

例如,请求对象在控制器级别是可用的(您可以注入它——请参阅文档中的方法注入示例)。

从那里,您可以获得用户输入,按照自己的意愿进行操作,并将其传递给视图。

您可以使用Flash数据:

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

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

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

然后您可以使用检索值

$value = $request->session()->get('key', 'default');

查看会话文档。