缺少 [Route: backoffice.role.show] [URI: role/{role}] [缺少参数:role] 的必需参数

时间:2021-01-26 03:08:05

标签: php laravel

我真的已经研究了几个小时,根据我所阅读的内容,这显然很容易,但我无法意识到。我将我的代码结构传递给您,以便您可以看到它,最后我会告诉您问题是什么以及它引发的错误。

控制器:角色控制器

<?php

namespace App\Http\Controllers;

use App\Models\Role;
use App\Http\Requests\Role\StoreRequest;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Http\Request;

class RoleController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        echo 'Vista index de Roles';
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('theme.backoffice.pages.role.create');  
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(StoreRequest $request, Role $role)
    {
        $role = $role->store($request);
        return redirect()->route('backoffice.role.show'.$role);
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Role  $role
     * @return \Illuminate\Http\Response
     */
    public function show(Role $role)
    {
        return view('theme.backoffice.pages.role.show', [
          'role' => $role,
        ]);
    }

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

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

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

web.php/routes

Auth::routes(['verify' => true]);
//BACKOFFICE
Route::group(['middleware'=>['auth'], 'as'=>'backoffice.'], function(){
    Route::resource('role', 'App\Http\Controllers\RoleController');
    });

create.blade.php

@extends('theme.backoffice.layouts.admin')

@section('title','Crear rol')

@section('head')

@endsection

@section('content')
<div class="section">
    <p class="caption">Introduce los datos para crear un nuevo rol</p>
    <div class="divider"></div>
        <div id="basic-form" class="section">
            <div class="row">
                <div class="col s12 m8 offset-m2">
                    <div class="card-panel">
                    <h4 class="header2">Crear rol</h4>
                        <div class="row">
                        
                            <form class="col s12" method="post" action="{{ route('backoffice.role.store') }}">

                                {{ csrf_field() }}

                                <div class="row">
                                    @error('name')
                                        <span style="color:red" class="invalid-feedback" role="alert">
                                            <strong>{{ $message }}</strong>
                                        </span>
                                    @enderror
                                    <div class="input-field col s12">
                                        <input id="name" type="text" name="name">
                                        <label for="name">Nombre</label>
                                    </div>
                                </div>
                                <div class="row">
                                    @error('description')
                                        <span style="color:red" class="invalid-feedback" role="alert">
                                            <strong>{{ $message }}</strong>
                                        </span>
                                    @enderror
                                    <div class="input-field col s12">
                                        <textarea name="description" class="materialize-textarea" id="description" cols="30" rows="10"></textarea>
                                        <label for="email">Descripcion</label>
                                    </div>
                                </div>
                                <div class="row">
                                        <div class="input-field col s12">
                                            <button class="btn waves-effect waves-light right" type="submit">Guardar
                                                <i class="material-icons right">send</i>
                                            </button>
                                        </div>
                                </div>
                            </form>
                        </div>
                    </div>
                </div>
            </div>
        </div>
</div>

@endsection

@section('scripts-foot')

@endsection

show.blade.php

@extends('theme.backoffice.layouts.admin')

@section('title','Clinic')

@section('head')

@endsection

@section('content')
<div class="section">
    <p class="caption"><strong>Rol: </strong>{{$role->name}}</p>
    <div class="divider"></div>
        <div id="basic-form" class="section">
            <div class="row">
                <div class="col s12 m8 offset-m2">
                    <div class="card-panel">
                    <h4 class="header2">Usuarios con el rol de {{$role->name}}</h4>
                        <div class="row">
                            <ul>
                                <li>Raul</li>
                                <li>Tomas</li>
                            </ul>
                        </div>
                    </div>
                </div>
            </div>
        </div>
</div>
@endsection

@section('scripts-foot')

@endsection

我告诉你我的代码做了什么。

1-我们在 CREATE 视图中创建一个新角色并保存。

2-这行到store方法并保存在数据库中

3- store 方法返回到 SHOW 方法的路由的重定向,以便在所述视图中显示新创建的角色。

错误:: 缺少 [Route: backoffice.role.show] [URI: role/{role}] [缺少参数: role] 的必需参数。

我不明白我做错了什么,因为我在执行重定向时将所需的参数传递给 store 方法中的路径名。这是关于寻找不同的分辨率还是我有一个我没有意识到的错误? .非常感谢您的关注。

1 个答案:

答案 0 :(得分:1)

问题是未收到 $rolebackoffice.role.show

您可以传递期望的角色,例如(问题是您附加了“.”而不是“,”):

return redirect()->route('backoffice.role.show', $role);

如果你想明确定义角色,你可以使用别名:

return redirect()->route('backoffice.role.show', ['role' => $role]);

编辑商店方法

您可以在 routes/web.php 中使用 Resource Controller

public function store(Request $request){
   // Validation
   $this->validate($request, ['name' => 'required']);
   // Storing
   $role = Role::create($request);
   return redirect()->route('backoffice.role.show', $role);
}

有关更多信息,您可以访问Laravel Generating Url to Named Route