当我在控制器中使用该变量时,我在AppServiceProvider
中设置了所有视图的变量:
未定义变量
AppServiceProvider.php
View::composer('*', function ($view) {
$ProductSettings = ProductSetting::all();
foreach($ProductSettings as $psetting){
$show_unavailable = $psetting->show_unavailable;
$show_quantities = $psetting->show_quantities;
$product_pagination = $psetting->pagination;
$max_short_desc = $psetting->max_short_desc;
$allow_delivery_time = $psetting->allow_delivery_time;
$addtocart_on_attribute = $psetting->addtocart_on_attribute;
$outofstock_lable = $psetting->outofstock_lable;
$product_orderby = $psetting->orderby;
}
$view->with('show_unavailable', $show_unavailable);
$view->with('show_quantities', $show_quantities);
$view->with('product_pagination', $product_pagination);
$view->with('max_short_desc', $max_short_desc);
$view->with('allow_delivery_time', $allow_delivery_time);
$view->with('addtocart_on_attribute', $addtocart_on_attribute);
$view->with('outofstock_lable', $outofstock_lable);
$view->with('product_orderby', $product_orderby);
});
控制器
//codes...
$products = Product::whereHas('categories', function ($query) use ($slug) {
$query->where('slug', $slug);
})->paginate($product_pagination);
//codes...
根据我的数据库值,product_pagination
设置为12
,这意味着我的代码类似于:->paginate(12);
知道为什么会出现未定义的错误吗?
table
答案 0 :(得分:2)
根据评论,我将假定它会起作用:
$products = Product::whereHas('categories', function ($query) use ($slug) {
$query->where('slug', $slug);
})->paginate(ProductSetting::first()->pagination);
由于product_settings
表中只有一行,因此您只需访问该表的第一行,就可以从那里访问所需的任何列。
基于响应,显然以上内容“太长”。
对于这个问题,我唯一的其他选择是:
App::singleton('product_settings', function () {
return ProductSetting::first();
});
在AppServiceProvider
方法内的boot
(或您选择的任何提供者)中编写此方法。
然后,可以在任何地方使用以下代码:
app('product_settings')->pagination;
// or, more simply:
app('product_settings')-><some column name>;
如果您认为还有太多代码,则可以使用与singleton
方法相同的格式来注册原始变量,然后在变量之后添加-><some column name>
。第一个方法调用。
上面的编辑与原始解决方案没有任何不同,仍然会在每次调用app
方法时进行查询。
如果要将每个控制器的数据库调用保持为一次,则可以将ProductSetting::first()
存储到BaseController上:
class BaseController extends \Controller
{
protected $product_settings;
public function __construct()
{
// Fetch the Site Settings object
$this->product_settings = ProductSetting::first();
}
}
然后在每个控制器中可以调用$this->product_settings->pagination
。