laravel — Что означает @extends в php?

спросил

Изменено 5 лет, 1 месяц назад

Просмотрено 1к раз

Зачем использовать @extends в файле PHP (использование @ с любым текстом или строкой)?

 @extends('front.layouts.master')
@раздел('контент')
    // ...
@endsection
 

А также скажите мне @if , @endif пример для условия ifelse, я немного запутался в использовании @ с любым синтаксисом или текстом,

Пример кода

 @if ($errors->has ('имя'))
                    <диапазон>
                      {{ $errors->first('имя') }}
                    
                    @endif
 
  • php
  • laravel
  • laravel-blade
6

Предлагаю ознакомиться с официальной документацией: https://laravel. com/docs/5.6/лезвие Это легко понять.

@extends позволяет создать файл блейда, который будет внутри другого блейда:

main.blade.php

 
<голова>  @yield('дополнительные_скрипты)

<тело>
    
Это текст, который я хочу отображать в нескольких представлениях
@доход('контент')

sub.blade.php

 @extends('main')
@section('дополнительные_скрипты')  @endsection
@раздел('контент')
    
Я хочу, чтобы это отображалось только в этом представлении
@endsection

О директиве @if : Я не уверен, что здесь не следует понимать. Можно поконкретнее, что вас смущает?

 @if(isset($переменная))
    Выведите этот текст и эту {{$variable}}
@elseif(isset($anotherVariable))
    Вывод {{$anotherVariable}}
@еще
    Вывести только текст
@endif
 

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Прекратите использовать «расширения» в PHP

Используете ли вы

абстрактные классы или расширяющие классы в коде вашего домена? Надеюсь, вы, , с этого дня остановите . Опубликовано в

·

4 минуты чтения

·

12 августа 2022 г.

Изображение Андреа Пиаккуадио

Позвольте мне сначала прояснить некоторые вещи, прежде чем мы углубимся в проблему . Сегодня мы поговорим о коде, который не относится ни к какому фреймворку. Расширение классов может быть необходимо, потому что выбранный вами фреймворк (Laravel, Symfony, как вы его назовете) или библиотека, которую вы используете, могут вынудить вас сделать это.

Сегодня я хочу обсудить основной код вашего приложения. Вы можете назвать его как хотите: корневой код, основной домен , код DDD . Код, за который вы и/или ваша команда отвечаете.

Используете ли вы в своем коде такие ключевые слова, как « расширяет » или « абстракция »? Я профессионально программирую с 2015 года, и с тех пор я не нашел причин использовать абстрактные классы или расширять какой-либо класс в своем коде. Я до сих пор помню фантастическую статью Марко Пиветты, которая навсегда изменила то, как я разрабатываю свой код.

В статье рассказывается, почему классы final отлично подходят для вашего кода. Вот как с тех пор выглядит мой шаблон класса в PHPStorm для каждого проекта:

Я уже видел и слышал это слишком много раз. Дает ли расширение классов гибкость? Насколько гибко вам дано такое наследование классов:

Любое изменение в корневых классах, как здесь BaseUser , может иметь катастрофические последствия для всего приложения. Я вижу здесь только возможные проблемы, но никакой выгоды. Что вам нужно сделать, это:

Использовать интерфейсы; предотвратить наследование, применив ключевое слово final

Вместо этого код должен выглядеть так:

Многие люди потом говорят мне: черты?» Но тогда эта черта будет хрупкой частью. А вот и второй совет:

Перестаньте бояться повторяющегося кода

Так работает наш мозг: он заставляет вас искать закономерности. Отказ от абстрактных классов и наследования помогает предотвратить неудачные кодовые решения.

Вам нужны новые функции? Начните с интерфейса. Используйте doc-блоки для описания ввода, вывода и причины этого. Это может показаться замедлением, но это помогает вам спланировать то, что вам действительно нужно.

Я хотел бы поделиться примером того, насколько мощной является эта техника. Давайте представим, что нам нужно отправлять уведомления в нашем приложении. Неважно, как и кому. Мы заботимся только о функциональности.

Начнем с определения уведомления, которое будет отправлено. Мы действительно не заботимся о каких-либо деталях. Это всего лишь отправная точка для типов уведомлений (смс-сообщение, сообщение электронной почты, сообщение WhatsApp и т. д.):

Теперь давайте создадим менеджера, который будет выполнять всю работу. Тем не менее, он не заботится о каких-либо деталях сообщения. Это гарантирует увидеть выполненную работу.

Вот что я называю истинной гибкостью. Какие уведомления могут вам понадобиться?

Уведомление по электронной почте

Уведомление WhatsApp

Этот список можно продолжать бесконечно. Используя функцию внедрения зависимостей вашего фреймворка, можно поменять реализацию интерфейса так, чтобы приложение даже не заметило этого. Таким образом, ваше приложение отделено от деталей системы уведомлений. Придумаем простую реализацию. Нам понадобится транспортный механизм для доставки наших уведомлений. Мы могли бы использовать еще один интерфейс:

и настоящий транспорт, который доставляет сообщения электронной почты:

, наконец, простой менеджер уведомлений:

Я уже люблю каждый бит этого кода:

  • принцип единой ответственности: каждая часть заботится только о своей части
  • соблюдается принцип открытости-закрытости: мы можем изменять функциональность как угодно, не нарушая текущую функциональность (добавлять новые транспорты, добавлять новые типы уведомлений и т. д.)
  • изменение транспортных механизмов не влияет на другие части приложения
  • изменение в любой части модуля уведомления не влияет на приложение, пока вы придерживаетесь контракта интерфейса, который мы разработали в начале уведомление.