Простое определение типа элемента DOM идентификатор, класс, тег el: «#app» или «.app» или «body» Условия v-if, v-else, v-elseif Вспомогательный v-show, показывает или прячет элемент в зависимости от состояния булевого триггера. !,<,>,=== -неравно,меньше, больше, равно. &&,|| -and,or. Пример:
<p v-if="color === 'red'">Что-то
<p v-if="color === 'red'">Что-то
, здесь image ссылка на картинку в данных скрипта. также можно привязывать к таким атрибутам как class, href, alt, title, style, disabled, и полагаю прочим.
The v-on directive is used to allow elements to listen for events The shorthand for v-on is @ The v-on directive can trigger a method Triggered methods can take in arguments this refers to the current Vue instance’s data as well as other methods declared inside the instance
Интересно что namespace обязательно должен присутствовать в файле класса, а доступ к нему производится или установкой пространства имен или указанием полного имени класса или имени класса относительно установленного пространства имен.
Автозагрузка и зависимое от иерархии каталогов пространство имен. Классы, предполагается располагать по стандарту PSR-4.
Ниже загрузчик, код не мой, но я проверял он вполне рабочий. Нужно только загрузить сам загрузчик, выше него естественно указать желаемое пространство имен, и дальше уже работать непосредственно с классами и их функциями.
Загрузчик AutoPSR-4.php
<?phpclass Autoloader {public static function register(){spl_autoload_register(function($class){$file=str_replace('\\',DIRECTORY_SEPARATOR,$class).'.php';if(file_exists($file)){require$file;returntrue;}returnfalse;});}}
Autoloader::register();
<?php
class Autoloader {
public static function register() {
spl_autoload_register(function ($class) {
$file = str_replace('\\', DIRECTORY_SEPARATOR, $class).'.php';
if (file_exists($file)) {
require $file; return true;
} return false;
});
}
}
Autoloader::register();
Пример обращения к функциям классов в файле index.php
<?phpnamespace models;//установка пространства имен models //namespace models\Z; //или глубжеrequire'AutoPSR-4.php';//подключение загрузчика$my=new A;//расположен в models\A.php$my->test();
Z\Zed::test();//расположен в models\Z\Zed.php
\controllers\Xclass::test();// расположен вне текущего пространства имен в controllers\Xclass.php
<?php
namespace models; //установка пространства имен models
//namespace models\Z; //или глубже
require 'AutoPSR-4.php'; //подключение загрузчика
$my = new A; //расположен в models\A.php
$my->test();
Z\Zed::test(); //расположен в models\Z\Zed.php
\controllers\Xclass::test(); // расположен вне текущего пространства имен в controllers\Xclass.php
<?php
namespace controllers;
class Xclass {
public function test()
{
echo '<br>класс Xclass';
}
}
Вариант загрузчика в котором расположение файлов не имеет столь жесткой привязки.
В этом случае проверяются все указанные каталоги, загружаются все файлы, и если класс есть и у него прописано пространство имен, то к нему можно обратиться и он найдется, но такой способ требует уникальные имена даже для похожих функций, и будет сложнее разобраться в структуре проекта.
<?php/**
* Подключает все имеющиеся файлы в папках $array_paths[]
*/function __autoload($class_name){$array_paths=array('/models/','/components/','/controllers/',);foreach($array_pathsas$path){$class_name=explode('\\',$class_name);$class_name=end($class_name);$path= ROOT .$path.$class_name.'.php';if(is_file($path)){include_once$path;}}}
<?php
/**
* Подключает все имеющиеся файлы в папках $array_paths[]
*/
function __autoload($class_name)
{
$array_paths = array(
'/models/',
'/components/',
'/controllers/',
);
foreach ($array_paths as $path) {
$class_name = explode('\\', $class_name);
$class_name = end($class_name);
$path = ROOT . $path . $class_name . '.php';
if (is_file($path)) {
include_once $path;
}
}
}
Автозагрузчик composer`a.
Подключение через композер, предполагает запихивание всего апликейшена в папку, связывание с именем проекта, а следовательно все неймспейсы преобрели дополнительный прификс \Проект, и стал выглядеть подобным образом \Проект\сабнеймспейс\класс, т.е. нужно для нормального функционирования, переименовывать во всех файлах проекта пространство имен, внедряя имя проекта, но чтобы не менять в глубинах кода используемые классы, можно добавить указатель на пространство имен use.
Теперь в начале каждого класса пишем используемое пространство имён. У основных классов это:
<?phpnamespace Проект;
<?php
namespace Проект;
А у контроллеров:
<?phpnamespace Проект\Controllers;
<?php
namespace Проект\Controllers;
<?phpnamespace Проект\Controllers;use Проект\Controller as Controller;
<?php
namespace Проект\Controllers;
use Проект\Controller as Controller;
Обязательно следует добавить в файл проекта composer.json, связку имени вашего проекта с каталогом где вы его держите.
Расширение neilbrayfield.php-docblocker для VS Code подготавливает комментарии для классов, функций и методов, согласно их параметрам. Для того чтобы сформировать автокомментарий, наберите /**, и нажмите ввод.
Для подготовки автодокументации используется phpdocumentor
Скачиваем www.phpdoc.org/phpDocumentor.phar
1.Установка глобально, я кинул в каталог с php, создал там же phpDoc.cmd.
2.А теперь, находясь в директории проекта, который вы покрыли докблоками, просто запустите из консоли: phpdoc -d . -t ./src, -d/f указываем на директорий или файл по которому будет строиться хелп, -t указываем на каталог куда положим готовую документацию.
P.S.: Через композер, не получилось, зависимости не хотели разрешаться composer global require —dev "phpdocumentor/phpdocumentor:2.*".
Путь до php добавить в path windows.Например:
D:\web\tools\php\php-7.2-x64
Расположение глобальных пакетов. C:/Users/%USERNAME%/AppData/Roaming/Composer
Путь до батников расширений линтеров добавить в path windows.
C:\Users\%USERNAME%\AppData\Roaming\Composer\vendor\bin
Установка линтеров глобально.
Для ikappas.phpcs php composer.phar global require "squizlabs/php_codesniffer=*"
Для cerzat43.twigcs php composer.phar global require allocine/twigcs
Ubuntu 16.04 Lts +Apache2 +Несколько доменов на одном IP + сайты в каталоге пользователя
Добавить в /etc/apache2/apache2.conf после других аналогичных записей: sudo nano /etc/apache2/apache2.conf
<Directory /home/YourUserName/public_html>
AllowOverride All
Require all granted
</Directory>
<Directory /home/YourUserName/public_html>
AllowOverride All
Require all granted
</Directory>
Добавить в самом низу файла /etc/apache2/apache2.conf
ServerName localhost
Меняем очередность файлов индекса, переставляем index.php в начало списка в файле /etc/apache2/mods-available/dir.conf. sudo nano /etc/apache2/mods-available/dir.conf
//Перезапускаем apache2 sudo service apache2 reload
===/Цикл===
Права на каталог ~/public_html sudo adduser USERNAME www-data sudo chown USERNAME:www-data -R ~/public_html chmod -R 775 ~/public_html
Мы добавили себя в группу www-data (поскольку от пользователя www-data группы www-data работает Apache) Сделали группу www-data группой владельца корневой папки наших сайтов. Присвоили для этой папки права чтения и записи для владельца и его группы. Это нужно для того, чтобы пользователи YourUserName (от имени которого мы заливаем файлы на сервер) и пользователя www-data (от имени которого работает веб-сервер) имели одинаковые права.
При добавлении каждого сайта над его папкой нужно будет производить эту процедуру (кроме первой команды; только не ко всей public_html, а лишь к папке нового сайта). Также нужно это делать для новых файлов, требующих изменения со стороны сервера.
!!!Чтобы получить доступ с другого компьютера, на удаленном компьютере прописываем в файл C:\Windows\System32\drivers\etc\hosts IP-adress-servera вашсайт
P.S: При привязке git, а вернее во время передачи данных, происходит запрос в каталог ~/.config , по умолчанию у него права root (хотя может быть я что то лишнее запустил в режиме sudo) решение:
Идем на сервер через ssh в папку в домашний директорий пользователя ~/
Смотрим права: sudo ls -la
Меняем владельца если нужно: sudo chown USERNAME:www-data -R ~/.config
Скрипт цикла создания виртуального хоста
Скрипт создает виртуальный хост/каталог/запись в файле hosts/конфигурационный файл, изменяет в конфигурационном файле параметр ServerName и DocumentRoot перезапускает apache.
Пример запуска sudo bash createhost.sh sitename username
#!/bin/bash#sudo bash snc.sh site userif[-z$1] ; thenecho «Do not set your domain name.»
exit1 ; fiif[-z$2] ; thenusername='im'echo «Do not set your user name.» ; fimkdir-p/home/$username/public_html/$1/public_html
echo"127.0.0.1 "$1|sudotee-a/etc/hosts
cp/etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/$1.tmp.conf
sed-e"s!\#ServerName www.example.com!ServerName ${1}!; s!DocumentRoot /var/www/html!DocumentRoot /home/${username}/public_html/${1}/public_html!"/etc/apache2/sites-available/$1.tmp.conf >/etc/apache2/sites-available/$1.conf
rm/etc/apache2/sites-available/$1.tmp.conf
a2ensite $1chown$username:www-data -R/home/$username/public_html/$1chmod-R775/home/$username/public_html/$1
#!/bin/bash
#sudo bash snc.sh site user
if [ -z $1 ] ; then
echo «Do not set your domain name.»
exit 1 ; fi
if [ -z $2 ] ; then
username='im'
echo «Do not set your user name.» ; fi
mkdir -p /home/$username/public_html/$1/public_html
echo "127.0.0.1 "$1 | sudo tee -a /etc/hosts
cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/$1.tmp.conf
sed -e "s!\#ServerName www.example.com!ServerName ${1}!; s!DocumentRoot /var/www/html!DocumentRoot /home/${username}/public_html/${1}/public_html!" /etc/apache2/sites-available/$1.tmp.conf > /etc/apache2/sites-available/$1.conf
rm /etc/apache2/sites-available/$1.tmp.conf
a2ensite $1
chown $username:www-data -R /home/$username/public_html/$1
chmod -R 775 /home/$username/public_html/$1
Установка фреймворков php на хостинг, в уже существующую папку сайта, на уровень ниже папки public_html, требует вместо указания имени_проекта — папки_проекта указывать точку — текущий_каталог. И в последствии скопировать содержимое каталога public или web или какой то еще заданный по дефолту, в public_html. Еще возможно понадобится исправить в файле проекта ссылки на верный каталог с вебприложением — сайтом. Предполагается что вы это все будете делать из консоли на сервере или удаленно по ssh.