Есть ли способ реализовать динамическую маршрутизацию для моего веб-сайта электронной коммерции с использованием фреймворка laravel?

#php #html #laravel #content-management-system

#php #HTML #laravel #система управления контентом

Вопрос:

В настоящее время я застрял, пытаясь разработать панель администратора для веб-сайта электронной коммерции. Я хочу иметь возможность разрешить клиенту создавать свою собственную страницу через панель администратора. Например, если клиент заполняет форму, которую я создал, чтобы добавить новую страницу с заголовком «О нас», URI как AboutUs, а содержимое страницы может быть просто «Добро пожаловать на страницу «О нас»!». Ниже приведены части моего кода, а также ссылка на репозиторий GitHub.

Это мой PageController.php

 class PageController extends Controller
{
/**
 * Display a listing of the resource.
 *
 * @return IlluminateHttpResponse
 */
    public function index()
    {
    $pages = Page::all()->toArray();
    return view('page.index', compact('pages'));
    }

/**
 * Show the form for creating a new resource.
 *
 * @return IlluminateHttpResponse
 */
    public function create()
    {
    //This will load create.blade.php
    return view('page.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  IlluminateHttpRequest  $request
     * @return IlluminateHttpResponse
     */
        public function store(Request $request)
    {
    $this->validate($request, [
        'title'            =>  'required',
        'URI'              =>  'required',
        'pageContent'      =>  'required',
    ]);
    $page = new Page([
        'title'            =>    $request->get('title'),
        'URI'              =>    $request->get('URI'),
        'pageContent'      =>    $request->get('pageContent'),
    ]);
    $page->save();
    return redirect()->route('page.index')->with('success', 'Page Added');
    }
  

Это мой Page.php модель.

 class Page extends Model
{
protected $fillable = ['title', 'URI', 'pageContent'];
}
  

Это моя миграция.

 class CreatePagesTable extends Migration
{
/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('pages', function (Blueprint $table) {
        $table->id();
        $table->string('title');
        $table->string('URI');
        $table->string('pageContent');
        $table->timestamps();
    });
}
  

Это мой create.blade.php где пользователь заполняет форму для создания новой страницы.

 @extends('pageManagement')
<!-- Content being displayed!-->
@section('content')
<div class="row">
<div class="col-md-12">
    <br />
    <h3 aling="center">Add Page</h3>
    <br />
    @if(count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
        <!--Prints valdiation errors on this page!-->
        @foreach($errors->all() as $error)
            <li>{{$error}}</li>
        @endforeach
        </ul>
    </div>
    @endif
    <!--Checks if success has been returend from PageController.php!-->
    @if(Session::has('success'))
    <div class="alert alert-success">
        <p>{{ Session::get('success') }}</p>
    </div>
    @endif

    <form method="post" action="{{url('page')}}">
        {{csrf_field()}}
        <div class="form-group">
            <input type="text" name="title" class="form-control" placeholder="Enter page title"  
/>
        </div>
        <div class="form-group">
            <input type="text" name="URI" class="form-control" placeholder="Enter page URI" />
        </div>
        <div class="form-group">
            <input type="text" name="pageContent" class="form-control" placeholder="Enter page 
content" />
        </div>
        <div class="form-group">
            <input type="submit" class="btn btn-primary" />
        </div>
    </form>
</div>
</div>
<!-- Closes the directive!-->
@endsection
  

This is the dynamic page, I want to display the page’s contents on.

 <!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
{{ $pageContent -> pageContent}}
<h1>This is a Heading</h1>
<p>This is a paragraph.</p>

</body>
</html>
  

This is the page management page, where the admins can see all the pages in the website.

 @extends('pageManagement')

@section('content')
<div class="row">
<div class="col-md-12">
    <br />
    <h3 align="center">Page Data</h3>
    <br />
    @if($message = Session::get('success'))
    <div class="alert alert-success">
        <p>{{$message}}</p>
    </div>
    @endif
    <div align="right">
        <a href="{{route('page.create')}}" class="btn btn-primary">Add</a>
    </div>
    <table class="table table-bordered">
        <tr>
            <th>Title</th>
            <th>URI</th>
            <th>Edit</th>
            <th>Delete</th>
        </tr>
        @foreach($pages as $row)
            <tr>
                <td>{{$row['title']}}</td>
                <td>{{$row['URI']}}</td>
                <td></td>
                <td></td>
            </tr>
        @endforeach
    </table>
</div>
</div>
@endsection
  

Это мой pageManagement.blade.php

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Page Management</title>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0- 
alpha/css/bootstrap.css" rel="stylesheet">
</head>
<body>
<div class="container">
<!-- Allows displaying content!-->
@yield('content')
</div>
</body>
</html>
  

Это маршруты, которые я использовал в web.php

 Route::resource('page', 'PageController');

Route::get('page/{URI}', function($URI) {
$pageContent = DB::tables('Page')->where('URI',$URI);
return view('page.dynamicPage', ['pageContent' => $pageContent]);
});
  

Я также пробовал несколько разных маршрутов, однако все они не работают, включая Route::get(‘страница/{URI} … один из приведенных выше. Ниже приведены другие, которые я пробовал.

 /*Route::get('page/{any}', function($any) {
$pageContent = explode("/",$any);
})->where("any", ".*");*/

/*Route::get('/', function () {
Route::get('{URI}', 'PageController@getPage');
});*/

//Route::get('URI','PageController@getPage');
  

Моя ссылка на репозиторий GitHub:https://github.com/xiaoheixi/myFirstWebsite
Всем спасибо за помощь! 😀
О! Я забыл добавить желаемый результат и тот, который у меня есть в настоящее время, в основном я хочу, чтобы отображалось содержимое страницы, соответствующее URI, однако я просто продолжаю получать пустой белый экран, когда я набираю, например, «127.0.0.1: 8000 / страница / AboutUs», в строке поиска…
Ооочень большое вам спасибо за чтение, коллеги-программисты!

Комментарии:

1. DB::table('pages')->where('URI',$URI)->first() вместо DB::tables('Page')->where('URI',$URI)

2. также опубликуйте свое сообщение об ошибке, нам очень полезно помочь

3. Сложность в том, что нет сообщения об ошибке, в настоящее время я использую Visual Studio Code IDE, и он ничего не показывает… вот почему я разочарован, если все выглядит правильно, почему это не работает?

4. Я последовал вашему совету, пользователь 3253002 и заменил DB:: tables (‘Страница’)-> where (‘URI’, $ URI) на DB::table (‘страницы’)-> where (‘URI’, $ URI)-> first (), но все равно получил белый пустой экран.

5. ваше представление page.dynamicPage не существует в вашем репозитории.. у вас есть только page.create и page.index ..