1.url 函数将图片相对路径转换为网址(http://)
2.当数据为空时,可以使用or关键字,显示预设的数据
<img sre="{{$Merchandis->photo or 'assets/images/defualt-img.png'}}"
3.使用命令 php artisan make:middleware 建立中间件。
所有的请求都会经过handle()函数处理,请求数据$request会传入第一个变量,而下一个处理请求的函数则会传入第二个变量$next.
当处理完成且无误时,会再次将目前请求$request交给下一个处理请求的函数处理$next($request),下一个处理请求的函数可能是下一个中间件或控制器。
public function handle($request,Closure $next)
{
return $next($request);
}
4.当处理完中间件程序后,必须要注册才可以使用这个中间件。注册中间件的文件放在app/Http/Kernel.php
类文件中有三个变量:
$middleware、$middlewareGroups、$routeMiddleware
$middleware是整个Laravel应用程序共用的中间件,所有请求都会经过这些中间件的处理。
$middlewareGroups为路由中间件群组,所有Web路由请求都会经过Web的中间件群组处理,所有API路由请求都会经过API的中间件群组处理。
$routeMiddleware为个别的中间件,分别指定不同的名称给中间件类。
5.在路由中使用中间件
路由的设置可以通过个别指定中间件或路由组指定中间件的方式指定,而指定的中间件数据为数组,表示当有多个中间件需要设置时,可以数组中传入多个中间件名称进行设置。
//个别指定中间件
Route::get('/','Controller@index')->middleware(['user.auth.admin']);
//路由组指定中间件
Route::group(['middleware' => ['user.auth.admin']],function(){
})
6.表单HTTP方法设置
method_field()方法可以产生隐藏的input字段,字段名称为_method,字段值会带入该方法名称,如PUT或DELETE。
7.图片的存取
Laravel会将所有请求中的文件格式的数据,转换为Illuminate\Http\UploadedFile对象,所以可以使用这个对象的getClientOriginalExtension()方法取得文件的副文档名称。
uniqid()产生随机文件名,public_path()获得public文件夹下的相对位置的实际路径。
安装 composer require intervention/image 图片扩展包,方便的处理图片。可在config/app.php文件中设置图片扩展包。使用时在类中use Image。
return[
'providers' => [
Intervention\Image\ImageServiceProvider::class,
]
//类命名
'aliases' => [
'Image' => Intervention\Image\Facades\Image::class,
]
]
使用Image::make($photo)可以直接将图片数据对象化,然后通过->fit()函数限制图片要裁切的长款,最后使用save()函数存储文件到指定路径下,最后将图片的相对路径存到数据库中。
if (isset($input['photo'])){
// 有上傳圖片
$photo = $input['photo'];
// 檔案副檔名
$file_extension = $photo->getClientOriginalExtension();
// 產生自訂隨機檔案名稱
$file_name = uniqid() . '.' . $file_extension;
// 檔案相對路徑
$file_relative_path = 'images/merchandise/' . $file_name;
// 檔案存放目錄為對外公開 public 目錄下的相對位置
$file_path = public_path($file_relative_path);
// 裁切圖片
$image = Image::make($photo)->fit(450, 300)->save($file_path);
// 設定圖片檔案相對位置
$input['photo'] = $file_relative_path;
}
// 商品資料更新
$Merchandise->update($input);
8.商品分页显示
Eloquent Model 可使用paginate(每页数量) 进行分页。
在模板文件中可以使用->links() 显示分页按钮HTML。
// 每頁資料量
$row_per_page = 10;
// 撈取商品分頁資料
$MerchandisePaginate = Merchandise::OrderBy('created_at', 'desc')
->paginate($row_per_page);
// 設定商品圖片網址
foreach ($MerchandisePaginate as &$Merchandise) {
if (!is_null($Merchandise->photo)) {
// 設定商品照片網址
$Merchandise->photo = url($Merchandise->photo);
}
}
$binding = [
'title' => trans('shop.merchandise.manage'),
'MerchandisePaginate'=> $MerchandisePaginate,
];
return view('merchandise.manageMerchandise', $binding);
{{ $MerchandisePaginate->links() }} //模板文件中显示分页按钮HTML