Пишу для тех, кто наткнется на эту тему в поиске. Дальше читая доки, понял что выше я наговнокодил. Нужно так
Делаем именной роут
Route::get('/news/{id}-{alias?}', [App\Http\Controllers\NewsController::class, 'getOne'])->where(['id' => '[0-9]+', 'alias' => '(\w+|-){1,40}'])->name('OneNews');
Делаем модель нужной таблицы, подключаем ее в контроллере
use App\Models\News;
И сам метод контроллера будет выглядеть так
public function getOne($id, $alias = null) { $newsOne = News::findOrFail($id); if ($newsOne->alias !== $alias) { return redirect(route('OneNews', ['id' => $id, 'alias' => $newsOne->alias])); } return view('news_one', ['newsOne' => $newsOne]); }
Метод findOrFail позволит получать 404 ошибку при отсутствии ID в базе, а именной роут поможет с редиректом без лишнего кода.
С id и дефиса.
нет, именно чисто с id.
id + дефис будет давать 404 ошибку
И еще нужно добавить проверку на отсутствие ID в базе с редиректом на стандартную 404 страницу
if(empty($this->news_one[0]->id)){ return abort(404); }
А если роутер изменить так
Route::get('/news/{id}-{alias?}', [App\Http\Controllers\NewsController::class, 'getOne'])->where(['id' => '[0-9]+', 'alias' => '(\w+|-){1,40}']);
т.е. добавить ? после alias сделав параметр необязательным, а функцию так
public function getOne($id, $alias = null)
Задать дефолтное значение для алиаса, то редиректить на правильный урл будет уже начиная с верного id
Офигеть САМ!!! сделал!! Я в шоке с себя !!
public function getOne($id, $alias) { $this->news_one = DB::table('news_items') ->where('id', '=', $id) ->get(); if($this->news_one[0]->alias !== $alias){ return redirect('news/'.$id.'-'.$this->news_one[0]->alias, 301); } return view('news_one', ['news_one' => $this->news_one]); }
Я не могу сообразить как правильно это сделать в ларе.
Вот моя функция в контроллере
public function getOne($id, $alias) { $this->news_one = DB::table('news_items') ->where('id', '=', $id) ->where('alias', '=', $alias) ->get(); return view('news_one', ['news_one' => $this->news_one]); }
Вероятно ее нужно менять по типу - если есть совпадение в базе по ID но алиасы не совпадают, то редирект и вот тут я не знаю как это правильно попробовать согласно синтаксису лары
Резюмирую. ТО что мне нужно сделать получилось, на хост в базу закинул 6 файлов (разбил основной) и запросом оставил уникальные строки.
С Denwer не срослось. Вываливается...
Вы что огромную базу пытаетесь импортировать в МайАдмин через вебинтерфейс?
Большие же базы только по ssh импортировать надо.
P.S. попробуйте для локалки опен сервер https://ospanel.io/ (более юзер флендли чем денвер)
Привет, подскажите, пожалуйста.
php file выполняю считывание файла 70Мб.
Понятно лезет ошибка. А как с ней бороться?
ini_set("memory_limit", "200M");
В начале скрипта или еще больше, если ошибка не пропадает и хостинг позволяет