Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

raygun's avatar

I keep getting a Whoops! There were some problems with your input. The content raw field is required

I dont understand why I keep getting this error message

Whoops! There were some problems with your input. The content raw field is required

my VideoFormFields.php use App\Video; use App\Tag; use Carbon\Carbon; use Illuminate\Contracts\Bus\SelfHandling;

class VideoFormFields extends Job implements SelfHandling { /** * The id (if any) of the Post row * * @var integer */ protected $id;

/**
 * List of fields and default value for each field
 *
 * @var array
 */
protected $fieldList = [
    'title' => '',
    'subtitle' => '',
    'page_image' => '',
    'content_raw' => '',
    'meta_description' => '',
    'is_draft' => "0",
    'publish_date' => '',
    'publish_time' => '',
    'layout' => 'blog.layouts.post',
    'tags' => [],
];

/**
 * Create a new command instance.
 *
 * @param integer $id
 */
public function __construct($id = null)
{
    $this->id = $id;
}

/**
 * Execute the command.
 *
 * @return array of fieldnames => values
 */
public function handle()
{
    $fields = $this->fieldList;

    if ($this->id) {
        $fields = $this->fieldsFromModel($this->id, $fields);
    } else {
        $when = Carbon::now()->addHour();
        $fields['publish_date'] = $when->format('M-j-Y');
        $fields['publish_time'] = $when->format('g:i A');
    }

    foreach ($fields as $fieldName => $fieldValue) {
        $fields[$fieldName] = old($fieldName, $fieldValue);
    }

    return array_merge(
        $fields,
        ['allTags' => Tag::lists('tag')->all()]
    );
}

/**
 * Return the field values from the model
 *
 * @param integer $id
 * @param array $fields
 * @return array
 */
protected function fieldsFromModel($id, array $fields)
{
    $video = Video::findOrFail($id);

    $fieldNames = array_keys(array_except($fields, ['tags']));

    $fields = ['id' => $id];
    foreach ($fieldNames as $field) {
        $fields[$field] = $video->{$field};
    }

    $fields['tags'] = $video->tags()->lists('tag')->all();

    return $fields;
}

}

my Video.php model

use App\Services\Markdowner; use Illuminate\Database\Eloquent\Model; use Carbon\Carbon; use Sofa\Eloquence\Eloquence; class Video extends Model { use Eloquence;

protected $dates = ['published_at'];

protected $fillable = [
    'title', 'subtitle', 'content_raw', 'page_image', 'meta_description',
    'layout', 'is_draft', 'published_at',
];

public function tags()
{
    return $this->morphToMany('App\Tag', 'taggable');
}

public function setTitleAttribute($value)
{
    $this->attributes['title'] = $value;

    if (! $this->exists) {
        $this->attributes['slug'] = str_slug($value);
    }
}

/**
 * Recursive routine to set a unique slug
 *
 * @param string $title
 * @param mixed $extra
 */
protected function setUniqueSlug($title, $extra)
{
    $slug = str_slug($title.'-'.$extra);

    if (static::whereSlug($slug)->exists()) {
        $this->setUniqueSlug($title, $extra + 1);
        return;
    }

    $this->attributes['slug'] = $slug;
}

/**
 * Set the HTML content automatically when the raw content is set
 *
 * @param string $value
 */
public function setContentRawAttribute($value)
{
    $markdown = new Markdowner();

    $this->attributes['content_raw'] = $value;
    $this->attributes['content_html'] = $markdown->toHTML($value);
}

/**
 * Sync tag relation adding new tags as needed
 *
 * @param array $tags
 */
public function syncTags(array $tags)
{
    Tag::addNeededTags($tags);

    if (count($tags)) {
        $this->tags()->sync(
            Tag::whereIn('tag', $tags)->lists('id')->all()
        );
        return;
    }

    $this->tags()->detach();
}

/**
 * Return the date portion of published_at
 */
public function getPublishDateAttribute($value)
{
    return $this->published_at->format('M-j-Y');
}

/**
 * Return the time portion of published_at
 */
public function getPublishTimeAttribute($value)
{
    return $this->published_at->format('g:i A');
}

/**
 * Alias for content_raw
 */
public function getContentAttribute($value)
{
    return $this->content_raw;
}

/**
 * Return URL to post
 *
 * @param Tag $tag
 * @return string
 */
public function url(Tag $tag = null)
{
    $url = url('blog/'.$this->slug);
    if ($tag) {
        $url .= '?tag='.urlencode($tag->tag);
    }

    return $url;
}

/**
 * Return array of tag links
 *
 * @param string $base
 * @return array
 */
public function tagLinks($base = '/blog?tag=%TAG%')
{
    $tags = $this->tags()->lists('tag');
    $return = [];
    foreach ($tags as $tag) {
        $url = str_replace('%TAG%', urlencode($tag), $base);
        $return[] = '<a href="'.$url.'">'.e($tag).'</a>';
    }
    return $return;
}

/**
 * Return next post after this one or null
 *
 * @param Tag $tag
 * @return Post
 */
public function newerPost(Tag $tag = null)
{
    $query =
        static::where('published_at', '>', $this->published_at)
            ->where('published_at', '<=', Carbon::now())
            ->where('is_draft', 0)
            ->orderBy('published_at', 'asc');
    if ($tag) {
        $query = $query->whereHas('tags', function ($q) use ($tag) {
            $q->where('tag', '=', $tag->tag);
        });
    }

    return $query->first();
}

/**
 * Return older post before this one or null
 *
 * @param Tag $tag
 * @return Post
 */
public function olderPost(Tag $tag = null)
{
    $query =
        static::where('published_at', '<', $this->published_at)
            ->where('is_draft', 0)
            ->orderBy('published_at', 'desc');
    if ($tag) {
        $query = $query->whereHas('tags', function ($q) use ($tag) {
            $q->where('tag', '=', $tag->tag);
        });
    }

    return $query->first();
}

}


