Laravel错误:RouteCollection.php第179行中的NotFoundHttpException

时间:2017-09-29 13:29:17

标签: php laravel exception routes filesystems

所以我对这个Laravel世界很陌生,而且我遇到了一些问题。在这里,我尝试创建一个链接来下载存储在Storage / app / Records中的文件。但我一直得到这个例外: ExceptionImage

这是我的刀片文件:这是重定向到控制器的链接应该是的部分,但是我不知道我试图将变量传递给控制器​​的方式是正确的

  <a href="{{ asset('admin/contracts/download/'.$contract->records) }}" class="btn btn-large pull-right"><i class="icon-download-alt"> </i> {{$contract->records}} </a>

这是我的路线文件(我只复制了我认为值得一提的部分):

Route::group(['middleware' => ['auth'], 'prefix' => 'admin', 'as' => 'admin.'], function () {
    Route::get('/home', 'HomeController@index');

Route::resource('contracts', 'Admin\ContractsController');

Route::get('contracts/download/{filename}', ['uses' => 'Admin\ContractsController@downloadfile', 'as' => 'contracts.downloadfile']);

});

我的ContractsController(我复制了&#34; store&#34;方法因为我想显示我存储文件的位置(存储/应用/记录/)以及如何):

   

<?php namespace App\Http\Controllers\Admin; use App\Contract; use Illuminate\Http\Request; use Illuminate\Support\Facades\Gate; use App\Http\Controllers\Controller; use App\Http\Requests\Admin\StoreContractsRequest; use App\Http\Requests\Admin\UpdateContractsRequest; use Yajra\Datatables\Datatables; use DB; use Carbon\Carbon; use JavaScript; use Illuminate\Contracts\Logging\Log; use Illuminate\Contracts\Filesystem; use Illuminate\Support\Facades\Storage; use Maatwebsite\Excel\Facades\Excel; class ContractsController extends Controller { /** * Display a listing of Contract. * * @return \Illuminate\Http\Response */ public function index() { if (! Gate::allows('contract_access')) { return abort(401); } $user = \Auth::user(); if (request()->ajax()) { $query = Contract::query(); if (\Auth::getUser()->id==1 || \Auth::getUser()->id==2) { $query->with("owner"); } else { $query->with("owner")->where('owner_id',$user->id)->get(); } $template = 'actionsTemplate'; if(request('show_deleted') == 1) { if (! Gate::allows('contract_delete')) { return abort(401); } $query->onlyTrashed(); $template = 'restoreTemplate'; } $table = Datatables::of($query); $table->setRowAttr([ 'data-entry-id' => '{{$id}}', ]); $table->addColumn('massDelete', '&nbsp;'); $table->addColumn('actions', '&nbsp;'); $table->editColumn('actions', function ($row) use ($template) { $gateKey = 'contract_'; $routeKey = 'admin.contracts'; return view($template, compact('row', 'gateKey', 'routeKey')); }); $table->editColumn('contractsname', function ($row) { return $row->contractsname ? $row->contractsname : ''; }); $table->editColumn('end_date', function ($row) { return $row->end_date ? $row->end_date : ''; }); $table->editColumn('owner.name', function ($row) { return $row->owner ? $row->owner->name : ''; }); return $table->make(true); } return view('admin.contracts.index'); } /** * Show the form for creating new Contract. * * @return \Illuminate\Http\Response */ public function create() { if (! Gate::allows('contract_create')) { return abort(401); } $owners = \App\User::select( DB::raw("CONCAT(name,' ',lastname) AS name"),'id') ->pluck('name', 'id')->prepend(trans('quickadmin.qa_please_select'), ''); return view('admin.contracts.create', compact('owners')); } /** * Store a newly created Contract in storage. * * @param \App\Http\Requests\StoreContractsRequest $request * @return \Illuminate\Http\Response */ public function store(StoreContractsRequest $request) { if (! Gate::allows('contract_create')) { return abort(401); } if(!Storage::disk('local')->exists('Records')) Storage::makeDirectory('Records'); // var_dump($request->file('records')->getClientOriginalName()); $path=$request->file('records')->storeAs('Records',$request->contractsname.'_'.$request->l_name.''.Carbon::now()->format('Y-m-d-H-i-s').''.$request->file('records')->getClientOriginalName()); $storagePath = Storage::disk('local')->getDriver()->getAdapter()->getPathPrefix(); $contract = new Contract(); $contract->contractsname= $request->contractsname; $contract->salutation= $request->salutation; $contract->f_name= $request->f_name; $contract->l_name=$request->l_name; $contract->addresse=$request->addresse; $contract->zihlerpunktnummer=$request->zihlerpunktnummer; $contract->telephone=$request->telephone; $contract->mobile=$request->mobile; $contract->fax=$request->fax; $contract->consumption_HT=$request->consumption_HT; $contract->consumption_NT=$request->consumption_NT; $contract->powersupplier=$request->powersupplier; $contract->tension_MS=$request->tension_MS; $contract->tension_HS=$request->tension_HS; $contract->end_date=$request->end_date; $contract->owner_id=$request->owner_id; $contract->records=$path; $contract->save(); return redirect()->route('admin.contracts.index'); } /** * Show the form for editing Contract. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { if (! Gate::allows('contract_edit')) { return abort(401); } $owners = \App\User::get()->pluck('name', 'id')->prepend(trans('quickadmin.qa_please_select'), ''); $contract = Contract::findOrFail($id); return view('admin.contracts.edit', compact('contract', 'owners')); } /** * Update Contract in storage. * * @param \App\Http\Requests\UpdateContractsRequest $request * @param int $id * @return \Illuminate\Http\Response */ public function update(UpdateContractsRequest $request, $id) { if (! Gate::allows('contract_edit')) { return abort(401); } $contract = Contract::findOrFail($id); $contract->update($request->all()); return redirect()->route('admin.contracts.index'); } /** * Display Contract. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { if (! Gate::allows('contract_view')) { return abort(401); } $contract = Contract::findOrFail($id); //show the csv File content $storagePath = Storage::disk('local')->getDriver()->getAdapter()->getPathPrefix(); $file = fopen($storagePath.''.$contract->records, "r"); $file_contents = array(); if (($file = fopen($storagePath.''.$contract->records, "r")) !== FALSE) { while (!feof($file)){ $line = fgetcsv($file,1000,';'); //$line = array_map("utf8_encode", $line); array_push($file_contents, $line); } } // echo "<pre>"; //$contract->records=Storage::url($contract->records); //dd($contract->records); // var_dump($file_contents); // echo "</pre>"; fclose($file); return view('admin.contracts.show', compact(['contract','file_contents'])); } /** * Remove Contract from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { if (! Gate::allows('contract_delete')) { return abort(401); } $contract = Contract::findOrFail($id); $contract->delete(); return redirect()->route('admin.contracts.index'); } /** * Delete all selected Contract at once. * * @param Request $request */ public function massDestroy(Request $request) { if (! Gate::allows('contract_delete')) { return abort(401); } if ($request->input('ids')) { $entries = Contract::whereIn('id', $request->input('ids'))->get(); foreach ($entries as $entry) { $entry->delete(); } } } /** * Restore Contract from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function restore($id) { if (! Gate::allows('contract_delete')) { return abort(401); } $contract = Contract::onlyTrashed()->findOrFail($id); $contract->restore(); return redirect()->route('admin.contracts.index'); } /** * Permanently delete Contract from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function perma_del($id) { if (! Gate::allows('contract_delete')) { return abort(401); } $contract = Contract::onlyTrashed()->findOrFail($id); $contract->forceDelete(); return redirect()->route('admin.contracts.index'); } private function _import_csv($path, $filename) { $csv = $path . $filename; $query = sprintf("LOAD DATA local INFILE '%s' INTO TABLE users FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\"' LINES TERMINATED BY '\\n' IGNORE 0 LINES (`firstname`, `lastname`, `username`, `gender`, `email`, `country`, `ethnicity`, `education` )", addslashes($csv)); return DB::connection()->getpdo()->exec($query); } public function downloadfile($filename) { return response()->download(storage_path('app/' . $filename)); }

}

Thnx家伙!

1 个答案:

答案 0 :(得分:2)

根据您的问题,您通过路线url下载文件。如果您想要访问路线,则必须使用url()

<a href="{{ url('admin/contracts/download/'.$contract->records) }}" class="btn btn-large pull-right"><i class="icon-download-alt"> </i> {{$contract->records}} </a>

如果您正在使用资产,那么它直接指向public文件夹。不会路由。 此外,请确保您已使用

登录用户
'middleware' => ['auth']

更新

Route::get('contracts/download/{filename}','Admin\ContractsController@downloadfile');
相关问题