如何从另一个控制器获取模型的当前id?

时间:2016-07-28 07:04:47

标签: php laravel laravel-5.2 laravel-routing

我正在尝试使用不同的控制器获取我的模型的id,因此我可以sync这个到我的数据透视表。我可以使用此功能获取模型的id

class DocumentController extends Controller
{
//READ
public function readDocuments($id)
{
    //Find the document in the database and save as var.
    $document = Document::find($id);
    $getId = $document->id;

    echo $getId;
}
}

但是当我尝试从另一个控制器获取id时,它会给我一个错误。

  

CommentController.php第18行中的ErrorException:   缺少App \ Http \ Controllers \ CommentController :: postComments()

的参数2

这是我的控制器获取当前模型。我可以从不同的控制器访问var $getId吗?任何提示如何获取模型的当前id

class CommentController extends Controller
{

    public function postComments(Request $request, $id)
    {

        $this->validate($request,
        [
            'comment' => 'required',
        ]);

        $commentObject = new Comment();
        $documentObject = Document::find($id);//GET THE CURRENT ID OF THE (MODEL) DOCUMENT
        $aa = $documentObject->id;

        echo $aa;       

        $commentObject->comment = $request->comment;
        $commentObject->save();
    }
}

查看:

<!--DOCUMENT CONTROLLER-->
<div class = "col-md-6">

    <div class = "form-group">

        <textarea id = "content">{{ $document->content }}</textarea>

    </div>

    <div class = "form-group">

        <button type = "submit" class = "btn btn-success">Approve</button>

    </div>
</div>

<!--COMMENT CONTROLLER-->
<div class = "col-md-6">
    <form class = "form-vertical" method = "post" action = "{{ route ('comments') }}">

        <div class = "form-group {{ $errors->has('comment') ? ' has-error' : '' }}">

            <label for = "comment">Comment:</label>
            <textarea class = "form-control" rows = "4" id = "comment" name = "comment" placeholder = "Leave a feedback"></textarea>

            @if ($errors->has('comment'))
                <span class = "help-block">{{ $errors->first('comment') }}</span>
            @endif

        </div>

        <div class = "form-group">

            <button type = "submit" class = "btn btn-primary">Comment</button>

        </div>

        <input type = "hidden" name = "_token" value = "{{ Session::token() }}">

    </form>
</div>

更新

我试图在我的函数中传递$id。但是当我检查它。它说。当我尝试在参数中传递$id时发生此错误。

  

CommentController.php第19行中的ErrorException:   缺少App \ Http \ Controllers \ CommentController :: postComments()

的参数2

CommentController:

 public function postComments(Request $request, $id)
{

    $this->validate($request,
    [
        'comment' => 'required',
    ]);

    $commentObject = new Comment();
    $documentObject = Document::find($id);//GET THE CURRENT ID OF THE (MODEL) DOCUMENT

    echo $documentObject;

    $commentObject->comment = $request->comment;
    $commentObject->save();
}

我尝试die and dump $documentObject,但它没有打印任何内容。

路线:

//FOR DOCUMENT CONTROLLER

Route::get('/document/{id}',
[
    'uses' => '\App\Http\Controllers\DocumentController@readDocuments',
    'as' => 'document.read',
    'middleware' => 'auth',
]);

//FOR COMMENT CONTROLLER

Route::post('/comments',
[
    'uses' => '\App\Http\Controllers\CommentController@postComments',
    'as' => 'comments',
]);

更新1:

//DocumentController

Route::get('/document/{id}',
[
    'uses' => '\App\Http\Controllers\DocumentController@readDocuments',
    'as' => 'document.read',
    'middleware' => 'auth',
]);

//CommentController

Route::post('/document/{id}/comments',
[
    'uses' => '\App\Http\Controllers\CommentController@postComments',
    'as' => 'comments',
]);

查看:

<!--COMMENT CONTROLLER-->
<div class = "col-md-6">
    <form class = "form-vertical" method = "post" action = "{{ route ('/comment/{id}') }}">

        <div class = "form-group {{ $errors->has('comment') ? ' has-error' : '' }}">

            <label for = "comment">Comment:</label>
            <textarea class = "form-control" rows = "4" id = "comment" name = "comment" placeholder = "Leave a feedback"></textarea>

            @if ($errors->has('comment'))
                <span class = "help-block">{{ $errors->first('comment') }}</span>
            @endif

        </div>

        <div class = "form-group">

            <button type = "submit" class = "btn btn-primary">Comment</button>

        </div>

        <input type = "hidden" name = "_token" value = "{{ Session::token() }}">

    </form>
</div>

但它无法识别我注册的路线。它总是说。

  

路线[/ comment / {id}]未定义。 (查看:C:\ Users \ JohnFrancis \ LaravelFrancis \ resources \ views \ document \ read.blade.php)

1 个答案:

答案 0 :(得分:1)

laravel可以找到自动文件: 像这样定义路线:

Route::post('/document/{document}/comments',
[
'uses' => '\App\Http\Controllers\CommentController@postComments',
'as' => 'comments',
]);

并在控制器中:

public function postComments(Request $request, Document $document)

laravel自动获取文档。

设置表单操作,如:

http://www.ADDRESS.com/document/2/comments

向id为2的文档发送评论。