我的路线指定了函数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) !!}
非常感谢。
答案 0 :(得分:0)
在控制器中有一个功能,然后期待打电话是一个坏主意,据我说,你可以做这些事情:
向Product模型添加方法,例如image()
并在方法中使用$this
来处理和回显或返回图像。
class Product extends Eloquent
{
//other stuff
function primaryPhoto()
{
//Process and return
}
}
在routes.php
文件中定义一个处理图像的功能。
答案 1 :(得分:0)
我在您的产品型号上使用了访问器。
class Product {
public function getPrimaryPhotoAttribute($value) {
// decode JSON
return $photo;
}
}
然后你可以在视图中执行此操作:
{{ $product->primaryPhoto }}
{{ $related->primaryPhoto }}
答案 2 :(得分:0)
答案 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
模型中。