Php laravel中的随机图像
我有一个名为random_img的数据库表。里面有10行10幅图像 我将从公共/图像/随机中提取图像 我想使用数据库,这样我就可以将循环设置为Random take(1)。我想在我的英雄形象中使用。(每页刷新时都有新图像) 我将把数据库查询放在哪里,以便全局使用它?或者如何使用我的Php laravel中的随机图像,php,laravel,laravel-5,laravel-5.5,Php,Laravel,Laravel 5,Laravel 5.5,我有一个名为random_img的数据库表。里面有10行10幅图像 我将从公共/图像/随机中提取图像 我想使用数据库,这样我就可以将循环设置为Random take(1)。我想在我的英雄形象中使用。(每页刷新时都有新图像) 我将把数据库查询放在哪里,以便全局使用它?或者如何使用我的随机imgscontroller,使其在全球范围内使用 我创建了一个路由文件,因此可以在需要时将其用作include 路线: Route::post('/layouts/inc/random-img','RandomI
随机imgscontroller
,使其在全球范围内使用
我创建了一个路由文件,因此可以在需要时将其用作include
路线:
Route::post('/layouts/inc/random-img','RandomImgsController@randomimg')->name('random-img');
@include('layouts.inc.random-img')
@foreach ($randomimg as $rand)
<span class="hero-image">
<img src="/images/random/{{$rand->file_name}}" class="img--max--hero blur-img">
</span>
@endforeach
包括:
Route::post('/layouts/inc/random-img','RandomImgsController@randomimg')->name('random-img');
@include('layouts.inc.random-img')
@foreach ($randomimg as $rand)
<span class="hero-image">
<img src="/images/random/{{$rand->file_name}}" class="img--max--hero blur-img">
</span>
@endforeach
内部包含:
Route::post('/layouts/inc/random-img','RandomImgsController@randomimg')->name('random-img');
@include('layouts.inc.random-img')
@foreach ($randomimg as $rand)
<span class="hero-image">
<img src="/images/random/{{$rand->file_name}}" class="img--max--hero blur-img">
</span>
@endforeach
这就是我希望在网站的每个页面上实现的目标:
@php
$randomimg = DB::table('randomimg')->orderBy(DB::raw('RAND()'))->get()->take(1);
@endphp
@foreach ($randomimg as $rand)
<span class="hero-image">
<img src="/images/random/{{$rand->file_name}}" class="img--max--hero blur-img">
</span>
@endforeach
在任何视图中,我都可以使用{{$foo}}
从图像表中获取一个随机行,但数据以如下字符串形式出现:
<span class="hero-image">
<img
src="{{ $image->url() }}"
class="img--max--hero blur-img" />
</span>
Route::get('/', function () {
$image = App\Image::random();
return view('home', compact('image');
});
public function compose(View $view)
{
$view->with('image', Image::random());
}
[{“id”:10,“alt”:“Image alt Tag”,“title”:“Image title”,“file_name”:“10.jpg”}]
当我试图只抓取像这样的单个列时,{{$foo->file_name}
我得到一个错误:
此集合实例上不存在属性[文件名]
我如何获取这样的单个列:{{{$foo->alt}}
,{{$foo->title}
和{{$foo->file_name}
然后在我的视图中干净地输出它们?例如,我需要{{$foo->file_name}
这样渲染:5.jpg
更新2:
我想出来了。必须使用@foreach
,因为我使用的是get()
方法
@foreach($foo as $f)
{{$f->file_name}}
@endforeach
我仍然想知道是否有一种方法可以不用get()方法来实现它。不过,这会起作用。首先,您不能在刀片模板中包含路由。实际上,您要做的是将一个AJAX请求从您的刀片模板发送到您创建的用于检索随机图像的路由。然而 在这种情况下,控制器似乎是错误的逻辑位置 假设您的表有一个关联的雄辩模型,一个简单的选项是在
RandomImage
模型上定义一个方法(可能只是称为Image
)
这样,您只需使用图像
模型生成随机图像并将其传递给您想要的任何视图。然后也不需要查询每个页面上的每个图像。每个请求只能查询一个图像
想象一下,如果视图中的代码可以如下所示:
<span class="hero-image">
<img
src="{{ $image->url() }}"
class="img--max--hero blur-img" />
</span>
Route::get('/', function () {
$image = App\Image::random();
return view('home', compact('image');
});
public function compose(View $view)
{
$view->with('image', Image::random());
}
您可以使用图像上的查询范围
模型来实现这一点:
public function scopeRandom($query)
{
return $query->inRandomOrder()->first();
}
编辑
如果您希望在网站中的多个甚至所有视图中使用此功能,可以使用视图生成器:
您的撰写方法如下所示:
<span class="hero-image">
<img
src="{{ $image->url() }}"
class="img--max--hero blur-img" />
</span>
Route::get('/', function () {
$image = App\Image::random();
return view('home', compact('image');
});
public function compose(View $view)
{
$view->with('image', Image::random());
}
视图生成器将在您的AppServiceProvider
中注册,或在新的提供商(如Composer-ServiceProvider
)中注册。在所需的引导方法内部:
public function boot()
{
// Using class based composers...
View::composer(
'*', 'App\Http\ViewComposers\ImageComposer'
);
}
其中,*
表示您希望将此编写器应用于所有视图。我喜欢您的逻辑,但我希望在我的网站的每个页面上使用随机图像。在你展示的内容中,我将如何实现这一点?我更新了我的问题,我以前是如何在普通php中完成的。我明白你现在的要求了。我更新了我的答案。我越来越接近于弄明白它,但在一个问题上卡住了。请参见我的问题的更新。谢谢我想出来了。我必须使用@foreach
,因为我使用的是get()
@echo,对此我深表歉意。那是我的错误。如果只需要一个随机图像,可以调用image::random()代码>