Php 如何将图像标题转换为slug并保存到数据库?拉维尔

Php 如何将图像标题转换为slug并保存到数据库?拉维尔,php,laravel,laravel-5,eloquent,laravel-4,Php,Laravel,Laravel 5,Eloquent,Laravel 4,用户可以上传图像,我希望捕获提供的$request图像标题并将其转换为slug并保存到数据库中 UploadScreenShotController@upload: public function upload(Request $request) { if (!auth()->check()) return $this->with('error', 'Session has ended. Please refresh the page and try again.');

用户可以上传图像,我希望捕获提供的$request图像标题并将其转换为slug并保存到数据库中

UploadScreenShotController@upload:

public function upload(Request $request)
{
    if (!auth()->check()) return $this->with('error', 'Session has ended. Please refresh the page and try again.');

    $request->validate([
        'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
    ]);

    $image = $request->image;
    $filename = $image->getClientOriginalName();

    $request->image->move(public_path('images/tcpa/screenshots'), $filename);

    return back()
        ->with('success', 'You have successfully uploaded an image.')
        ->with('image', $filename);
}
我的表格:

        {!! Form::open(['method' => 'POST', 'files' => 'true', 'route' => ['admin.sms.tcpa-upload-screenshot']])!!}
            {!! Form::file('image') !!}
            {!! Form::submit('Upload File') !!}
        {!! Form::close() !!}
此函数获取图像名称,但不会将其转换为slug,也不会保存在数据库中

如何将图像标题转换为slug并保存到数据库?

放置“enctype”=>“多部分/表单数据”

放置“enctype”=>“多部分/表单数据”


您可以使用Sluggable包在项目中创建slug。这个软件包提供了一个特性,当保存任何有说服力的模型时,它将生成一个独特的slug

装置 您可以通过composer安装软件包:

`composer require spatie/laravel-sluggable`
下面是一个如何实现该特性的示例:

 namespace App;
 use Spatie\Sluggable\HasSlug;
 use Spatie\Sluggable\SlugOptions;
 use Illuminate\Database\Eloquent\Model;

 class YourEloquentModel extends Model
 {
   use HasSlug;
    /**
     * Get the options for generating the slug.
    */
     public function getSlugOptions() : SlugOptions
      {
         return SlugOptions::create()
              ->generateSlugsFrom('name')
              ->saveSlugsTo('slug');
      }
 }
还要记住在数据库表中添加一个slug字段。使用Laravel移植编辑当前表

例如:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateYourEloquentModelTable extends Migration
{
 /**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('your_eloquent_models', function (Blueprint $table) {
        $table->increments('id');
        $table->string('slug'); // Field name same as your `saveSlugsTo`
        $table->string('name');
        $table->timestamps();
    });
}

}
然后,如果要使用此slug作为路由名称,请记住在模型文件中使用Laravel的隐式路由模型绑定:

/**
 * Get the route key for the model.
 *
 * @return string
 */
public function getRouteKeyName()
{
    return 'slug';
}

我认为它将帮助您

您可以使用Sluggable包在项目中创建slug。这个软件包提供了一个特性,当保存任何有说服力的模型时,它将生成一个独特的slug

装置 您可以通过composer安装软件包:

`composer require spatie/laravel-sluggable`
下面是一个如何实现该特性的示例:

 namespace App;
 use Spatie\Sluggable\HasSlug;
 use Spatie\Sluggable\SlugOptions;
 use Illuminate\Database\Eloquent\Model;

 class YourEloquentModel extends Model
 {
   use HasSlug;
    /**
     * Get the options for generating the slug.
    */
     public function getSlugOptions() : SlugOptions
      {
         return SlugOptions::create()
              ->generateSlugsFrom('name')
              ->saveSlugsTo('slug');
      }
 }
还要记住在数据库表中添加一个slug字段。使用Laravel移植编辑当前表

例如:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateYourEloquentModelTable extends Migration
{
 /**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('your_eloquent_models', function (Blueprint $table) {
        $table->increments('id');
        $table->string('slug'); // Field name same as your `saveSlugsTo`
        $table->string('name');
        $table->timestamps();
    });
}

}
然后,如果要使用此slug作为路由名称,请记住在模型文件中使用Laravel的隐式路由模型绑定:

/**
 * Get the route key for the model.
 *
 * @return string
 */
public function getRouteKeyName()
{
    return 'slug';
}

我认为,如果您可以在您的模型中使用引导方法,它将对您有所帮助

<?php

namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;

class YourEloquentModel extends Model
{
    protected static function boot()
    {
        parent::boot();

        self::creating(function ($model) {
            $model->slug = Str::slug($model->name, '-');
        });
    }
}

其余的事情你可以按照他的回答去做;例如:迁移、路由模型绑定。

如果您可以使用模型中的引导方法来完成

<?php

namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;

class YourEloquentModel extends Model
{
    protected static function boot()
    {
        parent::boot();

        self::creating(function ($model) {
            $model->slug = Str::slug($model->name, '-');
        });
    }
}
其余的事情你可以按照他的回答去做;例如:迁移、路由模型绑定