前提・実現したいこと
companyのadminページに、そのcompanyに所属しているuserの一覧リストを表示させています。
個々のuser情報に削除ボタンを作成し、その特定のuserのみを削除出来るようにしたい。
発生している問題・エラーメッセージ
特にエラーはでない。 削除ボタンを押した時に、通常であれば画面が切り替わってエラーになるが画面も切り替わらない。
該当のソースコード
《companiesのadmin.blade.php》 @extends('layouts.app') <?php $role=Auth::user()->role; $users=Auth::user(); ?> @if($role == $company->id) @section('content') <div class="container"> <br> <h2>御社に応募している登録者情報</h2> @foreach($company->users as $user) <br> <table class="table table-striped"> <tr> <th class="table-dark" width="20%">{{ __('氏名') }}</th> <td>{{ $user->name }}</td> </tr> .......省略 <br> <br> {!!Form::open(['action'=>['Company_UserController@destroy', $company->id], 'method'=>'POST'])!!} {{ Form::hidden('_method', 'DELETE') }} {{ Form::submit('消去', ['class'=>'btn']) }} {!! Form::close() !!} @endforeach <br> </table> @else <h3>申し訳ございません。<br> こちらのページはご覧頂けません。</h3> @endif <a class="btn" href="/countries">戻る</a> </div> @endsection
《CompaniesController.php》 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth;//←これが重要! use Illuminate\Support\Facades\Storage; use Illuminate\Database\Eloquent\Collection; use App\Company; use App\User; use App\Country; class CompaniesController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ /*public function __construct() { $this->middleware('auth', ['except'=>['show']]); }*/ ・・・省略 /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { $company=Company::find($id); if(Auth::user()->role == $company->id || Auth::user()->id == 1){ Storage::delete('public/photos1'. $company->cover_image1); Storage::delete('public/photos2'. $company->cover_image2); Storage::delete('public/photos3'. $company->cover_image3); } $company->users()->detach(); $company->delete(); return redirect('/countries/' . $company->country_id)->with('success', '御社の内容が正常に削除されました。 正しく反映されているか確認をして下さい。'); } }
《Company_UserController.php》 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Database\Eloquent\Collection; use App\Company; use App\User; class Company_UserController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // } /** * 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) { $company=Company::findOrFail($request->input('company_id')); $user=User::findOrFail(Auth::id()); $company->users()->attach($user->id); return redirect('/companies/' . $company->id)->with('success', '応募が完了しました。 担当者からの連絡をお待ち下さい。'); } /** * 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) { $company=Company::find($id); $company->users()->detach($user->id); return redirect('/companies/{{$company-id}}/admin')->with('success', '削除が完了しました。正しく反映されているか確認して下さい。'); } }
《Company.php》 <?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Auth; use App\User; class Company extends Model { protected $fillable= array('country_id', 'cover_image1', 'cover_image2', 'cover_image3', 'title', 'description', 'job_content', 'place', 'relate', 'role', 'salary', 'welfare', 'time', 'skill', 'apply_way', 'company_name', 'company_place', 'employee', 'company_type', 'company_content'); public function country(){ return $this->belongsTo('App\Country'); } public function users() { return $this->belongsToMany('App\User', 'company__users')->withTimestamps(); } }
《User.php》 <?php namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'name_call', 'email', 'password', 'role', 'gender', 'tel', 'birthday', 'university_name', 'university_degree', 'university_date', 'master_university', 'master_degree', 'master_date', 'company_name', 'position', 'period', 'company_name2', 'position2', 'period2', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; public function companies(){ return $this->belongsToMany('App\Company', 'company__users')->withTimestamps(); } }
《web.php》 <?php /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::resource("countries", "CountriesController"); Route::resource("companies", "CompaniesController"); Route::resource("users", "UsersController"); Route::resource("company__users", "Company_UserController"); Route::get("/companies/{id}/admin", "CompaniesController@admin"); Route::get("/users/{id}/edit", "UsersController@edit"); Route::post('/companies/{id}/admin', 'Company_UserController@destroy'); Route::post('/countries/store', 'CountriesController@store'); Route::post('/companies/store', 'CompaniesController@store'); //Route::post("/companies/{id}", "CompaniesController@store"); //Route::get("/companies/{id}", "CompaniesController@show"); Auth::routes(); Route::get('/home', 'HomeController@index')->name('home');
試したこと
{!!Form::open(['route' => 'company__users.destroy', 'method'=>'POST'])!!}
と書くと、エラーになる。
C:\Users\Chihiro Suzuki\Desktop\africa\africaworks-test\vendor\laravel\framework\src\Illuminate\Routing\Exceptions\UrlGenerationException.php <?php namespace Illuminate\Routing\Exceptions; use Exception; class UrlGenerationException extends Exception { /** * Create a new exception for missing route parameters. * * @param \Illuminate\Routing\Route $route * @return static */ public static function forMissingParameters($route) { return new static("Missing required parameters for [Route: {$route->getName()}] [URI: {$route->uri()}]."); } } Arguments "Missing required parameters for [Route: company__users.destroy] [URI: company__users/{company__user}]. (View: C:\Users\Chihiro Suzuki\Desktop\africa\africaworks-test\resources\views\companies\admin.blade.php) ◀"