Verification: a143cc29221c9be0

Php artisan make controller with resource

Php artisan make controller with resource

Содержание

laravel Release

Версия Дата выпуска Версия PHP
8 8 сентября 2020 г. ≥ 7.3.0
7 3 марта 2020 г. ≥ 7.2.5
6 LTS 3 сентября 2019 г., ≥ 7.2.0
5,8 26 февраля 2019 г., ≥ 7.1.3
5,7 4 сентября 2018 г. ≥ 7.1.3
5,6 7 февраля 2018 г. ≥ 7.1.3
5.5 LTS 30 августа 2017 г. ≥ 7.0.0
5,4 24 января 2017 г. ≥ 5.6.4
5,3 23 августа 2016 г. ≥ 5.6.4
5.2 21 декабря 2015 г. ≥ 5.5.9
5.1 LTS 9 июня 2015 г. ≥ 5.5.9
5.0 4 февраля 2015 г. ≥ 5,4,0
4.2 1 июня 2014 г. ≥ 5,4,0
4.1 12 декабря 2013 г. ≥ 5.3.0
4.0 28 мая, 2013 ≥ 5.3.0
3.2 22 мая 2012 г.
3.1 27 марта 2012 г.
3.0 22 февраля 2012 г.
2.0 Сентябрь 2011 г.
1.0 Июнь 2011 г.
Легенда: Старая версия, не поддерживается Старая версия, все еще поддерживается
Текущая стабильная версия Последняя предварительная версия Будущий выпуск

Google Trends from 2004 to current

https://trends.google.com/trends/explore?date=all&q=Laravel,zend,symfony,yii

Все про  фреймворк Laravel - обзор всех возможностей ларавелВсе про  фреймворк Laravel - обзор всех возможностей ларавел

github trending Repositories

https://github.com/trending/php?since=monthlyВсе про  фреймворк Laravel - обзор всех возможностей ларавел

Почему Ларавел?

Easy to Learn

Все про  фреймворк Laravel - обзор всех возможностей ларавел

Ready For Tomorrow

Great Community

Great Community

https://laracasts.com/

Поднимите свои навыки веб-разработки на новый уровень с помощью экспертных скринкастов о Laravel, Vue и многом другом.

Composer Powered
www.getcomposer.org
Dependency Manager for PHP

Composer Powered www.getcomposer.org Dependency Manager for PHP

Eloquent ORM

Eloquent ORM

Easy for TDD
FAIL PASS
REFACTOR

Easy for TDD (FAIL - PASS - REFACTOR)

INSTALLATION
It’s too easy, I don’t have to tell you.

INSTALLATION It’s too easy, I don’t have to tell you.

IoC
Inverse of Control
IlluminateContainerContainer

IoC Inverse of Control IlluminateContainerContainer

Wikipedia
In software engineering, inversion of control
describes a design in which custom-written
portions of a computer ...

В программной инженерии инверсия управления описывает схему, в которой специально написанные части компьютерной программы получают поток управления из универсальной многоразовой библиотеки «то, что вы получаете, когда ваша программа выполняет вызов» «Удаление зависимости из кода»

Simplifying Dependency Injection

Hard-coded source dependency
public function sendEmail()
{
$mailer = new Mailer;
$mailer->send();
}
public function sendEm...

Hard-coded source dependency

Telling IoC what we need

Simple ways to bind to the
IoC
App::bind(‘SomeClass’, function() {
return new Foo;
});
$fooObject = new Foo;
$object = App...

Simple ways to bind to the IoC

