Первая фиксация (часть)
This commit is contained in:
parent
ec6f2357df
commit
f94989c28c
|
@ -0,0 +1,2 @@
|
||||||
|
vendor/
|
||||||
|
cache/
|
|
@ -0,0 +1,27 @@
|
||||||
|
actor: Tester
|
||||||
|
bootstrap: _bootstrap.php
|
||||||
|
paths:
|
||||||
|
tests: tests
|
||||||
|
log: tests/_output
|
||||||
|
data: tests/_data
|
||||||
|
helpers: tests/_support
|
||||||
|
settings:
|
||||||
|
memory_limit: 1024M
|
||||||
|
colors: true
|
||||||
|
modules:
|
||||||
|
config:
|
||||||
|
Yii2:
|
||||||
|
configFile: 'config/test.php'
|
||||||
|
|
||||||
|
# To enable code coverage:
|
||||||
|
#coverage:
|
||||||
|
# #c3_url: http://localhost:8080/index-test.php/
|
||||||
|
# enabled: true
|
||||||
|
# #remote: true
|
||||||
|
# #remote_config: '../codeception.yml'
|
||||||
|
# whitelist:
|
||||||
|
# include:
|
||||||
|
# - models/*
|
||||||
|
# - controllers/*
|
||||||
|
# - commands/*
|
||||||
|
# - mail/*
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"directory" : "vendor/bower-asset"
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
# phpstorm project files
|
||||||
|
.idea
|
||||||
|
|
||||||
|
# netbeans project files
|
||||||
|
nbproject
|
||||||
|
|
||||||
|
# zend studio for eclipse project files
|
||||||
|
.buildpath
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
|
|
||||||
|
# windows thumbnail cache
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# composer vendor dir
|
||||||
|
/vendor
|
||||||
|
|
||||||
|
# composer itself is not needed
|
||||||
|
composer.phar
|
||||||
|
|
||||||
|
# Mac DS_Store Files
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# phpunit itself is not needed
|
||||||
|
phpunit.phar
|
||||||
|
# local phpunit config
|
||||||
|
/phpunit.xml
|
||||||
|
|
||||||
|
tests/_output/*
|
||||||
|
tests/_support/_generated
|
||||||
|
|
||||||
|
#vagrant folder
|
||||||
|
/.vagrant
|
|
@ -0,0 +1,29 @@
|
||||||
|
Copyright © 2008 by Yii Software LLC (http://www.yiisoft.com)
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in
|
||||||
|
the documentation and/or other materials provided with the
|
||||||
|
distribution.
|
||||||
|
* Neither the name of Yii Software LLC nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived
|
||||||
|
from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE.
|
|
@ -0,0 +1,233 @@
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://github.com/yiisoft" target="_blank">
|
||||||
|
<img src="https://avatars0.githubusercontent.com/u/993323" height="100px">
|
||||||
|
</a>
|
||||||
|
<h1 align="center">Yii 2 Basic Project Template</h1>
|
||||||
|
<br>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
Yii 2 Basic Project Template is a skeleton [Yii 2](http://www.yiiframework.com/) application best for
|
||||||
|
rapidly creating small projects.
|
||||||
|
|
||||||
|
The template contains the basic features including user login/logout and a contact page.
|
||||||
|
It includes all commonly used configurations that would allow you to focus on adding new
|
||||||
|
features to your application.
|
||||||
|
|
||||||
|
[![Latest Stable Version](https://img.shields.io/packagist/v/yiisoft/yii2-app-basic.svg)](https://packagist.org/packages/yiisoft/yii2-app-basic)
|
||||||
|
[![Total Downloads](https://img.shields.io/packagist/dt/yiisoft/yii2-app-basic.svg)](https://packagist.org/packages/yiisoft/yii2-app-basic)
|
||||||
|
[![build](https://github.com/yiisoft/yii2-app-basic/workflows/build/badge.svg)](https://github.com/yiisoft/yii2-app-basic/actions?query=workflow%3Abuild)
|
||||||
|
|
||||||
|
DIRECTORY STRUCTURE
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
assets/ contains assets definition
|
||||||
|
commands/ contains console commands (controllers)
|
||||||
|
config/ contains application configurations
|
||||||
|
controllers/ contains Web controller classes
|
||||||
|
mail/ contains view files for e-mails
|
||||||
|
models/ contains model classes
|
||||||
|
runtime/ contains files generated during runtime
|
||||||
|
tests/ contains various tests for the basic application
|
||||||
|
vendor/ contains dependent 3rd-party packages
|
||||||
|
views/ contains view files for the Web application
|
||||||
|
web/ contains the entry script and Web resources
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
REQUIREMENTS
|
||||||
|
------------
|
||||||
|
|
||||||
|
The minimum requirement by this project template that your Web server supports PHP 5.6.0.
|
||||||
|
|
||||||
|
|
||||||
|
INSTALLATION
|
||||||
|
------------
|
||||||
|
|
||||||
|
### Install via Composer
|
||||||
|
|
||||||
|
If you do not have [Composer](http://getcomposer.org/), you may install it by following the instructions
|
||||||
|
at [getcomposer.org](http://getcomposer.org/doc/00-intro.md#installation-nix).
|
||||||
|
|
||||||
|
You can then install this project template using the following command:
|
||||||
|
|
||||||
|
~~~
|
||||||
|
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
|
||||||
|
~~~
|
||||||
|
|
||||||
|
Now you should be able to access the application through the following URL, assuming `basic` is the directory
|
||||||
|
directly under the Web root.
|
||||||
|
|
||||||
|
~~~
|
||||||
|
http://localhost/basic/web/
|
||||||
|
~~~
|
||||||
|
|
||||||
|
### Install from an Archive File
|
||||||
|
|
||||||
|
Extract the archive file downloaded from [yiiframework.com](http://www.yiiframework.com/download/) to
|
||||||
|
a directory named `basic` that is directly under the Web root.
|
||||||
|
|
||||||
|
Set cookie validation key in `config/web.php` file to some random secret string:
|
||||||
|
|
||||||
|
```php
|
||||||
|
'request' => [
|
||||||
|
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
|
||||||
|
'cookieValidationKey' => '<secret random string goes here>',
|
||||||
|
],
|
||||||
|
```
|
||||||
|
|
||||||
|
You can then access the application through the following URL:
|
||||||
|
|
||||||
|
~~~
|
||||||
|
http://localhost/basic/web/
|
||||||
|
~~~
|
||||||
|
|
||||||
|
|
||||||
|
### Install with Docker
|
||||||
|
|
||||||
|
Update your vendor packages
|
||||||
|
|
||||||
|
docker-compose run --rm php composer update --prefer-dist
|
||||||
|
|
||||||
|
Run the installation triggers (creating cookie validation code)
|
||||||
|
|
||||||
|
docker-compose run --rm php composer install
|
||||||
|
|
||||||
|
Start the container
|
||||||
|
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
You can then access the application through the following URL:
|
||||||
|
|
||||||
|
http://127.0.0.1:8000
|
||||||
|
|
||||||
|
**NOTES:**
|
||||||
|
- Minimum required Docker engine version `17.04` for development (see [Performance tuning for volume mounts](https://docs.docker.com/docker-for-mac/osxfs-caching/))
|
||||||
|
- The default configuration uses a host-volume in your home directory `.docker-composer` for composer caches
|
||||||
|
|
||||||
|
|
||||||
|
CONFIGURATION
|
||||||
|
-------------
|
||||||
|
|
||||||
|
### Database
|
||||||
|
|
||||||
|
Edit the file `config/db.php` with real data, for example:
|
||||||
|
|
||||||
|
```php
|
||||||
|
return [
|
||||||
|
'class' => 'yii\db\Connection',
|
||||||
|
'dsn' => 'mysql:host=localhost;dbname=yii2basic',
|
||||||
|
'username' => 'root',
|
||||||
|
'password' => '1234',
|
||||||
|
'charset' => 'utf8',
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
**NOTES:**
|
||||||
|
- Yii won't create the database for you, this has to be done manually before you can access it.
|
||||||
|
- Check and edit the other files in the `config/` directory to customize your application as required.
|
||||||
|
- Refer to the README in the `tests` directory for information specific to basic application tests.
|
||||||
|
|
||||||
|
|
||||||
|
TESTING
|
||||||
|
-------
|
||||||
|
|
||||||
|
Tests are located in `tests` directory. They are developed with [Codeception PHP Testing Framework](http://codeception.com/).
|
||||||
|
By default there are 3 test suites:
|
||||||
|
|
||||||
|
- `unit`
|
||||||
|
- `functional`
|
||||||
|
- `acceptance`
|
||||||
|
|
||||||
|
Tests can be executed by running
|
||||||
|
|
||||||
|
```
|
||||||
|
vendor/bin/codecept run
|
||||||
|
```
|
||||||
|
|
||||||
|
The command above will execute unit and functional tests. Unit tests are testing the system components, while functional
|
||||||
|
tests are for testing user interaction. Acceptance tests are disabled by default as they require additional setup since
|
||||||
|
they perform testing in real browser.
|
||||||
|
|
||||||
|
|
||||||
|
### Running acceptance tests
|
||||||
|
|
||||||
|
To execute acceptance tests do the following:
|
||||||
|
|
||||||
|
1. Rename `tests/acceptance.suite.yml.example` to `tests/acceptance.suite.yml` to enable suite configuration
|
||||||
|
|
||||||
|
2. Replace `codeception/base` package in `composer.json` with `codeception/codeception` to install full featured
|
||||||
|
version of Codeception
|
||||||
|
|
||||||
|
3. Update dependencies with Composer
|
||||||
|
|
||||||
|
```
|
||||||
|
composer update
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Download [Selenium Server](http://www.seleniumhq.org/download/) and launch it:
|
||||||
|
|
||||||
|
```
|
||||||
|
java -jar ~/selenium-server-standalone-x.xx.x.jar
|
||||||
|
```
|
||||||
|
|
||||||
|
In case of using Selenium Server 3.0 with Firefox browser since v48 or Google Chrome since v53 you must download [GeckoDriver](https://github.com/mozilla/geckodriver/releases) or [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/downloads) and launch Selenium with it:
|
||||||
|
|
||||||
|
```
|
||||||
|
# for Firefox
|
||||||
|
java -jar -Dwebdriver.gecko.driver=~/geckodriver ~/selenium-server-standalone-3.xx.x.jar
|
||||||
|
|
||||||
|
# for Google Chrome
|
||||||
|
java -jar -Dwebdriver.chrome.driver=~/chromedriver ~/selenium-server-standalone-3.xx.x.jar
|
||||||
|
```
|
||||||
|
|
||||||
|
As an alternative way you can use already configured Docker container with older versions of Selenium and Firefox:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker run --net=host selenium/standalone-firefox:2.53.0
|
||||||
|
```
|
||||||
|
|
||||||
|
5. (Optional) Create `yii2basic_test` database and update it by applying migrations if you have them.
|
||||||
|
|
||||||
|
```
|
||||||
|
tests/bin/yii migrate
|
||||||
|
```
|
||||||
|
|
||||||
|
The database configuration can be found at `config/test_db.php`.
|
||||||
|
|
||||||
|
|
||||||
|
6. Start web server:
|
||||||
|
|
||||||
|
```
|
||||||
|
tests/bin/yii serve
|
||||||
|
```
|
||||||
|
|
||||||
|
7. Now you can run all available tests
|
||||||
|
|
||||||
|
```
|
||||||
|
# run all available tests
|
||||||
|
vendor/bin/codecept run
|
||||||
|
|
||||||
|
# run acceptance tests
|
||||||
|
vendor/bin/codecept run acceptance
|
||||||
|
|
||||||
|
# run only unit and functional tests
|
||||||
|
vendor/bin/codecept run unit,functional
|
||||||
|
```
|
||||||
|
|
||||||
|
### Code coverage support
|
||||||
|
|
||||||
|
By default, code coverage is disabled in `codeception.yml` configuration file, you should uncomment needed rows to be able
|
||||||
|
to collect code coverage. You can run your tests and collect coverage with the following command:
|
||||||
|
|
||||||
|
```
|
||||||
|
#collect coverage for all tests
|
||||||
|
vendor/bin/codecept run --coverage --coverage-html --coverage-xml
|
||||||
|
|
||||||
|
#collect coverage only for unit tests
|
||||||
|
vendor/bin/codecept run unit --coverage --coverage-html --coverage-xml
|
||||||
|
|
||||||
|
#collect coverage for unit and functional tests
|
||||||
|
vendor/bin/codecept run functional,unit --coverage --coverage-html --coverage-xml
|
||||||
|
```
|
||||||
|
|
||||||
|
You can see code coverage output under the `tests/_output` directory.
|
|
@ -0,0 +1,92 @@
|
||||||
|
require 'yaml'
|
||||||
|
require 'fileutils'
|
||||||
|
|
||||||
|
required_plugins_installed = nil
|
||||||
|
required_plugins = %w( vagrant-hostmanager vagrant-vbguest )
|
||||||
|
required_plugins.each do |plugin|
|
||||||
|
unless Vagrant.has_plugin? plugin
|
||||||
|
system "vagrant plugin install #{plugin}"
|
||||||
|
required_plugins_installed = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# IF plugin[s] was just installed - restart required
|
||||||
|
if required_plugins_installed
|
||||||
|
# Get CLI command[s] and call again
|
||||||
|
system 'vagrant' + ARGV.to_s.gsub(/\[\"|\", \"|\"\]/, ' ')
|
||||||
|
exit
|
||||||
|
end
|
||||||
|
|
||||||
|
domains = {
|
||||||
|
app: 'yii2basic.test'
|
||||||
|
}
|
||||||
|
|
||||||
|
vagrantfile_dir_path = File.dirname(__FILE__)
|
||||||
|
|
||||||
|
config = {
|
||||||
|
local: vagrantfile_dir_path + '/vagrant/config/vagrant-local.yml',
|
||||||
|
example: vagrantfile_dir_path + '/vagrant/config/vagrant-local.example.yml'
|
||||||
|
}
|
||||||
|
|
||||||
|
# copy config from example if local config not exists
|
||||||
|
FileUtils.cp config[:example], config[:local] unless File.exist?(config[:local])
|
||||||
|
# read config
|
||||||
|
options = YAML.load_file config[:local]
|
||||||
|
|
||||||
|
# check github token
|
||||||
|
if options['github_token'].nil? || options['github_token'].to_s.length != 40
|
||||||
|
puts "You must place REAL GitHub token into configuration:\n/yii2-app-basic/vagrant/config/vagrant-local.yml"
|
||||||
|
exit
|
||||||
|
end
|
||||||
|
|
||||||
|
# vagrant configurate
|
||||||
|
Vagrant.configure(2) do |config|
|
||||||
|
# select the box
|
||||||
|
config.vm.box = 'bento/ubuntu-18.04'
|
||||||
|
|
||||||
|
# should we ask about box updates?
|
||||||
|
config.vm.box_check_update = options['box_check_update']
|
||||||
|
|
||||||
|
config.vm.provider 'virtualbox' do |vb|
|
||||||
|
# machine cpus count
|
||||||
|
vb.cpus = options['cpus']
|
||||||
|
# machine memory size
|
||||||
|
vb.memory = options['memory']
|
||||||
|
# machine name (for VirtualBox UI)
|
||||||
|
vb.name = options['machine_name']
|
||||||
|
end
|
||||||
|
|
||||||
|
# machine name (for vagrant console)
|
||||||
|
config.vm.define options['machine_name']
|
||||||
|
|
||||||
|
# machine name (for guest machine console)
|
||||||
|
config.vm.hostname = options['machine_name']
|
||||||
|
|
||||||
|
# network settings
|
||||||
|
config.vm.network 'private_network', ip: options['ip']
|
||||||
|
|
||||||
|
# sync: folder 'yii2-app-advanced' (host machine) -> folder '/app' (guest machine)
|
||||||
|
config.vm.synced_folder './', '/app', owner: 'vagrant', group: 'vagrant'
|
||||||
|
|
||||||
|
# disable folder '/vagrant' (guest machine)
|
||||||
|
config.vm.synced_folder '.', '/vagrant', disabled: true
|
||||||
|
|
||||||
|
# hosts settings (host machine)
|
||||||
|
config.vm.provision :hostmanager
|
||||||
|
config.hostmanager.enabled = true
|
||||||
|
config.hostmanager.manage_host = true
|
||||||
|
config.hostmanager.ignore_private_ip = false
|
||||||
|
config.hostmanager.include_offline = true
|
||||||
|
config.hostmanager.aliases = domains.values
|
||||||
|
|
||||||
|
# quick fix for failed guest additions installations
|
||||||
|
# config.vbguest.auto_update = false
|
||||||
|
|
||||||
|
# provisioners
|
||||||
|
config.vm.provision 'shell', path: './vagrant/provision/once-as-root.sh', args: [options['timezone'], options['ip']]
|
||||||
|
config.vm.provision 'shell', path: './vagrant/provision/once-as-vagrant.sh', args: [options['github_token']], privileged: false
|
||||||
|
config.vm.provision 'shell', path: './vagrant/provision/always-as-root.sh', run: 'always'
|
||||||
|
|
||||||
|
# post-install message (vagrant console)
|
||||||
|
config.vm.post_up_message = "App URL: http://#{domains[:app]}"
|
||||||
|
end
|
|
@ -0,0 +1,42 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @link http://www.yiiframework.com/
|
||||||
|
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||||
|
* @license http://www.yiiframework.com/license/
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace app\assets;
|
||||||
|
|
||||||
|
use yii\web\AssetBundle;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Main application asset bundle.
|
||||||
|
*
|
||||||
|
* @author Qiang Xue <qiang.xue@gmail.com>
|
||||||
|
* @since 2.0
|
||||||
|
*/
|
||||||
|
class AppAsset extends AssetBundle
|
||||||
|
{
|
||||||
|
public $basePath = '@webroot';
|
||||||
|
public $baseUrl = '@web';
|
||||||
|
public $css = [
|
||||||
|
'//fonts.googleapis.com/css?family=Open+Sans:400,700',
|
||||||
|
'css/bootstrap/bootstrap.min.css',
|
||||||
|
'css/main.css',
|
||||||
|
'css/header.css',
|
||||||
|
'css/info_panel.css',
|
||||||
|
'css/categories_blocks_panel.css',
|
||||||
|
'css/footer.css'
|
||||||
|
];
|
||||||
|
public $js = [
|
||||||
|
'https://code.jquery.com/jquery-3.5.1.min.js',
|
||||||
|
'js/bootstrap/popper.min.js',
|
||||||
|
'js/bootstrap/bootstrap.min.js',
|
||||||
|
'https://kit.fontawesome.com/d7e922c226.js'
|
||||||
|
];
|
||||||
|
public $depends = [
|
||||||
|
'yii\web\YiiAsset',
|
||||||
|
// 'yii\bootstrap\BootstrapAsset'
|
||||||
|
];
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @link http://www.yiiframework.com/
|
||||||
|
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||||
|
* @license http://www.yiiframework.com/license/
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace app\commands;
|
||||||
|
|
||||||
|
use yii\console\Controller;
|
||||||
|
use yii\console\ExitCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This command echoes the first argument that you have entered.
|
||||||
|
*
|
||||||
|
* This command is provided as an example for you to learn how to create console commands.
|
||||||
|
*
|
||||||
|
* @author Qiang Xue <qiang.xue@gmail.com>
|
||||||
|
* @since 2.0
|
||||||
|
*/
|
||||||
|
class HelloController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* This command echoes what you have entered as the message.
|
||||||
|
* @param string $message the message to be echoed.
|
||||||
|
* @return int Exit code
|
||||||
|
*/
|
||||||
|
public function actionIndex($message = 'hello world')
|
||||||
|
{
|
||||||
|
echo $message . "\n";
|
||||||
|
|
||||||
|
return ExitCode::OK;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
version: '2'
|
||||||
|
services:
|
||||||
|
php:
|
||||||
|
image: yiisoftware/yii2-php:7.4-apache
|
||||||
|
volumes:
|
||||||
|
- ~/.composer-docker/cache:/root/.composer/cache:delegated
|
||||||
|
- ./:/app:delegated
|
||||||
|
ports:
|
||||||
|
- '8000:80'
|
|
@ -0,0 +1,162 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Application requirement checker script.
|
||||||
|
*
|
||||||
|
* In order to run this script use the following console command:
|
||||||
|
* php requirements.php
|
||||||
|
*
|
||||||
|
* In order to run this script from the web, you should copy it to the web root.
|
||||||
|
* If you are using Linux you can create a hard link instead, using the following command:
|
||||||
|
* ln ../requirements.php requirements.php
|
||||||
|
*/
|
||||||
|
|
||||||
|
// you may need to adjust this path to the correct Yii framework path
|
||||||
|
// uncomment and adjust the following line if Yii is not located at the default path
|
||||||
|
//$frameworkPath = dirname(__FILE__) . '/vendor/yiisoft/yii2';
|
||||||
|
|
||||||
|
|
||||||
|
if (!isset($frameworkPath)) {
|
||||||
|
$searchPaths = array(
|
||||||
|
dirname(__FILE__) . '../../../../vendor/yiisoft/yii2',
|
||||||
|
dirname(__FILE__) . '/../../../../..//vendor/yiisoft/yii2',
|
||||||
|
);
|
||||||
|
foreach ($searchPaths as $path) {
|
||||||
|
if (is_dir($path)) {
|
||||||
|
$frameworkPath = $path;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset($frameworkPath) || !is_dir($frameworkPath)) {
|
||||||
|
$message = "<h1>Error</h1>\n\n"
|
||||||
|
. "<p><strong>The path to yii framework seems to be incorrect.</strong></p>\n"
|
||||||
|
. '<p>You need to install Yii framework via composer or adjust the framework path in file <abbr title="' . __FILE__ . '">' . basename(__FILE__) . "</abbr>.</p>\n"
|
||||||
|
. '<p>Please refer to the <abbr title="' . dirname(__FILE__) . "/README.md\">README</abbr> on how to install Yii.</p>\n";
|
||||||
|
|
||||||
|
if (!empty($_SERVER['argv'])) {
|
||||||
|
// do not print HTML when used in console mode
|
||||||
|
echo strip_tags($message);
|
||||||
|
} else {
|
||||||
|
echo $message;
|
||||||
|
}
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
require_once($frameworkPath . '/requirements/YiiRequirementChecker.php');
|
||||||
|
$requirementsChecker = new YiiRequirementChecker();
|
||||||
|
|
||||||
|
$gdMemo = $imagickMemo = 'Either GD PHP extension with FreeType support or ImageMagick PHP extension with PNG support is required for image CAPTCHA.';
|
||||||
|
$gdOK = $imagickOK = false;
|
||||||
|
|
||||||
|
if (extension_loaded('imagick')) {
|
||||||
|
$imagick = new Imagick();
|
||||||
|
$imagickFormats = $imagick->queryFormats('PNG');
|
||||||
|
if (in_array('PNG', $imagickFormats)) {
|
||||||
|
$imagickOK = true;
|
||||||
|
} else {
|
||||||
|
$imagickMemo = 'Imagick extension should be installed with PNG support in order to be used for image CAPTCHA.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (extension_loaded('gd')) {
|
||||||
|
$gdInfo = gd_info();
|
||||||
|
if (!empty($gdInfo['FreeType Support'])) {
|
||||||
|
$gdOK = true;
|
||||||
|
} else {
|
||||||
|
$gdMemo = 'GD extension should be installed with FreeType support in order to be used for image CAPTCHA.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adjust requirements according to your application specifics.
|
||||||
|
*/
|
||||||
|
$requirements = array(
|
||||||
|
// Database :
|
||||||
|
array(
|
||||||
|
'name' => 'PDO extension',
|
||||||
|
'mandatory' => true,
|
||||||
|
'condition' => extension_loaded('pdo'),
|
||||||
|
'by' => 'All DB-related classes',
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'name' => 'PDO SQLite extension',
|
||||||
|
'mandatory' => false,
|
||||||
|
'condition' => extension_loaded('pdo_sqlite'),
|
||||||
|
'by' => 'All DB-related classes',
|
||||||
|
'memo' => 'Required for SQLite database.',
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'name' => 'PDO MySQL extension',
|
||||||
|
'mandatory' => false,
|
||||||
|
'condition' => extension_loaded('pdo_mysql'),
|
||||||
|
'by' => 'All DB-related classes',
|
||||||
|
'memo' => 'Required for MySQL database.',
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'name' => 'PDO PostgreSQL extension',
|
||||||
|
'mandatory' => false,
|
||||||
|
'condition' => extension_loaded('pdo_pgsql'),
|
||||||
|
'by' => 'All DB-related classes',
|
||||||
|
'memo' => 'Required for PostgreSQL database.',
|
||||||
|
),
|
||||||
|
// Cache :
|
||||||
|
array(
|
||||||
|
'name' => 'Memcache extension',
|
||||||
|
'mandatory' => false,
|
||||||
|
'condition' => extension_loaded('memcache') || extension_loaded('memcached'),
|
||||||
|
'by' => '<a href="http://www.yiiframework.com/doc-2.0/yii-caching-memcache.html">MemCache</a>',
|
||||||
|
'memo' => extension_loaded('memcached') ? 'To use memcached set <a href="http://www.yiiframework.com/doc-2.0/yii-caching-memcache.html#$useMemcached-detail">MemCache::useMemcached</a> to <code>true</code>.' : ''
|
||||||
|
),
|
||||||
|
// CAPTCHA:
|
||||||
|
array(
|
||||||
|
'name' => 'GD PHP extension with FreeType support',
|
||||||
|
'mandatory' => false,
|
||||||
|
'condition' => $gdOK,
|
||||||
|
'by' => '<a href="http://www.yiiframework.com/doc-2.0/yii-captcha-captcha.html">Captcha</a>',
|
||||||
|
'memo' => $gdMemo,
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'name' => 'ImageMagick PHP extension with PNG support',
|
||||||
|
'mandatory' => false,
|
||||||
|
'condition' => $imagickOK,
|
||||||
|
'by' => '<a href="http://www.yiiframework.com/doc-2.0/yii-captcha-captcha.html">Captcha</a>',
|
||||||
|
'memo' => $imagickMemo,
|
||||||
|
),
|
||||||
|
// PHP ini :
|
||||||
|
'phpExposePhp' => array(
|
||||||
|
'name' => 'Expose PHP',
|
||||||
|
'mandatory' => false,
|
||||||
|
'condition' => $requirementsChecker->checkPhpIniOff("expose_php"),
|
||||||
|
'by' => 'Security reasons',
|
||||||
|
'memo' => '"expose_php" should be disabled at php.ini',
|
||||||
|
),
|
||||||
|
'phpAllowUrlInclude' => array(
|
||||||
|
'name' => 'PHP allow url include',
|
||||||
|
'mandatory' => false,
|
||||||
|
'condition' => $requirementsChecker->checkPhpIniOff("allow_url_include"),
|
||||||
|
'by' => 'Security reasons',
|
||||||
|
'memo' => '"allow_url_include" should be disabled at php.ini',
|
||||||
|
),
|
||||||
|
'phpSmtp' => array(
|
||||||
|
'name' => 'PHP mail SMTP',
|
||||||
|
'mandatory' => false,
|
||||||
|
'condition' => strlen(ini_get('SMTP')) > 0,
|
||||||
|
'by' => 'Email sending',
|
||||||
|
'memo' => 'PHP mail SMTP server required',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
// OPcache check
|
||||||
|
if (!version_compare(phpversion(), '5.5', '>=')) {
|
||||||
|
$requirements[] = array(
|
||||||
|
'name' => 'APC extension',
|
||||||
|
'mandatory' => false,
|
||||||
|
'condition' => extension_loaded('apc'),
|
||||||
|
'by' => '<a href="http://www.yiiframework.com/doc-2.0/yii-caching-apccache.html">ApcCache</a>',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $requirementsChecker->checkYii()->check($requirements)->getResult();
|
||||||
|
$requirementsChecker->render();
|
||||||
|
exit($result['summary']['errors'] === 0 ? 0 : 1);
|
|
@ -0,0 +1,2 @@
|
||||||
|
# local configuration
|
||||||
|
vagrant-local.yml
|
|
@ -0,0 +1,22 @@
|
||||||
|
# Your personal GitHub token
|
||||||
|
github_token: <your-personal-github-token>
|
||||||
|
# Read more: https://github.com/blog/1509-personal-api-tokens
|
||||||
|
# You can generate it here: https://github.com/settings/tokens
|
||||||
|
|
||||||
|
# Guest OS timezone
|
||||||
|
timezone: Europe/London
|
||||||
|
|
||||||
|
# Are we need check box updates for every 'vagrant up'?
|
||||||
|
box_check_update: false
|
||||||
|
|
||||||
|
# Virtual machine name
|
||||||
|
machine_name: yii2basic
|
||||||
|
|
||||||
|
# Virtual machine IP
|
||||||
|
ip: 192.168.83.137
|
||||||
|
|
||||||
|
# Virtual machine CPU cores number
|
||||||
|
cpus: 1
|
||||||
|
|
||||||
|
# Virtual machine RAM
|
||||||
|
memory: 1024
|
|
@ -0,0 +1,38 @@
|
||||||
|
server {
|
||||||
|
charset utf-8;
|
||||||
|
client_max_body_size 128M;
|
||||||
|
sendfile off;
|
||||||
|
|
||||||
|
listen 80; ## listen for ipv4
|
||||||
|
#listen [::]:80 default_server ipv6only=on; ## listen for ipv6
|
||||||
|
|
||||||
|
server_name yii2basic.test;
|
||||||
|
root /app/web/;
|
||||||
|
index index.php;
|
||||||
|
|
||||||
|
access_log /app/vagrant/nginx/log/yii2basic.access.log;
|
||||||
|
error_log /app/vagrant/nginx/log/yii2basic.error.log;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
# Redirect everything that isn't a real file to index.php
|
||||||
|
try_files $uri $uri/ /index.php$is_args$args;
|
||||||
|
}
|
||||||
|
|
||||||
|
# uncomment to avoid processing of calls to non-existing static files by Yii
|
||||||
|
#location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
|
||||||
|
# try_files $uri =404;
|
||||||
|
#}
|
||||||
|
#error_page 404 /404.html;
|
||||||
|
|
||||||
|
location ~ \.php$ {
|
||||||
|
include fastcgi_params;
|
||||||
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||||
|
#fastcgi_pass 127.0.0.1:9000;
|
||||||
|
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
|
||||||
|
try_files $uri =404;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ /\.(ht|svn|git) {
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
#nginx logs
|
||||||
|
yii2basic.access.log
|
||||||
|
yii2basic.error.log
|
|
@ -0,0 +1,18 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
#== Bash helpers ==
|
||||||
|
|
||||||
|
function info {
|
||||||
|
echo " "
|
||||||
|
echo "--> $1"
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
|
||||||
|
#== Provision script ==
|
||||||
|
|
||||||
|
info "Provision-script user: `whoami`"
|
||||||
|
|
||||||
|
info "Restart web-stack"
|
||||||
|
service php7.2-fpm restart
|
||||||
|
service nginx restart
|
||||||
|
service mysql restart
|
|
@ -0,0 +1,79 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
#== Import script args ==
|
||||||
|
|
||||||
|
timezone=$(echo "$1")
|
||||||
|
readonly IP=$2
|
||||||
|
|
||||||
|
#== Bash helpers ==
|
||||||
|
|
||||||
|
function info {
|
||||||
|
echo " "
|
||||||
|
echo "--> $1"
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
|
||||||
|
#== Provision script ==
|
||||||
|
|
||||||
|
info "Provision-script user: `whoami`"
|
||||||
|
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
info "Configure timezone"
|
||||||
|
timedatectl set-timezone ${timezone} --no-ask-password
|
||||||
|
|
||||||
|
info "Add the VM IP to the list of allowed IPs"
|
||||||
|
awk -v ip=$IP -f /app/vagrant/provision/provision.awk /app/config/web.php
|
||||||
|
|
||||||
|
info "Prepare root password for MySQL"
|
||||||
|
debconf-set-selections <<< 'mariadb-server mysql-server/root_password password'
|
||||||
|
debconf-set-selections <<< 'mariadb-server mysql-server/root_password_again password'
|
||||||
|
echo "Done!"
|
||||||
|
|
||||||
|
info "Update OS software"
|
||||||
|
apt-get update
|
||||||
|
apt-get upgrade -y
|
||||||
|
|
||||||
|
info "Install additional software"
|
||||||
|
apt-get install -y php7.2-curl php7.2-cli php7.2-intl php7.2-mysqlnd php7.2-gd php7.2-fpm php7.2-mbstring php7.2-xml unzip nginx mariadb-server-10.1 php.xdebug
|
||||||
|
|
||||||
|
info "Configure MySQL"
|
||||||
|
sed -i 's/.*bind-address.*/bind-address = 0.0.0.0/' /etc/mysql/mariadb.conf.d/50-server.cnf
|
||||||
|
mysql <<< "CREATE USER 'root'@'%' IDENTIFIED BY ''"
|
||||||
|
mysql <<< "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'"
|
||||||
|
mysql <<< "DROP USER 'root'@'localhost'"
|
||||||
|
mysql <<< 'FLUSH PRIVILEGES'
|
||||||
|
echo "Done!"
|
||||||
|
|
||||||
|
info "Configure PHP-FPM"
|
||||||
|
sed -i 's/user = www-data/user = vagrant/g' /etc/php/7.2/fpm/pool.d/www.conf
|
||||||
|
sed -i 's/group = www-data/group = vagrant/g' /etc/php/7.2/fpm/pool.d/www.conf
|
||||||
|
sed -i 's/owner = www-data/owner = vagrant/g' /etc/php/7.2/fpm/pool.d/www.conf
|
||||||
|
cat << EOF > /etc/php/7.2/mods-available/xdebug.ini
|
||||||
|
zend_extension=xdebug.so
|
||||||
|
xdebug.remote_enable=1
|
||||||
|
xdebug.remote_connect_back=1
|
||||||
|
xdebug.remote_port=9000
|
||||||
|
xdebug.remote_autostart=1
|
||||||
|
EOF
|
||||||
|
echo "Done!"
|
||||||
|
|
||||||
|
info "Configure NGINX"
|
||||||
|
sed -i 's/user www-data/user vagrant/g' /etc/nginx/nginx.conf
|
||||||
|
echo "Done!"
|
||||||
|
|
||||||
|
info "Enabling site configuration"
|
||||||
|
ln -s /app/vagrant/nginx/app.conf /etc/nginx/sites-enabled/app.conf
|
||||||
|
echo "Done!"
|
||||||
|
|
||||||
|
info "Removing default site configuration"
|
||||||
|
rm /etc/nginx/sites-enabled/default
|
||||||
|
echo "Done!"
|
||||||
|
|
||||||
|
info "Initailize databases for MySQL"
|
||||||
|
mysql <<< 'CREATE DATABASE yii2basic'
|
||||||
|
mysql <<< 'CREATE DATABASE yii2basic_test'
|
||||||
|
echo "Done!"
|
||||||
|
|
||||||
|
info "Install composer"
|
||||||
|
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
|
|
@ -0,0 +1,31 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
#== Import script args ==
|
||||||
|
|
||||||
|
github_token=$(echo "$1")
|
||||||
|
|
||||||
|
#== Bash helpers ==
|
||||||
|
|
||||||
|
function info {
|
||||||
|
echo " "
|
||||||
|
echo "--> $1"
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
|
||||||
|
#== Provision script ==
|
||||||
|
|
||||||
|
info "Provision-script user: `whoami`"
|
||||||
|
|
||||||
|
info "Configure composer"
|
||||||
|
composer config --global github-oauth.github.com ${github_token}
|
||||||
|
echo "Done!"
|
||||||
|
|
||||||
|
info "Install project dependencies"
|
||||||
|
cd /app
|
||||||
|
composer --no-progress --prefer-dist install
|
||||||
|
|
||||||
|
info "Create bash-alias 'app' for vagrant user"
|
||||||
|
echo 'alias app="cd /app"' | tee /home/vagrant/.bash_aliases
|
||||||
|
|
||||||
|
info "Enabling colorized prompt for guest console"
|
||||||
|
sed -i "s/#force_color_prompt=yes/force_color_prompt=yes/" /home/vagrant/.bashrc
|
|
@ -0,0 +1,50 @@
|
||||||
|
###
|
||||||
|
# Modifying Yii2's files for Vagrant VM
|
||||||
|
#
|
||||||
|
# @author HA3IK <golubha3ik@gmail.com>
|
||||||
|
# @version 1.0.0
|
||||||
|
|
||||||
|
BEGIN {
|
||||||
|
print "AWK BEGINs its work:"
|
||||||
|
IGNORECASE = 1
|
||||||
|
|
||||||
|
# Correct IP - wildcard last octet
|
||||||
|
match(ip, /(([0-9]+\.)+)/, arr)
|
||||||
|
ip = arr[1] "*"
|
||||||
|
}
|
||||||
|
# BODY
|
||||||
|
{
|
||||||
|
# Check if it's the same file
|
||||||
|
if (FILENAME != isFile["same"]){
|
||||||
|
msg = "- Work with: " FILENAME
|
||||||
|
# Close a previous file
|
||||||
|
close(isFile["same"])
|
||||||
|
# Delete previous data
|
||||||
|
delete isFile
|
||||||
|
# Save current file
|
||||||
|
isFile["same"] = FILENAME
|
||||||
|
# Define array index for the file
|
||||||
|
switch (FILENAME){
|
||||||
|
case /config\/web\.php$/:
|
||||||
|
isFile["IsConfWeb"] = 1
|
||||||
|
msg = msg " - add allowed IP: " ip
|
||||||
|
break
|
||||||
|
}
|
||||||
|
# Print the concatenated message for the file
|
||||||
|
print msg
|
||||||
|
}
|
||||||
|
|
||||||
|
# IF config/web.php
|
||||||
|
if (isFile["IsConfWeb"]){
|
||||||
|
# IF line has "allowedIPs" and doesn't has our IP
|
||||||
|
if (match($0, "allowedIPs") && !match($0, ip)){
|
||||||
|
match($0, /([^\]]+)(.+)/, arr)
|
||||||
|
$0 = sprintf("%s, '%s'%s", arr[1], ip, arr[2])
|
||||||
|
}
|
||||||
|
# Rewrite the file
|
||||||
|
print $0 > FILENAME
|
||||||
|
}
|
||||||
|
}
|
||||||
|
END {
|
||||||
|
print "AWK ENDs its work."
|
||||||
|
}
|
|
@ -0,0 +1,75 @@
|
||||||
|
<?php
|
||||||
|
namespace app\widgets;
|
||||||
|
|
||||||
|
use Yii;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Alert widget renders a message from session flash. All flash messages are displayed
|
||||||
|
* in the sequence they were assigned using setFlash. You can set message as following:
|
||||||
|
*
|
||||||
|
* ```php
|
||||||
|
* Yii::$app->session->setFlash('error', 'This is the message');
|
||||||
|
* Yii::$app->session->setFlash('success', 'This is the message');
|
||||||
|
* Yii::$app->session->setFlash('info', 'This is the message');
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Multiple messages could be set as follows:
|
||||||
|
*
|
||||||
|
* ```php
|
||||||
|
* Yii::$app->session->setFlash('error', ['Error 1', 'Error 2']);
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @author Kartik Visweswaran <kartikv2@gmail.com>
|
||||||
|
* @author Alexander Makarov <sam@rmcreative.ru>
|
||||||
|
*/
|
||||||
|
class Alert extends \yii\bootstrap\Widget
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var array the alert types configuration for the flash messages.
|
||||||
|
* This array is setup as $key => $value, where:
|
||||||
|
* - key: the name of the session flash variable
|
||||||
|
* - value: the bootstrap alert type (i.e. danger, success, info, warning)
|
||||||
|
*/
|
||||||
|
public $alertTypes = [
|
||||||
|
'error' => 'alert-danger',
|
||||||
|
'danger' => 'alert-danger',
|
||||||
|
'success' => 'alert-success',
|
||||||
|
'info' => 'alert-info',
|
||||||
|
'warning' => 'alert-warning'
|
||||||
|
];
|
||||||
|
/**
|
||||||
|
* @var array the options for rendering the close button tag.
|
||||||
|
* Array will be passed to [[\yii\bootstrap\Alert::closeButton]].
|
||||||
|
*/
|
||||||
|
public $closeButton = [];
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function run()
|
||||||
|
{
|
||||||
|
$session = Yii::$app->session;
|
||||||
|
$flashes = $session->getAllFlashes();
|
||||||
|
$appendClass = isset($this->options['class']) ? ' ' . $this->options['class'] : '';
|
||||||
|
|
||||||
|
foreach ($flashes as $type => $flash) {
|
||||||
|
if (!isset($this->alertTypes[$type])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ((array) $flash as $i => $message) {
|
||||||
|
echo \yii\bootstrap\Alert::widget([
|
||||||
|
'body' => $message,
|
||||||
|
'closeButton' => $this->closeButton,
|
||||||
|
'options' => array_merge($this->options, [
|
||||||
|
'id' => $this->getId() . '-' . $type . '-' . $i,
|
||||||
|
'class' => $this->alertTypes[$type] . $appendClass,
|
||||||
|
]),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$session->removeFlash($type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Yii console bootstrap file.
|
||||||
|
*
|
||||||
|
* @link http://www.yiiframework.com/
|
||||||
|
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||||
|
* @license http://www.yiiframework.com/license/
|
||||||
|
*/
|
||||||
|
|
||||||
|
defined('YII_DEBUG') or define('YII_DEBUG', true);
|
||||||
|
defined('YII_ENV') or define('YII_ENV', 'dev');
|
||||||
|
|
||||||
|
require __DIR__ . '../../../../vendor/autoload.php';
|
||||||
|
require __DIR__ . '../../../../vendor/yiisoft/yii2/Yii.php';
|
||||||
|
|
||||||
|
$config = require __DIR__ . '/config/console.php';
|
||||||
|
|
||||||
|
$application = new yii\console\Application($config);
|
||||||
|
$exitCode = $application->run();
|
||||||
|
exit($exitCode);
|
|
@ -0,0 +1,20 @@
|
||||||
|
@echo off
|
||||||
|
|
||||||
|
rem -------------------------------------------------------------
|
||||||
|
rem Yii command line bootstrap script for Windows.
|
||||||
|
rem
|
||||||
|
rem @author Qiang Xue <qiang.xue@gmail.com>
|
||||||
|
rem @link http://www.yiiframework.com/
|
||||||
|
rem @copyright Copyright (c) 2008 Yii Software LLC
|
||||||
|
rem @license http://www.yiiframework.com/license/
|
||||||
|
rem -------------------------------------------------------------
|
||||||
|
|
||||||
|
@setlocal
|
||||||
|
|
||||||
|
set YII_PATH=%~dp0
|
||||||
|
|
||||||
|
if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe
|
||||||
|
|
||||||
|
"%PHP_COMMAND%" "%YII_PATH%yii" %*
|
||||||
|
|
||||||
|
@endlocal
|
Reference in New Issue