Skip to content

Commit e9939c3

Browse files
committed
WIP
1 parent 87ccabd commit e9939c3

29 files changed

+600
-351
lines changed

app/Library.php

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
<?php
2+
3+
namespace App;
4+
5+
use Illuminate\Support\Facades\Storage;
6+
use Illuminate\Support\Str;
7+
use Symfony\Component\Yaml\Yaml;
8+
9+
class Library
10+
{
11+
private string $content;
12+
private array $variables = [];
13+
14+
/**
15+
* @param string $name
16+
*/
17+
public function __construct(string $name)
18+
{
19+
$raw = Storage::disk('library')->get($name . '.md');
20+
21+
$variables = Str::of($raw)->betweenFirst('---', '---');
22+
23+
try {
24+
$this->variables = Yaml::parse($variables);
25+
} catch (\Throwable) {
26+
27+
}
28+
29+
$this->content = Str::of($raw)
30+
->after('---')
31+
->after('---')
32+
->markdown()
33+
->toString();
34+
}
35+
36+
/**
37+
* Get the title from variables
38+
*
39+
* @return string
40+
*/
41+
public function title(): string
42+
{
43+
return $this->variables['title'] ?? '';
44+
}
45+
46+
/**
47+
* Get the description from variables
48+
*
49+
* @return string
50+
*/
51+
public function description(): string
52+
{
53+
return $this->variables['description'] ?? '';
54+
}
55+
56+
/**
57+
* Get the content
58+
*
59+
* @return string
60+
*/
61+
public function content(): string
62+
{
63+
return $this->content;
64+
}
65+
66+
/**
67+
* Get the slug from title variables
68+
*
69+
* @return string
70+
*/
71+
public function slug(): string
72+
{
73+
return Str::of($this->variables['title'] ?? '')->slug()->toString();
74+
}
75+
}

config/filesystems.php

+6
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@
4242
'throw' => false,
4343
],
4444

