Reputation: 3950
I'm using Laravel so all the views are .blade.php
files. Visual Studio Code won't format the HTML because of the PHP extension. I removed the "blade" part of the filename, but it still isn't formatting the files properly (via Alt+Shift+F).
I also tried about five extensions, but none of them do the reformatting.
How can I format .blade.php
files in Visual Studio Code?
Upvotes: 36
Views: 69108
Reputation: 15
Update 2024-07-17
I think this can now be done in VS Code without an extension. If you press Ctrl
+ Shift
+ P
, then select "Change Language Mode", then type "PHP". You should now see the PHP option.
I'm using version 1.74.2
Upvotes: 1
Reputation:
I use Format HTML in PHP which works well in a file containing both HTML and PHP. However it does not appear to format a 'pure' php file such as a Class. So I have also installed Phpfmt, which does a great job with the pure php file but wrecks the indenting in a file with mixed content. Here's an example of what I get:
<?php
if (!$logged_in) {
$login_form = 'data-toggle="modal" data-target="#Modal1"';
$href = '#';
} else {
$login_form = '';
$href = 'members';
}
?>
The opening php tag is correctly aligned with the html. 'I see that under 'Supported Transformations' it says:
AlignPHPCode: Align PHP code within HTML block.
But as you can see from the above, it's not working for me. Any suggestions??
Upvotes: 0
Reputation: 20980
The extension Beautify (from HookyQR) just does it very well. Either add PHP, and any other file extension type, to the configuration. As said by Nico, here is an example:
Go to user settings (Ctrl + Shift + P → User settings (UI) or Ctrl + , (comma)
Search for Beautify in the field above. And click on "Edit in settings.json" for "Beautify: Config".
For the "html" section, add "php" and "blade".
###Usage
You can invoke it directly. Press F1, and then write Beautify. The auto completion gives you two choices, "Beautify file" and "Beautify selection". Choose the one you need, and it will do the job. That's a straightforward direct way.
You can also add a keybinding to have a keyboard shortcut. Here is how to do it:
Open keybindings.json (go to menu File → Preferences → Keyboard Shortcuts)
Click in the above. Open and edit file keybindings.json
Add the following into the closed brackets, []
{
"key": "alt+b",
"command": "HookyQR.beautify",
"when": "editorFocus"
}
Choose any key you want, and make sure you don't override an existing one. Search first in the left side if it exists or not.
Note that all of those things are well documented in the description of the extension.
(suite to @Peter Mortensen clarification pinpoint)
If you are confused if it's blade
or blade.php
for the setting! I'll clear it up for you! It's blade
! That's vscode keyword for the language!
How do you know ?
First if you open the list of languages as by the image bellow:
Write blade
You can see Laravel Blade (blade)
! The language keyword is in the paratheses! blade!
Well but how to check!
Try with blade.php
in the settings!
Try to beautify
You'll get an asking context menu for what language (html, css, js)!
So it doesn't works!
To really know ! Put back blade
!
And it will work and beautify directly!
The awesome answer to that! Is try it, and see for yourself!
But if you ask me! I'll say it does work as with html! It can be too handy! And you may need to fix some lines! Depending on your expectations and your style!
Here an illustration! I screwed the indentation in purpose
And here the beautification result:
Upvotes: 64
Reputation: 624
Using a newish feature in php, vscode seems to format and highlight embedded HTML beautifully. (php 7.3, released after the question was posted) adds what are called "heredoc" and "neardoc" strings. They are well described here: https://andy-carter.com/blog/what-are-php-heredoc-nowdoc.
Basically, you put your HTML in like this:
[php code.....]
echo
<<<HTML
<div>
<h1>This is a headline</h1>
<p> this is a paragraph. lorem ipsum lorem ipsum blah black </p>
</div>
HTML;
[^ don't forget the ; follow with more php if you want]
it looks just great on screen.
Upvotes: 0
Reputation: 635
This can be done by using HTML formatting for ".blade.php":
"files.associations": {
"*.blade.php": "html",
"*.tpl": "html"
},
This will format .blade.php files as HTML, but it will not remove Blade snippets.
Upvotes: 0
Reputation: 121
Andrew Schultz mentioned the extension: "Format HTML in PHP".
This is indeed a great extension for format PHP files with HTML markup. It also formats JavaScript code included in PHP files.
Moreover. Good news! The developer is already working successfully to include Laravel blade.php files. In the meantime I format Laravel blade files in Visual Studio Code by switching language manually from Blade to PHP then I use the extension "Format HTML in PHP" with Ctrl + Alt + F or right click. It works great for me.
Upvotes: 1
Reputation: 4243
I found this extension called Format HTML in PHP that works well for me.
Upvotes: 0
Reputation: 199
If you want something that just works out of the box, add the format nested HTML in PHP files support Visual Studio Code should already have.
It uses all the native settings for html.format, format on save, etc. Give the extension Format HTML in PHP a try. I made it because every other solution made me annoyed, because it didn't work 100%.
Upvotes: 2