Пытаюсь научиться импортировать базовый лист Excel в laravel 5.1
vname Vservice vphone vmobile
test name test service test number 123232 test mobile 12344
Я сделал следующую функцию
public function ImportVlist()
{
Excel::load('/import.xlsx', function($reader)
{
$results = $reader->get();
foreach ($results as $key => $value) {
foreach ($value as $key => $value1) {
Vlist::create([
'vname'=>$value1->vname,
'vservice' => $value1->vservice,
'vphone' => $value1->vphone,
'vmobile' => $value1->vmobile
]);
}
}
})->get();
}
Я проложил маршрут
Route::get('/vlist/import' , 'VlistsController@ImportVlist');
и в индексе я сделал следующую ссылку
<li><a href="{{ action('VlistsController@ImportVlist') }}"> <span>Import Suppliers </span></a></li>
но когда я нажимаю, я получаю страницу, не найденную рядом с Excel не импортируется в MySQL DB
Маршруты действий должны быть определены следующим образом:
Route::get('/vlist/import', array('as' => 'vlist.import', 'uses' => 'VlistsController@ImportVlist'));
Также вы можете использовать controller()
помощник:
Route::controller('vlist', 'VlistsController', ['getImportVlist' => 'vlist.import']);
Тогда все методы в этом контроллере с префиксами http-метода будут привязаны к таким маршрутам, как:
public function getImportVlist()
{
Excel::load('/import.xlsx', function($reader)
{
...
}
}
И можно ссылаться в представлениях через названия маршрутов:
<li><a href="{{ route('vlist.import') }}"> <span>Import Suppliers </span></a></li>
Но лично я предпочитаю чистый routes
:
Route::get('/vlist/import', ['uses' => 'VlistsController@ImportVlist', 'as' => 'vlist.import']);
И тогда вам не нужно держать контроллеры и маршруты а также просмотров в синхронизации:
<li><a href="{{ route('vlist.import') }}"> <span>Import Suppliers </span></a></li>
Плюсы:
1) перенаправленное имя является более значимым.
2) метод переименования контроллера требует только исправления в routes.php
,
3) становится проще локализовать / настроить маршрутные ссылки / заголовки / хлебные крошки:
<li><a href="{{ route('vlist.import') }}"> <span>@lang('vlist.import')</span></a></li>
vlist.en.php
<?php
return [
...
'import' => 'Import Suppliers',
...
];
vlist.ru.php
<?php
return [
...
'import' => 'Поставщики',
...
];
Других решений пока нет …