2013-07-02 3 views
0

Я сейчас играю с Laravel, пытаясь выработать, если это хороший выбор рамки для использования в проекте.Получение только данных для определенного метода HTTP?

Я загрузил комплект генератора от here и создал ресурс, следуя документации.

Это дает мне форму с автором и телом.

Метод магазин, который получает генерироваться выглядит так:

/** 
    * Store a newly created resource in storage. 
    * 
    * @return Response 
    */ 
    public function store() 
    { 
     $input = Input::all(); 
     $validation = Validator::make($input, Tweet::$rules); 

    if ($validation->passes()) 
    { 
     $this->tweet->create($input); 

     return Redirect::route('tweets.index'); 
    } 

    return Redirect::route('tweets.create') 
     ->withInput() 
     ->withErrors($validation) 
     ->with('message', 'There were validation errors.'); 
} 

Это, кажется, работает хорошо, за исключением того, что массив $ ввода содержит $ _GET переменные, а также $ _POST. Он проверяет правильность, но вызывает исключение, когда он пытается сохранить модель, поскольку она содержит неожиданные поля (что-либо из суперглобального файла $ _GET добавляется в запрос).

SQLSTATE [42S22]: Column не найдено: 1054 Неизвестные колонки 'твитов' в 'список полей' (SQL: вставить в tweets (author, body, tweets, updated_at, created_at) значений (,? ,?,?,?)) (Привязки: массив ( 0 => 'zzz', 1 => 'zzzzz', 2 => '', 3 => '2013-07-02 10:23:16', 4 => «2013-07-02 10:23:16»,))

есть ли способ, чтобы только передать соответствующие значения или нужно вручную удалить anyt что я не хочу использовать?

Любые советы, оцененные.

Благодаря

ответ

1
You can pass selective input variables to the withInput() method. 

This is how your code would look like: 

return Redirect::route('tweets.create') 
     ->withInput(Input::except('tweets')) 
     ->withErrors($validation) 
     ->with('message', 'There were validation errors.'); 


also you can use to pass "selective inputs" or remove "selective inputs from all input vars". Here is the code you can use:- 


$input = Input::only('username', 'password'); // selective inputs 

$input = Input::except('tweets'); // remove selective inputs 
1

Насколько мне известно, не существует в настоящее время нет способа в Laravel 4 только получить либо $ _GET или $ _POST вход с использованием метода Input::all();, но есть Input::only() и Input::except() методы, если вы не в курсе, не то, что они говорят на олове ...

Просто передайте им массив ключей, которые вы хотите включить в строку

$input = Input::only('author', 'body','tweets'); 

иЛИ массив ключей вы хочу исключить

$input = Input::except('updated_at'); 

И он будет получать только значение, заданные (или значение, не исключающие). Я знаю, что это не так просто, как какая-то функция Input::all('post');, но это единственный способ, не меняя Laravel вокруг себя. Я думаю, что это может быть хорошим дополнением к каркасу лично

0

Простейшее возможный способ получить POST (PUT, и т.д.) переменных в Laravel 4 следующие:

$post = Input::duplicate(array())->all();

, что означает: взять текущий запрос, клонировать его и заменить параметры $ _GET пустым массивом.

Возможно, вам придется дополнительно расследовать duplicate(), чтобы узнать, как избежать дальнейших коллизий с печеньками и т. Д.

Смежные вопросы