所以我在表单标签中有四个用户输入:
<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');
查看会话文档。