Laravel使用Ajax和View Composer

时间:2014-12-31 12:53:14

标签: ajax laravel

我有一个视图作曲家,我正在使用它来计算我正在创建的应用程序中的所有变量(这是我包含的很多部分)。它本质上是一个更复杂的版本:

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'], 'Acme\Composers\BasketComposer');

但是,我只是将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数组。

2 个答案:

答案 0 :(得分:2)

查看作曲家很不错,但它们适用于观看。当您返回JSON时,您不会使用视图,但

return Response::json($data);

这意味着不会呈现任何视图。我在模型中的函数内移动了作曲家的所有逻辑。 (看起来你已经用Giftbox::getTotal()

然后在控制器中调用该方法

$giftbox_items_total = Giftbox::getTotal();

答案 1 :(得分:-1)

return Response::json(['html' => (string)View::make('cart.widget')]);