1
votes

I try to make library of pdf files. which i want to store pdf title-name and file name also upload this pdf in project storage. but server show me this error.I can't understand what can I do.

Method App\Http\Controllers\Elibrary::save does not exist. my error message this is my elibrary controller file which i chech filename and store file name in database also stored in public/images location

I find this code on this linkuload file tutorial

       <?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Elibrary;
class ElibraryController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request){
        $elibrary = Elibrary::orderBy('id','DESC')->paginate(5);
        return view('e-library',compact('elibrary'))
            ->with('i', ($request->input('page', 1) - 1) * 5);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
     public function store(Request $request)
    {
        $this->validate($request, [
            'title' => 'required',
            'efile' => 'required|max:4000',
        ]);
        if($file= $request->file('file')){
            $name = $file->getClientOriginalName();
            if($file->move('images', $name)){
                $elibrary = new Post;
                $elibrary->efile = $name;
                $elibrary->save();
                return redirect()->route('e-library');
            };
        }
        $elibrary = new Elibrary([
            'title'    =>  $request->get('title'),
            'efile'    =>  $request->file('file'),
            ]);
        $elibrary->save();
        return redirect()->route('e-library');
    }

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

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

This is my route file code

Route::post('/store', 'Elibrary@store')->name('store');

this is e-library.blade.php file from

<form action="/store" method="post" enctype="multipart/form-data">
                @csrf()
                  <div class="form-group">
                     <input type="text" class="form-control"name="title" placeholder="Name">
                  </div>
                  <div class="form-group">
                     <input type="file" class="form-control"name="efile" >
                  </div>
                  <div class="form-group">
                     <input type="submit" class="btn btn-primary btn-send-message" >
                  </div>
               </form>

this is my model file of Elibrary.php

    <?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Elibrary extends Model
{
    public $fillable = ['title','efile'];
}

this is my migration file

<?php

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

class CreateElibrariesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('elibraries', function (Blueprint $table) {
           $table->bigIncrements('id');
            $table->string('title');
            $table->string('efile');
            $table->timestamps();
        });
    }

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

How i can show this pdf with the help show function in show.blade.php

2
if($file->move('images', $name){ You're missing a close )aynber
@aynber thanks One problem solve but second :(Vishal Lagend
You create a new ELibrary, being the class you pasted. Which doesn't have a save() method, so it's unsurprising it doesn't like the call.delboy1978uk

2 Answers

2
votes

You're creating new instances of Elibrary in your controller methods. Elibrary is a controller class but it looks like you're treating it as a model.

Maybe try changing all of your new Elibrary() to new Post since it looks like that might be what you're trying to accomplish.

If thats the case, you will also need to make efile fillable in your Post model.

-1
votes
$elibrary = Post::orderBy('id','DESC')->paginate(5);