Это код пример драйвера и нормальное управление (не AJAX) Request или запроса.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class UserController extends Controller
{
/**
* Store a new user.
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
$name = $request->input('name');
//
}
}
Что я должен делать для того, чтобы оно функционировало также для запросов AJAX в функции store()
?
Если я верю в другую функцию storeAjax()
, я могу включать ее в routes.php (с новым распределенным маршрутом) и функционируй, но это не хорошая практика, так как у меня есть 2 маршрута и дебет быть тем же самым для обоих запросов.
Может быть, это смогло помогать тебе:
if($request->ajax()){ }//procesa la peticion ajax
else{return $view;} //retornas por ejemplo,una vista
Относительно Routes.php
, нет необходимости изменять, что ты делаешь в твоем JS, так это request типа GET
:
$.ajax(type: 'GET', ...)
И ты обрабатываешь просьбу, я надеюсь, что он помогает тебе.
Используй следующий пример, чтобы создавать функцию самого могущественного драйвера.
-
public function store()
{
$data = [
'name' => Input::get('name'),
];
try
{
$result = $this->repository->create($data);
}
catch (Illuminate\Database\QueryException $e)
{
Log::error("YourController@store: register your error", array('created_by' => Auth::user()->id, 'message' => $e->getMessage());
if (!Request::ajax())
{
return Redirect::back()
->with('type_message', "danger")
->with('message', trans('web.error'))
}
else
{
return "{\"result\":\"ko\",\"error\":\"$e->getMessage()\"}";
}
}
if ($result)
{
if (!Request::ajax())
{
Log::info("YourController@store: Created OK", array('created_by' => Auth::user()->id, 'result' => $result->toArray()));
return Redirect::back()
->with('type_message', "success")
->with('message', trans("web.created_ok"));
}
else
{
return "{\"result\":\"ok\",\"id\":\"$result->id\",\"name\":\"$result->name \"}";
}
}
else
{
return "{\"result\":\"ko\",\"error\":\"Hubo un error guardando\"}";
}
}
Пример просьбы AJAX:
$.ajax({
url: "{{ route('my_route')}}",
data: "name="+name+"&_token={{ csrf_token()}}",
dataType: "json",
method: "POST",
success: function(result)
{
if (result['result'] == 'ok')
{
}
else
{
}
},
fail: function(){
},
beforeSend: function(){
}
});
});
Создай маршрут, который указывал бы на метод Store твоего драйвера, который подаст тебя так для просьб с формуляра как для просьб AJAX:
Route::post('/my_route', array('as' => 'my_route', 'uses' => 'YourController@store'));
Не необходимо осуществлять другой mГ©todo.
, Если оно ты не функционирует, может быть благодаря тому, что Laravel 5 включает одну validaciГіn token CSRF, по причине безопасности, во все просьбы POST, УДАР В ЛУНКУ и DELETE. Ты должен включать этот token в ней peticiГіn.
ты Можешь видеть различные mГ©todos, чтобы включать этот token в ней documentaciГіn чиновник: http://laravel.com/docs/5.1/routing#csrf-protection
Ты можешь пробовать с этим
public function store(Request $request)
{
if($request->ajax())
{
$name = $request->input('name');
Response->json($name);
}
}