45+
'library' => [
46+
'driver' => 'local',
47+
'root' => storage_path('library'),
48+
'throw' => false,
49+
],
50+
4551
'public' => [
4652
'driver' => 'local',
4753
'root' => storage_path('app/public'),

resources/views/library/clear-code.blade.php

+16-130
Original file line numberDiff line numberDiff line change
@@ -33,141 +33,27 @@ class="language-php">// Получаем инсайты трендов для м
3333

3434
// Возвращаем результаты кампании
3535
return response()->json([
36-
'status' => 'success',
36+
'status' => Status::SUCCESS,
3737
'campaignResults' => $campaignResults
3838
]);</code></pre>
3939
</div>
4040
</x-slot>
4141
</x-header>
4242

4343

44-
<x-container>
45-
46-
<div class="row g-5 justify-content-center align-items-start position-relative mb-5">
47-
<div class="col-xl-4 position-sticky top-0 py-3">
48-
<div class="mb-4">
49-
<div
50-
class="feature-icon-small d-inline-flex align-items-center justify-content-center border border-primary text-primary fs-4 rounded-3">
51-
1
52-
</div>
53-
</div>
54-
<h5 class="fs-4 mt-2 fw-semibold">Никаких сокращений</h5>
55-
<p class="mb-0">
56-
Правильный выбор имен переменных, классов и методов в Laravel играет ключевую роль в создании чистого и понятного кода.
57-
</p>
58-
</div>
59-
<div class="col-xl-8">
60-
<main class="bg-body-tertiary p-xl-5 p-4 rounded shadow">
61-
62-
<p>Правильный выбор имен переменных, классов и методов в Laravel играет ключевую роль в создании чистого и понятного кода. Несмотря на то, что сокращения могут показаться удобными для быстрого написания кода, они могут стать источником путаницы и усложнить поддержку кода в будущем.</p>
63-
<h4 id="-">Плохие примеры</h4>
64-
<p>Предположим, у нас есть следующий код:</p>
65-
<pre><code class="lang-php"><span class="hljs-comment">// Плохо ❌</span>
66-
$usr = User<span class="hljs-type">::find</span>($id);
67-
</code></pre>
68-
<p>Здесь переменная <code>$usr</code> представляет собой объект пользователя. Однако, сокращенное имя <code>$usr</code> не дает ясного понимания того, что именно хранит эта переменная. Более понятное имя, например, <code>$currentUser</code>, сразу же указывает на ее предназначение.</p>
69-
<pre><code class="lang-php"><span class="hljs-comment">// Плохо ❌</span>
70-
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">UsrCtrl</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Controller</span> </span>{
71-
public function f1() {
72-
<span class="hljs-comment">// ...</span>
73-
}
74-
}
75-
</code></pre>
76-
<p>В этом примере имя класса <code>UsrCtrl</code> не является информативным. Разработчику, который встретит этот класс впервые, будет сложно понять, за что он отвечает. Название класса должно четко отражать его функциональность, например, <code>ProfileController</code>.</p>
77-
<pre><code class="lang-php"><span class="hljs-regexp">//</span> Плохо
78-
<span class="hljs-keyword">if</span> (<span class="hljs-variable">$status</span> == <span class="hljs-number">1</span>) {
79-
<span class="hljs-regexp">//</span> ...
80-
}
81-
</code></pre>
82-
<p>В этом примере магическое число <code>1</code> используется для определения статуса активности. Хотя это может быть понятно в контексте, использование именованных констант делает код более читаемым и легко поддерживаемым.</p>
83-
<h4 id="-">Хорошие примеры</h4>
84-
<pre><code class="lang-php"><span class="hljs-comment">// Хорошо</span>
85-
$currentUser = User<span class="hljs-type">::find</span>($userId);
86-
</code></pre>
87-
<p>Здесь мы используем более информативное имя переменной <code>$currentUser</code>, что позволяет нам сразу понять, что она хранит информацию о текущем пользователе.</p>
88-
<pre><code class="lang-php"><span class="hljs-comment">// Хорошо</span>
89-
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ProfileController</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Controller</span> </span>{
90-
public function showProfile() {
91-
<span class="hljs-comment">// ...</span>
92-
}
93-
}
94-
</code></pre>
95-
<p>Имя класса <code>ProfileController</code> четко указывает на его функцию - управление профилями пользователей.</p>
96-
<pre><code class="lang-php"><span class="hljs-comment">// Хорошо</span>
97-
<span class="hljs-keyword">const</span> STATUS_ACTIVE = <span class="hljs-number">1</span>;
98-
99-
<span class="hljs-keyword">if</span> ($status == STATUS_ACTIVE) {
100-
<span class="hljs-comment">// ...</span>
101-
}
102-
</code></pre>
103-
<p>Использование именованных констант, таких как <code>STATUS_ACTIVE</code>, делает код более понятным и обеспечивает единообразие в коде.</p>
104-
105-
</main>
106-
</div>
107-
108-
109-
110-
</div>
111-
112-
<div class="row g-5 justify-content-center align-items-start position-relative mb-5">
113-
<div class="col-xl-4 position-sticky top-0 py-3">
114-
<div class="mb-4">
115-
<div
116-
class="feature-icon-small d-inline-flex align-items-center justify-content-center border border-primary text-primary fs-4 rounded-3">
117-
2
118-
</div>
119-
</div>
120-
<h5 class="fs-4 mt-2 fw-semibold">Не используйте <code>`else`</code></h5>
121-
<p class="mb-0">
122-
Возможно ли, что `else` условие в этом вашем методе является ненужным или избыточным?
123-
Могу поспорить, что ответ — да! Если да, то уберите его оттуда!
124-
</p>
125-
</div>
126-
<div class="col-xl-8">
127-
<main class="bg-body-tertiary p-xl-5 p-4 rounded shadow">
128-
129-
<p>Правильный выбор имен переменных, классов и методов в Laravel играет ключевую роль в создании
130-
чистого и понятного кода. Несмотря на то, что сокращения могут показаться удобными для быстрого
131-
написания кода, они могут стать источником путаницы и усложнить поддержку кода в будущем.</p>
132-
133-
</main>
134-
</div>
135-
136-
137-
138-
</div>
139-
140-
141-
<div class="row g-5 justify-content-center align-items-start position-relative mb-5">
142-
<div class="col-xl-4 position-sticky top-0 py-3">
143-
<div class="mb-4">
144-
<div
145-
class="feature-icon-small d-inline-flex align-items-center justify-content-center border border-primary text-primary fs-4 rounded-3">
146-
3
147-
</div>
148-
</div>
149-
<h5 class="fs-4 mt-2 fw-semibold">Один уровень вложености</h5>
150-
<p class="mb-0">
151-
Возможно ли, что `else` условие в этом вашем методе является ненужным или избыточным?
152-
Могу поспорить, что ответ — да! Если да, то уберите его оттуда!
153-
</p>
154-
</div>
155-
<div class="col-xl-8">
156-
<main class="bg-body-tertiary p-xl-5 p-4 rounded shadow">
157-
158-
<p>Правильный выбор имен переменных, классов и методов в Laravel играет ключевую роль в создании
159-
чистого и понятного кода. Несмотря на то, что сокращения могут показаться удобными для быстрого
160-
написания кода, они могут стать источником путаницы и усложнить поддержку кода в будущем.</p>
161-
162-
</main>
163-
</div>
164-
165-
166-
167-
</div>
168-
169-
170-
</x-container>
171-
172-
44+
@php
45+
$sections = collect([
46+
'basics',
47+
'code-style',
48+
'abbr',
49+
'numbers',
50+
'else',
51+
'happy-path'
52+
])
53+
->map(fn ($file) => \Illuminate\Support\Str::of($file)->start('clear-code/'))
54+
->map(fn ($file) => new \App\Library($file));
55+
// TODO Один уровень вложености
56+
@endphp
57+
58+
@include('particles.library-section', ['sections' => $sections])
17359
@endsection

