在视图中调用第二个控制器函数的最佳方法

时间:2015-07-09 14:55:40

标签: laravel laravel-5

我的路线指定了函数show()。

/**
 * Finds the primary photo within JSON product field
 * 
 * @param $product
 * @return string
 */
public function primaryPhoto($product) {

    // decode JSON

    return $photo;
}

/**
 * Grabs necessary products for detailed product view
 * 
 * @param $sku
 * @return Response
 */
public function show($sku) {

    $product = // products by sku

    $related = // related products for $product

    return view('cart.product', compact('product', 'related'));
}

以上是我的控制器的相关代码。函数primaryPhoto从函数show()获取输出,并在序列化的blob中检索主照片。

最初这个函数primaryPhoto在刀片视图中,但在视图中有功能似乎有点乱。

我想知道从视图中调用该函数的最佳方法,并且仍然能够传递$ product或$ related参数。

{!! primaryPhoto($product) !!}

非常感谢。

4 个答案:

答案 0 :(得分:0)

在控制器中有一个功能,然后期待打电话是一个坏主意,据我说,你可以做这些事情:

  1. 向Product模型添加方法,例如image()并在方法中使用$this来处理和回显或返回图像。

    class Product extends Eloquent
    {
        //other stuff
        function primaryPhoto()
        {
            //Process and return
        }
    }
    
  2. routes.php文件中定义一个处理图像的功能。

答案 1 :(得分:0)

我在您的产品型号上使用了访问器。

class Product {
  public function getPrimaryPhotoAttribute($value) {
    // decode JSON
    return $photo;
  }
}

然后你可以在视图中执行此操作:

{{ $product->primaryPhoto }}
{{ $related->primaryPhoto }}

答案 2 :(得分:0)

感谢所有帮助。我实际上从其他地方找到了合适的回应。

我将该方法从控制器中取出,然后在demonstration

之后创建了一个app / helpers.php文件

这使它全球可用。

答案 3 :(得分:0)

您应该尝试从视图中调用其他控制器方法。控制器将其数据传递给视图;视图不会询问控制器方法的数据。

相反,请抓取控制器操作中的主要照片,然后将其与您的其他数据一起传递到您的视图中:

public function show($sku)
{
    $product = Product::findBySku();

    $primaryPhoto = $this->primaryPhoto($product);

    $related = Product::relatedTo($product);

    return view('cart.product', compact('primaryPhoto', 'product', 'related'));
}

但是,如果产品包含主要照片,我会将其添加到您的Product模型中。