°

laravel读取器完善字段返回值

2019年课程规划及价格说明


PHP实战视频教程大全

上文中,我们在博客首页完成的文章列表的初步展示,并且遇到了一个小问题

我们原来的加载方式是:

@if ($post->image)
 <div class="post-item-image">
 <a href="post.html">
 <img src="/img/{{ $post->image }}" alt="">
 </a>
 </div>
@endif

在上面的代码中,<img src=”/img/{{ $post->image }}” alt=””>

这句话中的src地址含有/img/这样的写死的地址,如果之后我们变动了图片的地址,那么我们就要查找这些地方逐条的进行修改

如果文件数量多的话则更加麻烦,所有这里我们需要更高效的解决方法:

1、找到Post.php模型文件,加入以下代码:

public function getImageUrlAttribute($value)
    {
        $imageUrl = "";

        if ( ! is_null($this->image))
        {
            $imagePath = public_path() . "/img/" . $this->image;
            if (file_exists($imagePath)) $imageUrl = asset("img/" . $this->image);
        }

        return $imageUrl;
    }

上面的方法名为:getImageUrlAttribute  这就是一个典型的laravel的读取器,包括最新的thinkphp5版本也引入了类似的功能

其中的ImageUrl为我们自定义的部分,和我们在控制器中使用的字段保持一直即可

我们将原来的图片地址修改为: $imageUrl = asset(“img/” . $this->image); 并返回

那么当我们在模板出调用$post->$imageUrl的时候得到的就是经过处理的结果,也即拼装后的路径

这样如果后期图片路径发生变动的时候,我们只需要找到getImageUrlAttribute方法,修改其中的路径即可,非常方便

之后我们再调用图片地址的时候:

@if ($post->image_url)
 <div class="post-item-image">
 <a href="post.html">
 <img src="{{ $post->image_url }}" alt="">
 </a>
 </div>
@endif

是不是看起来比混编的src地址清爽多了。

打赏
  喜欢