├── .php-cs-fixer.php
├── LICENSE
├── README.md
├── assets
├── config.php
└── views
│ └── _markdown.blade.php
├── composer.json
└── src
├── Page.php
├── PageController.php
└── PagesServiceProvider.php
/.php-cs-fixer.php:
--------------------------------------------------------------------------------
1 | ['syntax' => 'short'],
8 | 'binary_operator_spaces' => [
9 | 'default' => 'single_space',
10 | 'operators' => [
11 | '=>' => null,
12 | '|' => 'no_space',
13 | ]
14 | ],
15 | 'blank_line_after_namespace' => true,
16 | 'blank_line_after_opening_tag' => true,
17 | 'no_superfluous_phpdoc_tags' => true,
18 | 'blank_line_before_statement' => [
19 | 'statements' => ['return']
20 | ],
21 | 'braces' => true,
22 | 'cast_spaces' => true,
23 | 'class_definition' => true,
24 | 'concat_space' => [
25 | 'spacing' => 'one'
26 | ],
27 | 'declare_equal_normalize' => true,
28 | 'elseif' => true,
29 | 'encoding' => true,
30 | 'full_opening_tag' => true,
31 | 'declare_strict_types' => true,
32 | 'fully_qualified_strict_types' => true, // added by Shift
33 | 'function_declaration' => true,
34 | 'function_typehint_space' => true,
35 | 'heredoc_to_nowdoc' => true,
36 | 'include' => true,
37 | 'increment_style' => ['style' => 'post'],
38 | 'indentation_type' => true,
39 | 'linebreak_after_opening_tag' => true,
40 | 'line_ending' => true,
41 | 'lowercase_cast' => true,
42 | 'constant_case' => true,
43 | 'lowercase_keywords' => true,
44 | 'lowercase_static_reference' => true, // added from Symfony
45 | 'magic_method_casing' => true, // added from Symfony
46 | 'magic_constant_casing' => true,
47 | 'method_argument_space' => true,
48 | 'native_function_casing' => true,
49 | 'no_alias_functions' => true,
50 | 'no_extra_blank_lines' => [
51 | 'tokens' => [
52 | 'extra',
53 | 'throw',
54 | 'use',
55 | 'use_trait',
56 | ]
57 | ],
58 | 'no_blank_lines_after_class_opening' => true,
59 | 'no_blank_lines_after_phpdoc' => true,
60 | 'no_closing_tag' => true,
61 | 'no_empty_phpdoc' => true,
62 | 'no_empty_statement' => true,
63 | 'no_leading_import_slash' => true,
64 | 'no_leading_namespace_whitespace' => true,
65 | 'no_mixed_echo_print' => [
66 | 'use' => 'echo'
67 | ],
68 | 'no_multiline_whitespace_around_double_arrow' => true,
69 | 'multiline_whitespace_before_semicolons' => [
70 | 'strategy' => 'no_multi_line'
71 | ],
72 | 'no_short_bool_cast' => true,
73 | 'no_singleline_whitespace_before_semicolons' => true,
74 | 'no_spaces_after_function_name' => true,
75 | 'no_spaces_around_offset' => true,
76 | 'no_spaces_inside_parenthesis' => true,
77 | 'no_trailing_comma_in_list_call' => true,
78 | 'no_trailing_comma_in_singleline_array' => true,
79 | 'no_trailing_whitespace' => true,
80 | 'no_trailing_whitespace_in_comment' => true,
81 | 'no_unneeded_control_parentheses' => true,
82 | 'no_unreachable_default_argument_value' => true,
83 | 'no_useless_return' => true,
84 | 'no_whitespace_before_comma_in_array' => true,
85 | 'no_whitespace_in_blank_line' => true,
86 | 'normalize_index_brace' => true,
87 | 'not_operator_with_successor_space' => true,
88 | 'object_operator_without_whitespace' => true,
89 | 'ordered_imports' => ['sort_algorithm' => 'alpha'],
90 | 'phpdoc_indent' => true,
91 | 'general_phpdoc_tag_rename' => true,
92 | 'phpdoc_no_access' => true,
93 | 'phpdoc_no_package' => true,
94 | 'phpdoc_no_useless_inheritdoc' => true,
95 | 'phpdoc_scalar' => true,
96 | 'phpdoc_single_line_var_spacing' => true,
97 | 'phpdoc_summary' => true,
98 | 'phpdoc_to_comment' => false,
99 | 'phpdoc_trim' => true,
100 | 'phpdoc_types' => true,
101 | 'phpdoc_var_without_name' => true,
102 | 'psr_autoloading' => true,
103 | 'self_accessor' => true,
104 | 'short_scalar_cast' => true,
105 | 'simplified_null_return' => false, // disabled by Shift
106 | 'single_blank_line_at_eof' => true,
107 | 'single_blank_line_before_namespace' => true,
108 | 'single_class_element_per_statement' => true,
109 | 'single_import_per_statement' => true,
110 | 'single_line_after_imports' => true,
111 | 'no_unused_imports' => true,
112 | 'single_line_comment_style' => [
113 | 'comment_types' => ['hash']
114 | ],
115 | 'single_quote' => true,
116 | 'space_after_semicolon' => true,
117 | 'standardize_not_equals' => true,
118 | 'switch_case_semicolon_to_colon' => true,
119 | 'switch_case_space' => true,
120 | 'ternary_operator_spaces' => true,
121 | 'trailing_comma_in_multiline' => true,
122 | 'trim_array_spaces' => true,
123 | 'unary_operator_spaces' => true,
124 | 'whitespace_after_comma_in_array' => true,
125 | ];
126 |
127 | $project_path = getcwd();
128 | $finder = Finder::create()
129 | ->in([
130 | $project_path . '/src',
131 | ])
132 | ->name('*.php')
133 | ->notName('*.blade.php')
134 | ->ignoreDotFiles(true)
135 | ->ignoreVCS(true);
136 |
137 | return (new Config())
138 | ->setFinder($finder)
139 | ->setRules($rules)
140 | ->setRiskyAllowed(true)
141 | ->setUsingCache(true);
142 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 ArchTech Development, Inc.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Laravel Pages
2 |
3 | This package lets you create pages using Markdown or Blade without having to worry about creating routes or controllers yourself.
4 |
5 | Essentially, you create either `content/pages/foo.md` or `resources/views/pages/foo.blade.php` and the page will be accessible on the `/foo` route.
6 |
7 | Markdown files use a pre-defined Blade view to get rendered. Blade files are meant for pages which don't follow the default layout and need more custom styling.
8 |
9 | For instance, you could have the `/pricing` route use a Blade file (`pages/pricing.blade.php`) with a pretty design that accompanies your pricing copy.
10 |
11 | Whereas for `/about`, you could have a simple Markdown file (`content/pages/about.md`) that describes your service using pure text without any special graphical elements.
12 |
13 | We use this on the ArchTech website — the [About](https://archte.ch/about), [Careers](https://archte.ch/careers), and [Open Source](https://archte.ch/open-source) pages are simple Markdown files.
14 |
15 | ## Installation
16 |
17 | Require the package via composer:
18 |
19 | ```
20 | composer require archtechx/laravel-pages
21 | ```
22 |
23 | Publish the config file:
24 |
25 | ```
26 | php artisan vendor:publish --tag=archtech-pages-config
27 | ```
28 |
29 | And finally, add this line to the **end** of your `routes/web.php` file:
30 |
31 | ```php
32 | ArchTech\Pages\Page::routes();
33 | ```
34 |
35 | This line will register the routes in a way that ensures that your routes take precedence, and the page route is only used as the final option.
36 |
37 | **Important: Before attempting to visit URLs managed by this package, make sure that you configure it to use the correct layout (see the section below). Otherwise you might get an error saying that the view cannot be found.**
38 |
39 | ## Usage
40 |
41 | ### Markdown pages
42 |
43 | To create a markdown file, create a file in `content/pages/`. The route to the page will match the file name (without `.md`).
44 |
45 | For example, to create the `/about` page, create `content/pages/about.md` with this content:
46 |
47 | ```md
48 | ---
49 | slug: about
50 | title: 'About us'
51 | updated_at: 2021-05-19T19:09:02+00:00
52 | created_at: 2021-05-19T19:09:02+00:00
53 | ---
54 |
55 | We are a web development agency that specializes in ...
56 | ```
57 |
58 | ### Blade pages
59 |
60 | To create a Blade page, create a file in `resources/views/pages/`. Like in the Markdown example, the route to the page will match the file name without the extension.
61 |
62 | Therefore to create the `/about` page, you'd create `resources/views/pages/about.blade.php`:
63 |
64 | ```html
65 |