在Laravel 5中向控制器传递多个参数

31
在我的应用程序中,一个用户可以提醒另一个用户有关事件邀请的信息。为此,我需要传递事件和被邀请用户的ID。在我的路由文件中,我有:
Route::get('events/{id}/remind', [
'as' => 'remindHelper', 'uses' => 'EventsController@remindHelper']);

在我看来,我有:

{!!link_to_route('remindHelper', 'Remind User', $parameters = array($eventid = $event->id, $userid = $invitee->id) )!!}

在我的控制器中,我有以下代码:

    public function remindHelper($eventid, $userid)
{
    $event = Events::findOrFail($eventid);
    $user = User::findOrFail($userid);
    $invitees = $this->user->friendsOfMine;
    $invited = $event->helpers;
    $groups = $this->user->groupOwner()->get();
    return view('events.invite_groups', compact('event', 'invitees', 'invited', 'groups'));
}

然而,当我请求那个路由时,我收到以下错误:

Missing argument 2 for App\Http\Controllers\EventsController::remindHelper()

我相信我的视图存在格式错误,但我无法诊断它。有没有更有效的方法将多个参数传递给控制器?


1
你能展示一下你的路由定义吗? - Joseph Silber
当然,我已经更新了原始问题。 - Cameron Scott
6个回答

79

当你定义这个路由时:

Route::get('events/{id}/remind', [
'as' => 'remindHelper', 'uses' => 'EventsController@remindHelper']);
你说一个URI参数将被传递给这个方法。
尝试传递两个参数,例如:
尝试传递两个参数,比如:
Route::get('events/{event}/remind/{user}', [
'as' => 'remindHelper', 'uses' => 'EventsController@remindHelper']);

查看:

route('remindHelper',['event'=>$eventId,'user'=>$userId]);

我们如何传递多个可选参数并使用它们? - Kamlesh

5

路由:

Route::get('warden/building/{buildingId}/employee/{employeeId}',[
    'uses'=>'WardenController@deleteWarden',
    'as'=>'delete-warden'
]);

视图

<a href="{{route('delete-warden',[$building->id])}}"></a>

控制器:

public function deleteWarden($buildingId,$employeeId){
    $building = Building::find($buildingId);
    $building->employees()->detach($employeeId);
    return redirect('warden/assign/'.$buildingId)->with('message','Warden Detached successfully');

}

亲爱的兄弟,这怎么可能呢?你将路由声明为 delete-warden,而调用的却是 delete-building - A.A Noman

1
这是如何做到的:

以下是具体步骤:

<a href="{{route('route.name',['param1'=>$variable1,'param2'=>$variable2])}}">Click Here</a>

1
Route::get('/details/{id}/{id1}/{id2}', 'HomeController@SearchDetails');

//pass data like the below code

<a href="{{url("/details/{$orga_list->dcode}/{$orga_list->dname}/{$GroupHead}")}}" 
target="_blank" > Details </a>

//controller write like the below code

public function SearchDetails($id, $searchtext,$grp_searchtext)  
{
// get data like the below code

$data['searchtext'] = $searchtext;
$data['grp_searchtext'] = $grp_searchtext;
$data['id_is'] = $id;
}

0

前往您的控制器并编写以下代码:

public function passData()
{

    $comboCoder=['Bappy','Sanjid','Rana','Tuhin'];
    $ffi=['Faisal','Sanjid','Babul','Quiyum','Tusar','Fahim'];
    $classRoom=['Sanjid','Tamanna','Liza'];
    return view('hyper.passData',compact('comboCoder','ffi','classRoom'));
}

/*
Again, in View part use:
(passData.blade.php)
*/

<u>Combocoder:</u>

@foreach($comboCoder as $c)
{{$c}}<br>
@endforeach

<u>FFI</u>

@foreach($ffi as $f)

{{$f}}<br>
@endforeach

<u>Class Room </u>

@foreach($classRoom as $cr)

{{$cr}}<br>
@endforeach

0

routes/web.php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\BookController;

Route::controller(BookController::class)->group(function () {
     Route::get('author/{author_name}/book/{title}', 'show')
      ->name('book.show');
 });

现在更新控制器如下:

app/Http/Controllers/BookController.php

namespace App\Http\Controllers;

use App\Models\Book;
use App\Models\Author;
use Illuminate\Http\Request;

class BookController extends Controller
{

  public function show(Request $request, Author $author, Book $book)
  {   
    return view('show',[
        'book' => $book->show($request)
    ]);
  }
}

现在更新书籍模型:

app\Models\Book.php

namespace App\Models;

use App\Common\HasPdf;
use App\Common\HasImage;
use Illuminate\Contracts\Database\Eloquent\Builder;
use Illuminate\Support\Facades\URL;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Factories\HasFactory;

class Book extends Model
{
  use HasFactory;

  protected $guarded = [];

  public function author() : BelongsTo
  {
     return $this->belongsTo(Author::class);
  }


  public function url()
  {
    return URL::route('book.show', [
        'author_name' => $this->author->author_name,
        'title'   => $this->title,
    ]);
  }
}

<a href="{{ $item->url() }}"><h3>{{ $item->title }}</h3></a>

希望它能对你有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接