我有一个视图编辑器,我用它来计算我正在创建的应用程序的购物篮中的所有变量(这是我包含很多的部分)。它本质上是一个更复杂的版本:
public function compose($view)
{
$giftbox_total_pre = Giftbox::getTotal();
$giftbox_items_total = number_format($giftbox_total_pre, 2);
$view->with(compact(
'giftbox_items_total',
));
}
然后在我的路线中,我有:
View::composer(['layouts.bag', 'shop.basket', 'giftbox.basket'], 'AcmeComposersBasketComposer');
但是,我只是将 Ajax 添加到我的应用程序中,如果在请求后我可以从 View Composer 中获取变量,那就太好了。有没有办法做到这一点?还是在这种情况下使用作曲家是错误的东西?
例如,要添加一个没有 Ajax 的项目,我有一个类似于以下路由的控制器函数:
Route::post('/cart/add/{type?}/{quantity?}', 'CartsController@addToCart');
和控制器:
public function addToCart($type='subscription', $quantity=1)
{
$product = Product::find(Input::get('id'));
$price = $product->box_price;
Cart::insert([
'id' => $type . $product->id,
'table_id' => $product->id,
'name' => $product->name,
'price' => $price,
'quantity' => $quantity,
'cart_type' => $type,
]);
return Redirect::back()->with('success', 'Added to cart!');
}
首先,适当的,Laravel项目,所以我可能会让自己有点混乱!我可以 Ajax 提交到路由并且它工作正常,但我只是无法弄清楚如何返回购物车的体面 JSON 数组。
视图作曲家很好,但他们是为了视图。当您返回 JSON 时,您不使用视图,而是
return Response::json($data);
这意味着不会呈现任何视图。我你把作曲家的所有逻辑都移到模型上的一个函数里。(看起来你已经和Giftbox::getTotal()
了)
然后只需在控制器中调用该方法
$giftbox_items_total = Giftbox::getTotal();
return Response::json(['html' => (string)View::make('cart.widget')]);