my VideoController.php

use App\Jobs\VideoFormFields; use App\Http\Requests; use App\Http\Requests\VideoCreateRequest; use App\Http\Requests\VideoUpdateRequest; use App\Http\Controllers\Controller; use App\Video;

class VideoController extends Controller { /** * Display a listing of the posts. * */ public function index() { return view('admin.video.index') ->withVideos(Video::all()); }

/**
 * Show the new video form
 */
public function create()
{
    $data = $this->dispatch(new VideoFormFields());

    return view('admin.video.create', $data);
}

/**
 * Store a newly created Video
 *
 * @param VideoCreateRequest $request
 */
public function store(VideoCreateRequest $request)
{
    $video = Video::create($request->videoFillData());
    $video->syncTags($request->get('tags', []));

    return redirect()
        ->route('admin.video.index')
        ->withSuccess('New Video Successfully Created.');
}

/**
 * Display the specified resource.
 *
 * @param  int  $id
 * @return Response
 */
public function show($id)
{
    //
}

/**
 * Show the video edit form
 *
 * @param  int  $id
 * @return Response
 */
public function edit($id)
{
    $data = $this->dispatch(new VideoFormFields($id));

    return view('admin.video.edit', $data);
}

/**
 * Update the Video
 *
 * @param VideoUpdateRequest $request
 * @param int  $id
 */
public function update(VideoUpdateRequest $request, $id)
{
    $video = Video::findOrFail($id);
    $video->fill($request->videoFillData());
    $video->save();
    $video->syncTags($request->get('tags', []));

    if ($request->action === 'continue') {
        return redirect()
            ->back()
            ->withSuccess('Video saved.');
    }

    return redirect()
        ->route('admin.video.index')
        ->withSuccess('Video saved.');
}

/**
 * Remove the specified resource from storage.
 *
 * @param  int  $id
 * @return Response
 */
public function destroy($id)
{
    $video = Video::findOrFail($id);
    $video->tags()->detach();
    $video->delete();

    return redirect()
        ->route('admin.video.index')
        ->withSuccess('Video deleted.');
}

}

my videocreaterequest.php

use Carbon\Carbon;

class VideoCreateRequest extends Request { /** * Determine if the user is authorized to make this request. */ public function authorize() { return true; }

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules()
{
    return [
        'title' => 'required',
        'subtitle' => 'required',
        'content_raw' => 'required', //                                         HERE CHANGED
        'publish_date' => 'required',
        'publish_time' => 'required',
        'layout' => 'required',
    ];
}

/**
 * Return the fields and values to create a new VIDEO post from
 */
public function videoFillData()
{
    $published_at = new Carbon(
        $this->publish_date.' '.$this->publish_time
    );
    return [
        'title' => $this->title,
        'subtitle' => $this->subtitle,
        'page_image' => $this->page_image,
        'content_raw' => $this->content_raw, //                                  HERE CHANGED
        'meta_description' => $this->meta_description,
        'is_draft' => (bool)$this->is_draft,
        'published_at' => $published_at,
        'layout' => $this->layout,
    ];
}

}

my 2015_07_235729_create_videos_table.php

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

class CreateVideosTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('videos', function (Blueprint $table) { $table->increments('id'); $table->string('slug')->unique(); $table->string('title'); $table->string('subtitle'); $table->text('content_raw'); $table->text('content_html'); $table->string('page_image'); $table->string('meta_description'); $table->boolean('is_draft'); $table->string('layout') ->default('blog.layouts.post'); $table->timestamps(); $table->timestamp('published_at')->index(); }); }

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::drop('videos');
}

}

I used this for my posts but for this it's not working

0 likes
4 replies
raygun's avatar
raygun
OP
Best Answer
Level 2

Figured it out the label wasn't matching

Please or to participate in this conversation.