Как получить поле ввода

Как получить поле ввода для обновления задачи? При попытке dd(Request::input('task')); я получаю "Нестатический метод Illuminate\Http\Request::input() не должен вызываться статически, предполагая $this из несовместимого контекста"

<?php namespace App\Http\Controllers;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Task;
use Illuminate\Http\Request;

class TaskController extends Controller {

public function update($id)
{
    dd(Request::input('task'));
    $task = Task::findOrFail($id);
    $task->title = Request::input('task');
    $task->save();
    return Redirect::to('tasks');
}

Редактировать вид (работает нормально)

{!! Form::model($task, array('url' => 'tasks/'.$task->id, 'method' => 'PATCH')) 
    !!}
    {!! Form::text('task', $task->task, array('class' => 'form-control')) !!}
    {!! Form::submit('Edit', array('class' => 'btn btn-default')) !!}
    {!! Form::close() !!}

person Marko    schedule 05.02.2015    source источник
comment
Просто скажу, что вы можете отформатировать встроенный код, заключив его в обратные кавычки (`), и он будет выглядеть как код, а не выделенный текст.   -  person Fund Monica's Lawsuit    schedule 05.02.2015


Ответы (2)


Для этого вы должны использовать Dependency Injection:

use Illuminate\Http\Request;

...

public function update(Request $request, $id)
{
    //
    $task->title = $request->input('task');
    //
}

Дополнительную информацию см. в документации: http://laravel.com/docs/5.0/controllers#dependency-injection-and-controllers

person Mike Rockétt    schedule 05.02.2015
comment
thx, мне нужно будет посмотреть на это. Я смотрю уроки Джеффри Уэя, но я не понимаю эту конкретную часть, поэтому я просто попробовал что-то очень простое. - person Marko; 05.02.2015
comment
Laravel 5 — отличный способ помочь разработчикам придерживаться набора стандартов. DI чрезвычайно полезен, и я предпочитаю их из Facades (не то чтобы у меня к ним есть какие-то претензии). Так что да, расскажите как можно больше о том, как работает L5 — ваш опыт обучения будет очень полезным. :-) - person Mike Rockétt; 05.02.2015

Вы импортировали неправильный Request.

Чтобы использовать Request фасад, вам необходимо сделать следующее:

use Illuminate\Support\Facades\Request

Или просто псевдоним:

use Request

Вы также можете использовать внедрение зависимостей следующим образом:

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Task;
use Illuminate\Http\Request;

class TaskController extends Controller {

    public function __construct(Request $request){
        $this->request = $request;
    }

    public function update($id){
        $task = Task::findOrFail($id);
        $task->title = $this->request->input('task');
        $task->save();
        return Redirect::to('tasks');
    }
}

Или используйте DI только для этого метода:

public function update(Request $request, $id){
    $task = Task::findOrFail($id);
    $task->title = $request->input('task');
    $task->save();
    return Redirect::to('tasks');
}
person lukasgeiter    schedule 05.02.2015