2016-11-29 86 views
0

以下是我的情况。如何通过数据查看返回的路由重定向到(Laravel)

我有两个控制器包含CRUD方法的模型。

  • Document。
  • 文件。

在创建文件时,将指定(选择)已创建文件将附加到的文件。

在存储新创建的文件我想重定向到与新创建的文档的idfiles/create路线,这样的文件可以被创建,而不必选择一个文件后,我documentControllerstore方法。

我至今

DocumentController

$input = $request->all(); 
$document = $this->documentRepository->create($input); 
return redirect(route('files.create'),array('documentID' => $document->id)); 

文件/ create.blade.php

@if(isset($documentID)) 
<input type="text" name="document_id" value="{{ $documentID }}" hidden="true"> 

@else 
<div class="form-group col-sm-6"> 

    {!! Form::label('file_type', 'Document ID:') !!} 

    <select name="document_id" class="form-control"> 
     @foreach($documents as $document) 
      <option value="{{ $document->id }}">{{ $document->id }}-{{ $document->applicant()->name }}</option> 
     @endforeach 
    </select> 
</div> 
@endif 

我怎样才能实现这一目标。

+0

你有什么问题g,你是不是能够检索$ document-> id – Rahul

+0

Rahul,当我尝试将$ documentID传递给重定向时,出现跟随错误 - Response.php中的InvalidArgumentException行458: HTTP状态码“1”为无效“。 –

+0

@PrakharSingh,由于rediect()方法正在将作为第二个参数传递给数组的'array('documentID'=> $ document-> id)是1,然后尝试返回HTTP状态码为1的响应。 – ktross

回答

2

在响应()方法中的第二个参数是HTTP状态代码应当重定向时被使用。

您需要链与()方法:

$input = $request->all(); 
$document = $this->documentRepository->create($input); 
return redirect(route('files.create'))->with('documentID', $document->id); 

然后,您可以从视图访问通过会话数据与{{ session('documentID') }}

参见:https://laravel.com/docs/5.3/responses#redirecting-with-flashed-session-data

+1

这是目前唯一正确的答案。 –

+0

Alexey是对的,但我不明白为什么'isset($ _SESSION ['documentID'])'返回false,而我可以轻松打印它的值。 –

+0

@PrakharSingh,改为使用if(session('documentID'))'。 :) – ktross

0

被修改:尝试该代码

return redirect()->route('files.create', ['documentID' => $document->id]); 
+0

谢谢,Rahul我知道我总是可以返回'view'。但我真的想从我的'fileController'加载'view',因为我在其中还包含了其他变量。 –

0

尝试这种情况:

return redirect()->route('files.create', $document->id); 
+0

Doan,我应该如何访问传入的变量? –

1

的方式来解决这个问题是制作接受documentID的新路线,所以你会得到类似于Route::get('/files/createFromDocument/{$documentID}', '[email protected]')->name('files.createFromDocument');

in FileController你已经添加的新功能 function createFromDocument($documentID) ,在这里你可以处理这种特殊情况下

+0

谢谢,Elwan,这是我的最后一个选择,我在考虑是否有连击方式 –

+0

在某些情况下,分离功能是最好的做法,但如果没有代码差异 –

+1

某些情况下功能分离是最好的做法,但如果有没有代码差异我认为@ktross解决方案是最佳匹配。 –

0

试试这个:

return redirect("files/$document->id/create") 

路线:

Route::get('/files/{$documentID}/create', '[email protected]'); 

功能:

public function createDocument($documentId){}