这可能而不是<input name="...."/>
我可以从div
或span
获取我的价值吗?
目前我直接从数据库获取数据,基于产品ID,但由于我的产品可能有折扣,会显示与我的数据库中保存的内容不同的价格而我无法将其显示为input
所以我需要将其传递给div
或span
等
现在是我的代码:
public function addingItem(Request $request, $id)
{
$product = Product::findOrFail($id);
Cart::add(array(
'id' => $product->id,
'name' => $product->title,
'price' => $product->price, // this comes directly from products table
));
}
使用我的代码我总是会45.325
但我需要在折扣期间获得35.325
。
这就是为什么我需要通过div
传递它而不能在这里使用input
。
任何想法?
答案 0 :(得分:3)
就您的PHP代码而言,数据不是来自页面的任何特定部分,而是来自浏览器发送的HTTP请求。 HTML表单是让浏览器向该请求添加一些数据的最简单方法。这可能看起来像挑剔,但它有重要的后果。
首先,这意味着您所要求的绝对是可能的。您只需编写一些JavaScript即可在浏览器中运行,并告诉浏览器将该值添加到请求中。一种简单的方法是在表单上有一个隐藏的输入字段并在JavaScript中设置值,但您也可以创建一个完全自定义的请求并将其发送到服务器(AJAX)。
其次,这意味着任何用户都可以通过告诉他们的浏览器提交他们的价值选择而不是您的应用程序来向您的应用程序提交任何数据。因此,您必须非常小心您信任的数据,并相信浏览器向您发送价格听起来像一个非常糟糕的主意。什么是通过编辑页面上的值来阻止某人给自己100%的折扣?
在某个地方,你知道你提供的折扣。该折扣是您的应用程序的核心部分,因此视图知道要显示的折扣,应用程序的其余部分应该能够以相同的方式知道。这可能意味着将一些代码从视图中移到一个新函数中,该函数可以被应用程序的各个部分使用;这使得每次使用都更具可读性,并且意味着如果需求变得更加复杂,您就不必在很多地方进行更改。
答案 1 :(得分:1)
好吧我决定把我的代码带到控制器而不是使用ajax或其他方式,这就是我的做法:
$discounts = Discount::all();
$mytime = Carbon::now();
//get discounted price or normal price of product
$price = $product->discounts;
if($price->count() > 0 ) {
foreach($discounts as $disc){
if($disc->value_to >= $mytime) {
$price = $product->price - $disc->amount;
}
}
}else{
$price = $product->price;
}
希望对别人有所帮助。