Действие контроллера - это в основном метод, который обычно выполняется при открытии URL-адреса (когда вы подключаете их к маршрутам).
В вашем примере вы связали два маршрута с их соответствующими действиями:
Route::post('/home','HomeController@store');
Route::get('/home', 'HomeController@index')->name('home');
Теперь, когда вы успешно вошли в систему, представьте, что вы попали на страницу с URL-адресом http://localhost:8000/home
в своем веб-браузере.
Ключевым отличием является метод, который вы используете для вызова вашегоroute (вы можете получить обзор различий здесь ), в вашем случае вы используете метод GET.
Результирующее действие выполнит его, связанное с /home
route с GETметод, то есть действие (или метод) HomeController@index
.
Метод store, хотя и находится в том же классе HomeController, не запускается, пока вы не выполните маршрут /home
, но с помощью метода POST .
Вы можете подтвердить это, если поместите отладочное сообщение в каждый из методов следующим образом:
class HomeController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function store(Request $request)
{
echo 'I will not be executed';
}
public function index()
{
echo 'I have been executed';
}
}
Если вы хотите просто сохранить инфо-записькогда ты виСидя на маршруте /home
с методом GET, вы можете поместить сохранение в сам метод index и избавиться от метода store:
class HomeController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function index()
{
// You can omit Auth::check() because you are using the auth middleware
// that exactly does this job.
Info::create([
'name' => Auth::user()->name,
'ip' => Request::ip(),
]);
return view('home');
}
}
Имейте в виду, что, выполнив таким образом, вы получитеновая запись базы данных для каждого просмотра страницы, который вы делаете для этого маршрута (если вы продолжаете обновлять страницу, вы должны увидеть новые записи, добавляемые в базу данных).
Обновление
Когда вы используете Eloquent Models,laravel будет искать таблицу, названную в честь множественного имени модели (модель Info
попытается использовать таблицу infos
).
Однако вы создали таблицу с именем info
.Чтобы решить, что вы можете либо переименовать таблицу и перезапустить миграцию с помощью php artisan migrate:refresh
( он удалит все существующие данные в базе данных, которую вы используете для приложения laravel )
Или укажитеимя таблицы для этой модели Laravel:
class Info extends Model
{
protected $table = 'info';
protected $fillable = ['ip', 'name'];
}