На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Урок 25. Произвольные ЧПУ в Laravel с примером



На этом уроке из серии уроков по Laravel вы узнаете вариант работы с любыми произвольными адресами страниц сайта, в том числе динамическими, без жесткого прописывания в коде.

ЧПУ

ЧПУ расшифровывается как человеко-понятный URL. Лично мне кажется, что на продвижение сайта и вообще удобство пользования влияет мало, но все же заказчикам часто требуется реализовать данную функцию.

ЧПУ для одной страницы Laravel

В ларавель ЧПУ на самом простом варианте реализуется через роутинг, например, через файл web.php. Что-то типа:

Route::get('/profile', [ProfileController::class, 'showProfile'])->middleware(['auth'])->name('profile');
Здесь если идет гет запрос по адресу /profile, то после проверки на авторизацию, вызывается функция showProfile из класса ProfileController. Что-то типа такой:

class ProfileController extends Controller
{

    public function showProfile(Request $request)
    {
        $user_id = Auth::user()->id;

        $info = DB::table('users')
        ->where('id', $user_id)
        ->first();

        return view('profile', ["info" => $info]);
    }
}
Ну а представление уже любое можно - там только работать с переменной $info – выводить данные по пользователю в каком угодно и удобно виде.

А если страниц много в Laravel?

Данный подход оправдан, если таких точек входа немного и все они отличаются друг от друга. А если нам надо сделать десятки, даже сотни страниц с одинаковым расположением, одинаковыми забираемыми типами данных? Например, это статьи – они отличаются только заголовком и текстом (html код)?

В таком случае как вариант можно использовать вот такой подход. Сначала делаем роутинг:

Route::get('/{pageNotFound1}', [BanlanceController::class, 'show']);
Дальше класс балансер:

class BanlanceController extends Controller
{

    public function show(Request $request, String $pageNotFound1 = "")
    {
        if ($pageNotFound1){
            $html = DB::table('html')
            ->where("chpu", $pageNotFound1)
            ->first();   
            
            if ($html){
                $name = $html->name;
                $txt = $html->txt;
                return view('html', ["name" => $name, "txt" => $txt]);
            }
        }
        abort(404);
    }
}
Смотрите, что тут происходит. Если роутер в ларавель не может понять, куда сунуть этот адрес, то он передает его в балансер. Балансер в свою очередь проверяет наличие чпу в некой таблице и если находит такую строку, то возвращает представление. Таблица может быть, например такая:



Миграция её:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateHtmlTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('html', function (Blueprint $table) {
            $table->id();
            $table->string('chpu', 255);
            $table->string('name', 255);
            $table->text('txt');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('html');
    }
}
Вот так несложно можно обработать произвольный чпу первого уровня вложенности в ларавель. Для второго и выше придется немного изменить код, но тоже большой проблемы не составит.



Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, уроки по Laravel, laravel, php, чпу

Читайте также:


Управление размером окна консоли C#
Как узнать пароль пользователя на сайте на примере япа


© upread.ru 2013-2023
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.