【问题标题】:Saving static content into the Laravel public folder将静态内容保存到 Laravel 公用文件夹中
【发布时间】:2016-06-09 09:11:13
【问题描述】:

我在 Laravel 框架的“公共”文件夹中存储图像时遇到问题(我认为这是静态内容文件夹?如果我错了,请纠正我)。

我正在使用 faker 运行种子,它生成图像并将图像 URL 存储在表中。这一切正常,但种子本身一直失败,因为它似乎无法访问或找到我创建的公用文件夹中的文件夹。这是我的公用文件夹结构:

/公共/资产/图像

这是我的种子,应该将我的图像保存到这个文件夹中:

<?php

use Illuminate\Database\Seeder;

class ProductsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('products')->truncate();

        $faker = Faker\Factory::create();

        $limit = 30;

        for($i = 0; $i < $limit; $i++) {
            DB::table('products')->insert([
                'title'       => $faker->name,
                'SKU'         => $faker->name,
                'description' => $faker->text,
                'created_at'  => $faker->dateTime,
                'updated_at'  => $faker->dateTime,
                'images'      => $faker->image(URL::to(Config::get('assets.images')) ,800, 600, [], [])
            ]);
        }
    }
}#

“assets.images”配置文件是:

<?php
    return [
        'images' => '/assets/images'   
    ];

当我尝试运行种子来填充我的数据库时,我收到以下错误:

  [InvalidArgumentException]                                       
  Cannot write to directory "http://localhost:8931/assets/images"  

我看不出哪里出错了。任何人都可以提供任何见解吗?

【问题讨论】:

  • http://localhost:8931/assets/images 我认为这应该是http://localhost:8931/public/assets/images

标签: php laravel-5 static-content laravel-seeding


【解决方案1】:

使用辅助函数 public_path() 更改您对 URL::to 的调用,如下所示:

$faker-&gt;image(public_path(Config::get('assets.images')) ,800, 600, [], [])

【讨论】:

  • 您好。我将其更改为您的代码(并理解为什么我应该使用它),但我仍然遇到同样的错误。澄清一下,文件夹的权限也很好。
  • 你确定这绝对是同一个错误吗?没有不同的目录?没有什么例外?
  • 是的,同样的错误:[InvalidArgumentException] 无法写入目录“/var/www/public/assets/images”
  • 您能否检查这是否是您机器上的有效路径 /var/www/public/assets/images 以及您是否拥有文件夹的权限?
  • 是的,它是一个有效的路径。我从 Vagrant 框中运行 DB:seed,因为这是建立 DB 连接并托管应用程序的地方。这通常工作正常。该文件夹的权限是 james:www-data 这也很好。我很困惑为什么这不起作用
【解决方案2】:

我不是 laravel 专家,但抛出的异常看起来像是您正在尝试写入 url 而不是磁盘上的文件路径。

也许您想检查运行 php 脚本的进程所有者是否对该位置具有写入权限。

【讨论】:

  • 是的,我将函数调用更改为访问文件路径的函数调用,但仍然出现相同的错误。我的权限也可以。
猜你喜欢
  • 2017-07-26
  • 1970-01-01
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
相关资源
最近更新 更多