当我通过composer安装新的Symfony应用程序或直接下载它时,它附带一个命令行console
应用程序。我可以使用以下命令运行此应用程序
$ php app/console help
在具有开发人员命令行应用程序的其他系统中,(Drupal的drush
,Magento的n98-magerun
等),应用程序能够确定根目录的位置文件夹是指您深入文件层次结构,并且可以从任何地方运行应用程序
$ cd some/drupal/path
$ drush //still works!
要与Symfony app/console
做类似的事情,您需要自己构建此路径
$ cd some/symfony/path
$ php ../../../app/console
如果命令依赖于PHP工作目录作为根目录,那么即使这样也行不通。
是否有标准/良好支持的方式让#34;从任何文件夹运行"使用Symfony app/console
的其他CLI应用程序的行为?
答案 0 :(得分:2)
我为此目的使用以下控制台脚本:
#!/usr/bin/env php
<?php
function fileLocator($file =null, $maxDepth = 10, $currentDir = ".")
{
if(empty($file)){
return false;
}elseif(file_exists($currentDir . "/$file")){
return $currentDir;
}elseif(--$maxDepth){
return fileLocator($file, $maxDepth, $currentDir . "/..");
}else{
return false;
}
}
$projectDir = fileLocator('app', 10, getcwd());
if($projectDir){
$projectDir = realpath($projectDir);
if(substr($projectDir, -1) != DIRECTORY_SEPARATOR){
$projectDir .= DIRECTORY_SEPARATOR ;
}
$appDir = $projectDir . 'app';
}else {
die('You are not in symfony project');
}
// if you don't want to setup permissions the proper way, just uncomment the following PHP line
// read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information
//umask(0000);
set_time_limit(0);
require_once $appDir.'/bootstrap.php.cache';
require_once $appDir.'/AppKernel.php';
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Component\Console\Input\ArgvInput;
use Symfony\Component\Debug\Debug;
$input = new ArgvInput();
$env = $input->getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev');
$debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption(array('--no-debug', '')) && $env !== 'prod';
if ($debug) {
Debug::enable();
}
$kernel = new AppKernel($env, $debug);
$application = new Application($kernel);
$application->run($input);
使用此代码创建控制台文件。把它放在您选择的全局路径中(如/usr/local/bin/
)
给它可执行权限
你准备好了。您可以从symfony2项目的任何目录中运行控制台。sudo chmod + x / usr / local / bin / console
假设你在路径变量中有你的php路径,所以你可以执行像php app/console
这样的控制台。
使用相同的代码创建console.php
文件。使用以下脚本创建console.bat
文件:
@ECHO OFF
php "%~dp0sf.php" %*
复制php目录中的console.php
和console.bat
文件。现在你准备好了。
享受!!
答案 1 :(得分:1)
你需要创建一个符号链接
sudo ln -s /full/path/to/app/console /usr/local/bin/console
sudo chmod +x /usr/local/bin/console
然后您可以运行sudo console help
答案 2 :(得分:0)
这是一个以Bash脚本实现的解决方案,适用于Windows下的Linux / Mac或Cygwin的bash提示。即使你在项目之间定期交换它也应该工作正常,因为它不依赖于环境变量。
创建一个包含以下内容的脚本,使其可执行(使用chmod a + x),然后将其放在路径中:
#!/bin/sh while [[ "`pwd`" != "/" ]]; do app_dir=`find \`pwd\`/ -maxdepth 1 -name 'app'` if [ -f "$app_dir/console" ]; then php $app_dir/console $@ break fi cd .. done
然后只需在Symfony项目中的任何地方使用它,并像使用“php app / console”一样使用它。它不依赖于任何环境变量 - 它所做的只是递归查看您所在位置的父文件夹,查找app / console,然后使用传递给它的任何和所有参数运行它(这就是$ @符号用于)。
答案 3 :(得分:0)
我创建了一个Bundle来解决。目前,它只是一个bash / fish脚本,它会创建类似于虚拟环境的内容:
$ composer require sk/symfony-venv
// [...] wait for install
$ . vendor/bin/activate
(project) $ console
在https://github.com/skroczek/symfony-venv上,您可以阅读更多内容。欢迎反馈。 :)