2016-05-02 2 views
2

У меня есть способ хранить в контроллере пользователя, как этотПреобразование массива в объект запроса в Laravel 5

public function store(Request $request) 
{ 
    User::create($request->all()); 

} 

и в другой контроллер я хочу использовать этот метод

public function test(Request $request) 
{ 
    ..... 
    app('\App\Http\Controllers\UserController')->store($test_array); 
    ... 
} 

и $test_array является:

{"name":"test","email":"[email protected]"} 

и, наконец, показать мне ошибку

Аргумент 1 передается в App \ Http \ Контроллеры \ UserController :: магазин() должен быть экземпляром Illuminate \ Http \ Request,

Как преобразовать массив в объект запроса?

+0

Как вы получаете '$ request' массив до' приложений ('\ App \ Http \ Контроллеры \ UserController') -> магазин ($ запроса); '? –

+0

Да, я редактирую свой пост. – paranoid

ответ

1

Я не думаю, что вы сможете использовать store() таким образом.

Если вы звоните store() действие из других мест, вы можете поместить сохраняющуюся логику в модель:

class User extends Model 

    public function storeData($data) 
    { 
     $createdUser = User::create($data); 
     return $createdUser; 
    } 

А потом называете это от store() действий и test().

Если не только, просто изменить store() к:

public function store($data) 
{ 
    User::create($data); 
} 
+0

Спасибо @Alexey, но я не могу добавить метод в модель, потому что до этого я добавил какой-либо метод в контроллер – paranoid

+0

Я думаю, вы не понимали, что я имею в виду. Вы можете поместить логику, связанную с БД, внутри класса модели. Затем вы сможете вызвать его с любого контроллера и любого действия, которое вы хотите (из 'test()' и из 'store()'). Это правильное использование шаблона MVC. –

+0

У меня есть проверка и еще одна вещь в магазине метод пользовательского контроллера, и я, если я использую в модели, пишу это в тестовом контроллере 'User :: create ($ request); ' – paranoid

-1

Почему бы вам не использовать перенаправление с помощью мелькнула данных сессии? Поскольку документация Response - Redirecting With Flashed Session Data говорит:

Перенаправление на новый URL и мигающие данные на сессии, обычно делается в то же самое время. Для удобства вы можете создать экземпляр RedirectResponse и данные флэш-памяти для сеанса в одной цепочке методов . Это особенно удобно для хранения Статус сообщения после действия:

Route::post('user/profile', function() { 
    // Update the user's profile... 

    return redirect('dashboard')->with('status', 'Profile updated!'); 
}); 

Конечно, после того, как пользователь перенаправляется на новую страницу, вы можете получать и отображать прошили сообщение от сессии. Для например, используя синтаксис клинка:

@if (session('status')) 
    <div class="alert alert-success"> 
     {{ session('status') }} 
    </div> 
@endif 

Так что в вашем случае вы бы хранить return redirect('dashboard')->with('user', $userModel);

+0

Вы не понимаете мою проблему, я хочу использовать метод контроллера в другом место для REST API – paranoid

4

использование $request->merge($someArray)

Вы можете попробовать этот способ ..

тест вашего второго контроллера метод.

public function test(Request $request) 
{ 
    $another_array = []; 
    $another_array['eg'] = $test_array; 
    $request->merge($another_array); 

    ..... 
    app('\App\Http\Controllers\UserController')->store($request->get('eg')); 
    ... 
} 

Вашего $test_array должен быть типа array

Надеется, что это решит вашу проблему.

0

Просто используйте

$request = new Illuminate\Http\Request($test_array); 
+0

Что будет считаться ответом? Большая часть кода для копирования-вставки? 'Тест общественная функция (Request $ запрос) { ..... $ запрос = новый Осветите \ Http \ Request ($ test_array); app ('\ App \ Http \ Controllers \ UserController') -> store ($ request-> all()); ... } ' – KShport

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