Singleton Dependencies
$object = App::singleton(‘CurrentUser’, function() {
$auth = App::make(‘Auth’);
return $auth->user(...

Singleton Dependencies

Automatic Dependency Resolution
class EmailService {
public function __construct(Mailer $mailer)
{
$this->mailer = $mailer...

Automatic Dependency Resolution

Service Providers

Service Providers

Поставщики услуг - это центральное место при начальной загрузке всех приложений Laravel . Об этом говорит сайт https://intellect.icu . Ваше собственное приложение, а также все основные службы Laravel загружаются через поставщиков услуг.

Service Providers
use IlluminateSupportServiceProvider;
class ContentServiceProvider extends ServiceProvider {
public func...

Service Providers

Laravel Facades
Illuminate/Support/Facades/Facade

Laravel Facades

Фасады предоставляют «статический» интерфейс для классов , доступных в сервисном контейнере приложения . Laravel поставляется с множеством фасадов, которые обеспечивают доступ почти ко всем функциям Laravel. Фасады Laravel служат «статическими прокси» для базовых классов в сервисном контейнере, обеспечивая преимущества краткого выразительного синтаксиса, сохраняя при этом большую тестируемость и гибкость, чем традиционные статические методы.

Все фасады Laravel определены в пространстве имен. Итак, мы можем легко получить доступ к такому фасаду:Illuminate\Support\Facades

What is Facade
In Laravel Context
Facade is a class that provide access
to an object registered
in the IoC container.
Faca...

What is Facade In Laravel Context

Facade is a class that provide access to an object registered in the IoC container. Facade Class IoC Container Object A cades enable you to hide complex interface behind a simple one.

What is happening?
Illuminate/Support/Facades/Route
Route::get(‘/’, ‘HomeController@getIndex’);
$app->make(‘router’)->get(...

What is happening?

Facades in Laravel
Illuminate/Support/Facades/
App Artisan Auth Blade Cache Config Cookie Crypt
DB Event File Form Hash HT...

Facades in Laravel

Eloquent
Talking to your data
IlluminateDatabaseEloquentModel

Eloquent Talking to your data

Eloquent ORM, включенный в Laravel, предоставляет красивую и простую реализацию ActiveRecord для работы с вашей базой данных. Каждая таблица базы данных имеет соответствующую «Модель», которая используется для взаимодействия с этой таблицей. Модели позволяют запрашивать данные в таблицах, а также вставлять новые записи в таблицу.

Перед началом работы обязательно настройте соединение с базой данных в .

$result = mysql_query(“SELECT * FROM `users`”);
How you query in plain PHP 5.4 or less (deprecated)
$mysqli = new mysqli(“...

Сравнение кодинга с использованием Eloquent ORM и без использования Eloquent ORM

User::all();
DB::table(‘users’)->get();
IlluminateDatabaseQueryBuilder
What happens when you use Eloquent ORM

What happens when you use Eloquent ORM

Create, Read, Update, Delete
Post::create($data);
Post::find($id);
Post::find($id)->update($data);
Post::delete($id);

Create, Read, Update, Delete in Eloquent ORM

Eloquent Model Class
class Post extends Eloquent {
public function comments() {
return $this->hasMany(‘Comment’);
}
public...

Eloquent Model Class class

Eloquent Model Class
class Post extends Eloquent {
public function comments() {
return $this->hasMany(‘Comment’);
}
public...

Eloquent Model Class

$post = Post::find($id);
$author = post->author;
// get the author object
Get Post’s Author Object
$posts = Post::with(‘au...

Get Posts including Authors

Get Post Comments Approved
$post = Post::find($id);
$comments = $post->comments()
->where(‘approved’, true)->get();

Get Post Comments Approved

Model with Query Scope
$published_posts = Post::published()->get();
// gets all posts published
$published_posts = Post::w...

Model with Query Scope

Query Scope Example
class Post extends Eloquent {
public function comments() {
return $this->hasMany(‘Comment’);
}
public ...

Query Scope Example

Eloquent Relations

Eloquent Relations

Eloquent Relationship
One to One
(hasOne)
class User
$this->hasOne(‘Profile’,
‘user_id’);
function Profile()
Users
pK: id
...

Eloquent Relationship One to One (hasOne)

class Post
$this->
hasMany(‘Comment’);
function comments()
Posts
pK: id
title
user_id
Comments
pk: id
fK: post_id
user_id
...

Eloquent Relationship One to Many (hasMany)

class User
$this->
belongsToMany(‘Group’);
function groups()
Users
pK: id
username
email
Groups
pk: id
Name
Group_User
use...

Eloquent Relationship Many to Many (belongsToMany)

class Country
$this->
hasManyThrough(‘User’);
function posts()
Countries
pK: id
name
code
Posts
pk: id
user_id
title
body
...

Eloquent Relationship One to Many through (hasManyThrough)

Eloquent Relationship
Polymorphic Association
$user->image; $movie->image;
class Movie
$this-> morphMany(‘Photo’,
‘imageab...

Eloquent Relationship Polymorphic Association

Eloquent Relationship
Many to Many Polymorphic Association
$movie->tags; $post->tags;
Posts
pK: id
title
body
Taggables
ta...

Eloquent Relationship Many to Many Polymorphic Association

Underneath Eloquent Model
Query Builder
DB::table(‘users’)->get();
DB::table(‘users’)->where(‘email’, ‘raftalks@gmail.com’...

Underneath Eloquent Model Query Builder

Complex Queries via Query Builder
DB::table(‘users’)
->join(‘contacts’, function($join) {
$join->on(‘users.id’, ‘=‘, ‘cont...

. Complex Queries via Query Builder

Find out remaining 70% of Eloquent
Features from the documentation

Find out remaining 70% of Eloquent Features from the documentation

Routing
Wolf

Routing Laravel

Multiple Routing Paradigms
1. route to closures
2. route to controller actions
3. route to RESTful controllers
4. route to...

Multiple Routing Paradigms

  • 1. route to closures
  • 2. route to controller actions
  • 3. route to RESTful controllers
  • 4. route to resource

Множественные парадигмы маршрутизации

  • 1. роуты это замыкания
  • 2. роуты это акшены в контроллерах
  • 3. роуты RESTful контроллеры
  • 4. роуты это ресуры

Routing to Closure
Route::get(‘techtalks’, function() {
return “<h1> Welcome </h1>“;
});
Route::post(‘techtalks’, function...

Routing to Closure

Route Groups and Filters
Route::group([‘prefix’=>’settings’, ‘before’=>’auth’], function() {
Route::get(‘users’, function(...

Route Groups and Filters

Subdomain Routing
// Registering sub-domain routes
Route::group([‘domain’ =>’{account}.fihaara.com’], function() {
Route::...

Subdomain Routing

Routing to a Controller Action
class HomePageController extends BaseController {
public function home()
{
return “welcome ...

Routing to a Controller Action

class TechTalksController extends Controller {
public function getIndex() {} /talks
public function getTalkerProfile($id) ...

Routing to RESTful Controller

class PostsController extends Controller {
public function index() {} // posts GET
public function create() {} // posts/cr...

Routing to Resource Controller

Other Cool Features

MVC in laravel

Все про  фреймворк Laravel - обзор всех возможностей ларавел

Other Cool Features

Authentication
$credentials = [‘username’=> ‘raftalks’, ‘password’ => ‘secret’];
if (Auth::attempt($credentals) === false)...

Authentication

Localization
App::setLocale(‘dv’);
echo Lang::get(‘news.world_news’); // out puts “‫ދ‬ު ‫ނ‬ި ‫ޔ‬ޭ ‫ގ‬ެ ‫ޚ‬ަ ‫ބ‬ަ ‫ރ‬ު ”
ec...

Localization

Artisan CLI
Laravel Provides
Artisan Commands for
Rapid Development
You can develop custom
Artisan commands
for a package ...

. Artisan CLI

Laravel Provides Artisan Commands for Rapid Development You can develop custom Artisan commands for a package or an application

Creating DB Migration
php artisan migrate:make create_users_table --create=users
class Create_Users_table extends Migratio...

Creating DB Migration

Seeding into your DB
class DefaultAdminUserSeeder extends Seeder {
public function run() {
DB::table(‘users’)->delete(); /...

Все про  фреймворк Laravel - обзор всех возможностей ларавел

Seeding into your DB

Events
Event::fire(‘news.created’, $post);
Event::listen(‘news.created’,function($post) {
UserPostCounter::increment(‘post...

Events

Mail
Mail::send(‘emails.welcome’, $data, function($message) use($user)
{
$message->to($user->email, $user->name)
->subject...

Mail

Queues
Beanstalkd
Amazon SQS
IronMQ
Redis
Synchronous (for lcoal use)
Queue::push('SendEmail', [‘message' => $message]);
p...

Queues

  • Beanstalkd
  • Amazon
  • SQS
  • IronMQ
  • Redis
  • Synchronous (for lcoal use)

Remote SSH
SSH::run([
‘cd /var/www’,
‘git pull origin master’
]);

Remote SSH

Laravel Homestead
ng Vagrant, we now have easy way to simply manage virtual mac
Included Softwares
• Ubuntu 14.04
• PHP 5....

Laravel Homestead

ng Vagrant, we now have easy way to simply manage virtual mac Included Softwares

Sign Up -> Add Your Cloud’s API Key -> Serve Happiness
forge.laravel.com

Nova - это красиво оформленная административная панель для Laravel. Тщательно созданный создателями Laravel, чтобы сделать вас самым продуктивным разработчиком в галактике.

https://nova.laravel.com/

Все про  фреймворк Laravel - обзор всех возможностей ларавел

Конфигурация, управляемая кодом

Настройте всю панель управления Nova с помощью простого кода PHP. Ни одна из ваших конфигураций Nova не сохраняется в базе данных. Настроить безболезненно. Безболезненно развернуть.

Сохраняет чистоту вашего приложения

Легко добавить панель администрирования Nova в существующее приложение Laravel, не касаясь ваших моделей Eloquent. После настройки ресурса Nova для каждой модели вы готовы к работе.

Laravel + Vue.js = ❤️

Nova - это элегантное одностраничное приложение, созданное на Laravel и Vue.js. Он такой же гладкий, как шелк, и писать нестандартные компоненты очень просто.

Lumen.

Потрясающе быстрый микро- фреймворк от Laravel.

Молниеносные микросервисы и API- интерфейсы с ожидаемой элегантностью.

https://lumen.laravel.com/

Все про  фреймворк Laravel - обзор всех возможностей ларавел

Все про  фреймворк Laravel - обзор всех возможностей ларавел

Meet the community @
IRC
Channel: #laravel
Server: irc.freenode.net
Port: 6667

Laravel Official Packages

  • Cashier (Stripe)
  • Cashier (Paddle)
  • Cashier (Mollie)

Laravel Cashier предоставляет удобный и понятный интерфейс для сервисов выставления счетов по подписке Stripe . Он обрабатывает почти весь шаблонный платежный код подписки, который вы боитесь писать. В дополнение к базовому управлению подпиской, Cashier может обрабатывать купоны, заменять подписку, «количество» подписки, льготные периоды отмены и даже создавать PDF-файлы счетов.

  • Dusk Laravel Dusk предоставляет выразительный, простой в использовании API для автоматизации и тестирования браузера. По умолчанию Dusk не требует установки JDK или Selenium на вашем компьютере. Вместо этого Dusk использует автономную установку ChromeDriver . Однако вы можете использовать любой другой драйвер, совместимый с Selenium, который пожелаете.
  • Envoy Laravel Envoy предоставляет чистый, минимальный синтаксис для определения общих задач, которые вы выполняете на своих удаленных серверах. Используя синтаксис в стиле Blade, вы можете легко настроить задачи для развертывания, команды Artisan и многое другое. В настоящее время Envoy поддерживает только операционные системы Mac и Linux.
  • Horizon Horizon предоставляет красивую панель управления и конфигурацию на основе кода для ваших очередей Redis на базе Laravel. Horizon позволяет легко отслеживать ключевые показатели вашей системы очередей, такие как пропускная способность, время выполнения и сбои заданий.

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

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

    Jetstream разработан с использованием Tailwind CSS и предлагает на ваш выбор строительные леса Livewire или Inertia .

  • Passport Laravel уже позволяет легко выполнять аутентификацию с помощью традиционных форм входа в систему, но как насчет API? API обычно используют токены для аутентификации пользователей и не поддерживают состояние сеанса между запросами. Laravel упрощает аутентификацию API с помощью Laravel Passport, который обеспечивает полную реализацию сервера OAuth2 для вашего приложения Laravel за считанные минуты. Passport построен на основе сервера League OAuth2 , поддерживаемого Энди Миллингтоном и Саймоном Хэмпом.
  • Sanctum Laravel Sanctum предоставляет легкую систему аутентификации для SPA (одностраничных приложений), мобильных приложений и простых API на основе токенов. Sanctum позволяет каждому пользователю вашего приложения генерировать несколько токенов API для своей учетной записи. Этим токенам могут быть предоставлены способности / области, которые определяют, какие действия токенам разрешено выполнять.
  • Scout Laravel Scout предоставляет простое решение на основе драйверов для добавления полнотекстового поиска в ваши модели Eloquent . Используя наблюдателей моделей, Scout будет автоматически синхронизировать ваши поисковые индексы с вашими записями Eloquent.

    В настоящее время Scout поставляется с Algolia ; однако написать собственные драйверы просто, и вы можете расширить Scout своими собственными реализациями поиска.

  • Socialite Помимо типичной аутентификации на основе форм, Laravel также предоставляет простой и удобный способ аутентификации с поставщиками OAuth с помощью Laravel Socialite . Socialite в настоящее время поддерживает аутентификацию через Facebook, Twitter, LinkedIn, Google, GitHub, GitLab и Bitbucket.
  • Telescope Laravel Telescope - элегантный помощник отладки для фреймворка Laravel. Telescope обеспечивает понимание запросов, поступающих в ваше приложение, исключений, записей журнала, запросов к базе данных, заданий в очереди , почты, уведомлений, операций с кешем, запланированных задач, дампов переменных и т. Д. Telescope станет прекрасным дополнением к вашей локальной среде разработки Laravel.

Laravel Other Packages

Laravel Envoyer


Laravel Envoyer — это сервис развертывания с нулевым простоем для ваших PHP и Laravel приложений.

Laravel Mix


Laravel Mix (в прошлом назывался Laravel Elixir) — это инструмент, который дает вам практически полностью управляемый процесс сборки фронтенда. Он обеспечивает понятный и удобный API для определения базовых этапов сборки Webpack для вашего Laravel приложения.

Laravel Medialibrary


Пакет Laravel Medialibrary ассоциируетвсе типы файлов с Eloquent-моделями. Этот пакет делает работу с медиа-объектами удивительно легкой.

Laravel Echo


Laravel Echo — это JavaScript библиотека , которая позволяет вам подписываться на каналы и прослушивать транслируемые события через WebSoсkets.

Индекс для поля title

Создадим миграцию:

php artisan make:migration alter_table_post_add_title_index --table=posts

Изменим созданный файл:

public function up()
{
    Schema::table('posts', function (Blueprint $table) {
        $table->index('title');
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::table('posts', function (Blueprint $table) {
        $table->dropIndex('title');
    });
}

И выполним миграцию:

php artisan migrate

Контроллер

Создадим рут:

Route::get('/search', '[email protected]')->name('search');

Создадим контроллер:

php artisan make:controller SearchController

Вынесем навбар в отдельный файл resources/views/layouts/navbar.blade.php и подключим его в файлах resources/views/layouts/layout.blade.php , resources/views/layouts/category_layout.blade.php .

@include('layouts.navbar')

В контроллер запишем:

class SearchController extends Controller
{
    public function index(Request $request)
    {
        $request->validate([
            's' => 'required',
        ]);
        $s = $request->s;
        $posts = Post::where('title', 'LIKE', "%{$s}%")->with('category')->paginate(2);
        return view('posts.search', compact('posts', 's'));
    }
}

Scope

Добавим в app/Models/Post.php скоуп:

public function scopeLike($query, $s) {
    return $query->where('title', 'LIKE', "%{$s}%");
}

И вызовем его в app/Http/Controllers/SearchController.php :

$posts = Post::like($s)->with('category')->paginate(2);

like($s) – это наш scope.

LandingPageController

Для начала создаём контроллер, для этого в терминале вводим команду:

php artisan make:controller LandingPageController

После выполнения будет создан новый файл «LandingPageController.php» в папке «\app\Http\Controllers».

Открываем этот файл. Внутри создаём метод view(), который просто возвращает вид:

public function view() {
    return view('layouts\landingPage');
}

Вид этот пока не существует, его мы сейчас и создадим.

landingPage.blade.php

Все файлы вида находятся в папке «resources\views». Поскольку мы создаём общий файл с лайоутом, то для подобных файлов создаём ещё папку «layouts». Внутри этой папки создаём файл «landingPage.blade.php» (этот файл и используется в контроллере LandingPageController).

Внутрь этого файла вставляем весь код из файла «index.html» выбранного шаблона. А все вспомогательные файлы переносятся в папку «public». Сам же архив с исходными файлами шаблона можно поместить в папку «resources».

Ещё надо будет подправить все пути внутри файла «landingPage.blade.php». Приведу несколько примеров таких поправок:

card image

Главное ничего не пропустить.

Маршрутизатор

Теперь пора прописать путь внутри маршрутизатора. Вначале добавляем наш контроллер внутрь этого машрутизатора: «use App\Http\Controllers\LandingPageController;«. А потом описываем сам маршрут:

Route::get('/landing',
    [LandingPageController::class, 'view']
)->name('home');

В первой строчке кода указывается URL, по которому соответствует этот маршрутизатор. Во второй строчке указываем какой метод в каком контроллере должен вызываться при этом. А в третьей строчке даём имя этому маршруту, чтобы потом его можно было бы легче использовать.

Четвёртый коммит.