resources/views/library/security.blade.php

+21-40
Original file line numberDiff line numberDiff line change
@@ -15,46 +15,27 @@
1515
</figure>
1616
</x-slot>
1717
</x-header>
18+
19+
@php
20+
$sections = collect([
21+
'basics',
22+
'auth',
23+
'cookie',
24+
'mass',
25+
'csrf',
26+
'exec',
27+
'headers',
28+
'hijacking',
29+
'path',
30+
'redirect',
31+
'sql',
32+
'upload',
33+
'xss',
34+
])
35+
->map(fn ($file) => \Illuminate\Support\Str::of($file)->start('security/'))
36+
->map(fn ($file) => new \App\Library($file));
37+
@endphp
1838

19-
<x-container>
20-
21-
@foreach([
22-
'basics.md',
23-
'auth.md',
24-
'cookie.md',
25-
'mass.md',
26-
'csrf.md',
27-
'exec.md',
28-
'headers.md',
29-
'hijacking.md',
30-
'path.md',
31-
'redirect.md',
32-
'sql.md',
33-
'upload.md',
34-
'xss.md'] as $key => $file)
35-
36-
<div class="row g-5 justify-content-center align-items-start position-relative mb-5">
37-
<div class="col-xl-4 position-sticky top-0 py-3">
38-
<div class="mb-4">
39-
<div class="feature-icon-small d-inline-flex align-items-center justify-content-center border border-primary text-primary fs-4 rounded-3">
40-
{{ $key }}
41-
</div>
42-
</div>
43-
<h5 class="fs-4 mt-2 fw-semibold">{{ $file }}</h5>
44-
<p class="mb-0">
45-
Правильный выбор имен переменных, классов и методов в Laravel играет ключевую роль в создании
46-
чистого и понятного кода.
47-
</p>
48-
</div>
49-
<div class="col-xl-8">
50-
<main class="bg-body-tertiary p-xl-5 p-4 rounded shadow">
51-
{!! \Illuminate\Support\Str::of(file_get_contents(storage_path('library/security/'.$file)))->markdown() !!}
52-
</main>
53-
</div>
54-
</div>
55-
56-
@endforeach
57-
58-
</x-container>
39+
@include('particles.library-section', ['sections' => $sections])
5940

6041
@endsection

0 commit comments

Comments
 (0)