【问题标题】:Missing required parameter for [Route: backoffice.role.show] [URI: role/{role}] [Missing parameter: role][Route: backoffice.role.show] [URI: role/{role}] [Missing parameter: role] 缺少必需参数
【发布时间】:2021-04-29 21:13:15
【问题描述】:

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

控制器:角色控制器

<?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}] [Missing parameter: role] 缺少必需参数。

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

【问题讨论】:

  • 欢迎来到 SO ... $role-&gt;store(...) 返回什么?
  • 非常感谢! $角色->存储($请求);它返回按请求输入的内容,但带有 slug。

标签: php laravel


【解决方案1】:

问题是没有收到backoffice.role.show$role

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

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

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

return redirect()-&gt;route('backoffice.role.show', ['role' =&gt; $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

【讨论】:

  • 您好,我在将代码传递给您时出错了。我把它作为redirect () -> route ('backoffice.role.show'.$ Role);因为我尝试了各种方式,但实际上我总是按照您指示的方式进行路线。无论如何,它总是给我同样的错误。
  • 您可以在通过路线之前dd($role)。我相信这个问题可能是因为 $role 是空的。
  • 如果是真的,你是对的! $ 角色到达为 null
  • 为 Store 方法添加了另一种方法。如果有帮助,请将答案标记为已接受。
  • 问题出在我的角色模型上。缺乏关注使我没有看到在所述模型的存储方法中我缺少编写函数的“返回”。所以它返回 $ 角色为空。非常感谢!我很想给出一个可以接受的答案,但 stackoverflow 还不能让我有名气。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-22
  • 1970-01-01
相关资源
最近更新 更多