Laravel добавляем административный раздел

27.12.2019

Рассмотрим пример создания административного раздела на Laravel 6, включая минимальный дизайн, сообщение об ошибках и прочее.

Если У Вас еще не установлена система, то стоит сначала ознакомится со статьями:
Установка и первичная настройка Laravel 6 и Авторизация и регистрация на laravel 6

Для начала создаем контроллер:

 
php artisan make:controller Admin/DashboardController --resource

Редактируем его (/app/Http/Controllers/Admin/DashboardController):

 
<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class DashboardController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return view('admin.dashboard.index');
    }

}

Добавляем роут routes/web.php:

 
Route::group([
    'middleware' => 'admin'
], function (){
    Route::get('/admin', 'Admin\DashboardController@index');
//    Route::resource('/admin/posts', 'Admin\PostsController');
});

Внимание: Если у Вас еще не создан middleware и/или еще не настроена авторизация, то сначала нужно воспользоваться инструкцией: Авторизация и регистрация на laravel

Теперь добавляем необходимые файлы видов (пердставлений):

  • resources/views/errors.blade.php

     
    @if ($errors->any())
        <div class="container">
        	<div class="row">
        		<div class="col-md-10">
        			<div class="alert alert-danger">
    			        <ul>
    			            @foreach ($errors->all() as $error)
    			                <li>{{ $error }}</li>
    			            @endforeach
    			        </ul>
    			    </div>
        		</div>
        	</div>
        </div>
    @endif
    

  • resources/views/admin/layout.blade.php

     
    <!doctype html>
    <html lang="ru">
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <meta name="description" content="">
        <title>Админка</title>
     
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    
      </head>
    <body>
    
    <div class="d-flex flex-column flex-md-row align-items-center p-3 px-md-4 mb-3 bg-white border-bottom shadow-sm">
      <h5 class="my-0 mr-md-auto font-weight-normal">Админка</h5>
    <!--  <nav class="my-2 my-md-0 mr-md-3">
        <a class="p-2 text-dark" href="/">Главная</a>
        <a class="p-2 text-dark" href="/">Услуги</a>
        <a class="p-2 text-dark" href="/">Контакты</a>
      </nav>-->
    </div>
    
    <hr />
    
    @yield('content')
    
    <hr />
     
    
    <!-- 
    <div class="container">
      <div class="card-deck mb-3 text-center">
        <div class="card mb-4 shadow-sm">
          <div class="card-header">
            <h4 class="my-0 font-weight-normal">Free</h4>
          </div>
          <div class="card-body">
            <h1 class="card-title pricing-card-title">$0 <small class="text-muted">/ mo</small></h1>
            <ul class="list-unstyled mt-3 mb-4">
              <li>10 users included</li>
              <li>2 GB of storage</li>
              <li>Email support</li>
              <li>Help center access</li>
            </ul>
            <button type="button" class="btn btn-lg btn-block btn-outline-primary">Sign up for free</button>
          </div>
        </div>
        <div class="card mb-4 shadow-sm">
          <div class="card-header">
            <h4 class="my-0 font-weight-normal">Pro</h4>
          </div>
          <div class="card-body">
            <h1 class="card-title pricing-card-title">$15 <small class="text-muted">/ mo</small></h1>
            <ul class="list-unstyled mt-3 mb-4">
              <li>20 users included</li>
              <li>10 GB of storage</li>
              <li>Priority email support</li>
              <li>Help center access</li>
            </ul>
            <button type="button" class="btn btn-lg btn-block btn-primary">Get started</button>
          </div>
        </div>
        <div class="card mb-4 shadow-sm">
          <div class="card-header">
            <h4 class="my-0 font-weight-normal">Enterprise</h4>
          </div>
          <div class="card-body">
            <h1 class="card-title pricing-card-title">$29 <small class="text-muted">/ mo</small></h1>
            <ul class="list-unstyled mt-3 mb-4">
              <li>30 users included</li>
              <li>15 GB of storage</li>
              <li>Phone and email support</li>
              <li>Help center access</li>
            </ul>
            <button type="button" class="btn btn-lg btn-block btn-primary">Contact us</button>
          </div>
        </div>
      </div>
     
      <footer class="pt-4 my-md-5 pt-md-5 border-top">
        <div class="row">
          <div class="col-12 col-md">
            <small class="d-block mb-3 text-muted">&copy; 2017-2019</small>
          </div>
          <div class="col-6 col-md">
            <h5>Features</h5>
            <ul class="list-unstyled text-small">
              <li><a class="text-muted" href="#">Cool stuff</a></li>
              <li><a class="text-muted" href="#">Random feature</a></li>
              <li><a class="text-muted" href="#">Team feature</a></li>
              <li><a class="text-muted" href="#">Stuff for developers</a></li>
              <li><a class="text-muted" href="#">Another one</a></li>
              <li><a class="text-muted" href="#">Last time</a></li>
            </ul>
          </div>
          <div class="col-6 col-md">
            <h5>Resources</h5>
            <ul class="list-unstyled text-small">
              <li><a class="text-muted" href="#">Resource</a></li>
              <li><a class="text-muted" href="#">Resource name</a></li>
              <li><a class="text-muted" href="#">Another resource</a></li>
              <li><a class="text-muted" href="#">Final resource</a></li>
            </ul>
          </div>
          <div class="col-6 col-md">
            <h5>About</h5>
            <ul class="list-unstyled text-small">
              <li><a class="text-muted" href="#">Team</a></li>
              <li><a class="text-muted" href="#">Locations</a></li>
              <li><a class="text-muted" href="#">Privacy</a></li>
              <li><a class="text-muted" href="#">Terms</a></li>
            </ul>
          </div>
        </div>
      </footer>
    -->
    </div>
    
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
    
    
    </body>
    </html>
    

  • resources/views/admin/dashboard/index.blade.php

     
    @extends('admin.layout')
    
    @section('content') 
    <div class="pricing-header px-3 py-3 pt-md-5 pb-md-4 mx-auto text-center">
      <h1 class="display-4">Админка index</h1>
      <p class="lead">index</p>
    </div>
    
    @include('errors')
    
    <div class="container">
    <div class="row">
     
        <div class="col-md-4 mb-4">
            @include('admin._menu')
        </div>
        <div class="col-md-8 mb-8">
            Content
        </div>
    
    </div>
    </div>
    @endsection
    

  • resources/views/admin/dashboard/_menu.blade.php

     
    <h4>menu</h4>
    <ul class="list-group">
        <li class="list-group-item">
            <a href="{{route('posts.index')}}">Посты</a>
        </li>
    </ul>
    

    - т.к. постов еще нет, то этот кусок выдаст ошибку!

На что стоит обратить внимание:

 
-------- -------- -------- --------
@include('admin._sidebar')
@yield('content')
-------- -------- -------- --------
@extends('admin.layout')

@section('content') 
123
@endsection

@foreach($posts as $post)
1111
@endforeach
-------- -------- -------- --------

<a href="{{route('posts.index')}}">


Категории: Laravel
Яндекс.Метрика