php composer.phar create-project phpixie/project your_project_folder 3.*-dev
location / { try_files $uri $uri/ /index.php; }
// bundles/app/src/Project/App/HTTPProcessors/Quickstart.php namespace Project\App\HTTPProcessors; use PHPixie\HTTP\Request; // class Quickstart extends \PHPixie\DefaultBundle\Processor\HTTP\Actions { /** * Builder * * @var Project\App\Builder */ protected $builder; public function __construct($builder) { $this->builder = $builder; } // public function defaultAction(Request $request) { return "Quickstart tutorial"; } // }
// bundles/app/src/Project/App/HTTPProcessors.php //... protected function buildQuickstartProcessor() { return new HTTPProcessors\Quickstart( $this->builder ); } //...
// bundles/app/src/Project/App/HTTPProcessors/Quickstart.php //... public function viewAction($request) { // 'id' return $request->attributes()->get('id'); } //... }
// bundles/app/assets/config/routeResolver return array( // // // - 'type' => 'group', 'resolvers' => array( //... // 'default' => array( 'type' => 'pattern', // 'path' => '(<processor>(/<action>))', // // /greet // 'action' 'default' 'defaults' => array( 'processor' => 'greet', 'action' => 'default' ) ) ) );
'view' => array( 'type' => 'pattern', // id // 'path' => 'quickstart/view/<id>', 'defaults' => array( 'processor' => 'quickstart', 'action' => 'view' ) )
array( // 'type' => 'prefix', // // 'path' => 'user/<userId>/', 'resolver' => array( 'type' => 'group', 'resolvers' => array( // /user/5/friends to Friends::userFriends() 'friends' => array( 'path' => 'friends', 'defaults' => array( 'processor' => 'friends', 'action' => 'usersFriends' ) ), // /user/5/profile to Profile::userProfile() 'profile' => array( 'path' => 'profile', 'defaults' => array( 'processor' => 'profile', 'action' => 'userProfile' ) ) ) ) );
//$_GET['name'] $request->query()->get('name'); //$_POST['name'] $request->data()->get('name'); // $request->attributes()->get('name');
$data = $request->data(); // $data->get('name', 'Trixie'); // // 'name' $data->getRequired('name'); // // $_POST['users']['pixie']['name'] $data->get('users.pixie.name'); // '' // $pixie = $data->slice('users.pixie'); $pixie->get('name'); // $data->get(); // $data->keys(); // // foreach($data as $key => $value) { } // // phpixie/slice //
JSON requests are also automatically parsed in $ request-> data (), which already facilitates working with AJAX requests
// return 'hello'; // JSON // return array('success' => true); // // HTTP $http = $this->builder->components()->http(); $httpResponses = $http->responses(); // return $httpResponses->redirect('http://phpixie.com/'); // return $httpResponses->stringResponse('Not found', $headers = array(), 404); // return $httpResponses->downloadFile('pixie.jpg', 'image/png', $filePath); // // CSV return $httpResponses->download('report.csv', 'text/csv', $contents);
<!-- bundles/app/assets/templates/quickstart/message.php --> <!-- $_() HTML, '<', '>' .. , XSS . --> <p><?=$_($message)?></p>
// bundles/app/src/Project/App/HTTPProcessors/Quickstart.php //... public function renderAction($request) { $template = $this->builder->components()->template(); return $template->render( 'app:quickstart/message', array( 'message' => 'hello' ) ); } //... }
$template = $this->components()->template(); $container = $template->get('app:quickstart/message'); $container->message = 'hello'; return $container->render(); // // return $container;
<!-- bundles/app/assets/templates/quickstart/layout.php --> <h1>Quickstart</h1> <div> <!-- --> <?=$this->childContent();?> </div>
<!-- bundles/app/assets/templates/quickstart/message.php --> <?php $this->layout('app:quickstart/layout');?> <p><?=$_($message)?></p>
<!-- bundles/app/assets/templates/quickstart/layout.php --> <!-- 'header' --> <?php $this->startBlock('header'); ?> <h1>Quickstart</h1> <?php $this->endBlock(); ?> <!-- --> <?=$this->block('header') ?> <div> <!-- --> <?=$this->childContent();?> </div>
<!-- bundles/app/assets/templates/quickstart/message.php --> <?php $this->layout('app:quickstart/layout');?> <?php $this->startBlock('header'); ?> <h2>Message</h2> <?php $this->endBlock(); ?> <p><?=$_($message)?></p>
<!-- bundles/app/assets/templates/quickstart/layout.php --> <?php if($this->startBlock('header', true)): ?> <h1>Quickstart</h1> <?php $this->endBlock(); endif;?> <!-- ... -->
$this->startBlock('header', false, true);
<?php include $this->resolve('some:template');?>
<?php $url=$this->httpPath( 'app.default', array( 'processor' => 'hello', 'action' => 'greet' ) ); ?> <a href="<?=$_($url)?>">Hello</a>
// assets/config/database.php return array( 'default' => array( 'driver' => 'pdo', 'connection' => 'mysql:host=localhost;dbname=quickstart', 'user' => 'pixie', 'password' => 'pixie' ) );
CREATE TABLE `projects`( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255), `tasksTotal` INT DEFAULT 0, `tasksDone` INT DEFAULT 0 ); CREATE TABLE `tasks`( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `projectId` INT NOT NULL, `name` VARCHAR(255), `isDone` BOOLEAN DEFAULT 0 ); INSERT INTO `projects` VALUES (1, 'Quickstart', 4, 3), (2, 'Build a website', 3, 0); INSERT INTO `tasks` VALUES (1, 1, 'Installing', 1), (2, 1, 'Routing', 1), (3, 1, 'Templating', 1), (4, 1, 'Database', 0), (5, 2, 'Design', 0), (6, 2, 'Develop', 0), (7, 2, 'Deploy', 0);
// bundles/app/src/Project/App/HTTPProcessors/Quickstart.php //... public function ormAction(Request $request) { $orm = $this->builder->components->orm(); $projects = $orm->query('project')->find(); // // . // , // , // JSON return $projects->asArray(true); } //...
// bundles/app/assets/config/orm.php <?php return array( 'relationships' => array( array( 'type' => 'oneToMany', 'owner' => 'project', 'items' => 'task', // // 'itemsOptions' => array( 'onOwnerDelete' => 'delete' ) ) ) );
$orm = $this->builder->components->orm(); // $projectRepository = $orm->repository('project'); $project = $projectRepository->create(); // $project = $orm->createEntity('project'); // $project->name = 'Buy Groceries'; $project->save(); $task = $orm->createEntity('task'); $task->name = 'Milk'; $task->save(); // $project->tasks->add($task); // $project->delete(); // $projects = $orm->query('project')->find(); foreach($projects as $project) { foreach($project->tasks() as $task) { //... } }
$orm = $this->builder->components->orm(); // $orm->query('project')->where('name', 'Quickstart')->findOne(); // id $orm->query('project')->in($id)->findOne(); // id $orm->query('project')->in($ids)->findOne(); // $orm->query('project') ->where('tasksTotal', '>', 2) ->or('tasksDone', '<', 5) ->find(); // //WHERE name = 'Quickstart' OR ( ... ) $orm->query('project') ->where('name', 'Quickstart') ->or(function($query) { $querty ->where('tasksTotal', '>', 2) ->or('tasksDone', '<', 5); }) ->find(); // $orm->query('project') ->where('name', 'Quickstart') ->startWhereConditionGroup('or') ->where('tasksTotal', '>', 2) ->or('tasksDone', '<', 5) ->endGroup() ->find(); // , '*' // tasksTotal = tasksDone $orm->query('project') ->where('tasksTotal', '=*', 'tasksDone') ->find(); // $orm->query('project') ->relatedTo('task') ->find(); // $orm->query('project') ->where('tasks.name', 'Routing') ->findOne(); // $orm->query('project') ->orRelatedTo('task', function($query) { $query->where('name', 'Routing'); }) ->findOne(); // // (eager loading) $orm->query('project')->find(array('task')); // $orm->query('project')->update(array( 'tasksDone' => 0 )); // // . // $query = $orm->query('project') ->where('tasksTotal', '=*', 'tasksDone'); $count = $query->count(); $query ->limit(5) ->offset(0) ->find();
$orm = $this->builder->components->orm(); // $projectQuery = $orm->query('project') ->where('name', 'Quickstart'); // 5 $tasksQuery = $orm->query('task')->limit(5); // // $projectQuery->tasks->add($tasksQuery);
// bundles/app/src/Project/App/ORMWrappers/Project.php; namespace Project\App\ORMWrappers; class Project extends \PHPixie\ORM\Wrappers\Type\Database\Entity { // // public function isDone() { return $this->tasksDone === $this->tasksTotal; } }
// bundles/app/src/Project/App/ORMWrappers.php; namespace Project\App; class ORMWrappers extends \PHPixie\ORM\Wrappers\Implementation { // protected $databaseEntities = array( 'project' ); // public function projectEntity($entity) { return new ORMWrappers\Project($entity); } }
//Find the first project $project = $orm->query('project')->findOne(); //Check if it is done $project->isDone();
// /bundles/app/src/Project/App/HTTPProcessor.php namespace Project\App; class HTTPProcessor extends \PHPixie\DefaultBundle\Processor\HTTP\Builder { protected $builder; protected $attribute = 'processor'; public function __construct($builder) { $this->builder = $builder; } public function processor($name) { if(!array_key_exists($name, $this->processors)) { $class = '\Project\App\HTTPProcessors\\'.ucfirst($name); if(!class_exists($class)) { return null; } $this->processors[$name] = new $class($this->builder); } return $this->processors[$name]; } }
// /bundles/app/src/Project/App/HTTPProcessors\Controller.php namespace Project\App\HTTPProcessors; asbtarct class Controller extends \PHPixie\DefaultBundle\Processor\HTTP\Actions { protected $builder; protected $attribute = 'processor'; public function __construct($builder) { $this->builder = $builder; } public function process($request) { $result = $this->before($request); if($result !== null) { return $result; } $result = parent::process($request); return $this->after($request, $result); } public function before($request) { } public function after($request, $result) { return $result; } }
Source: https://habr.com/ru/post/263551/
All Articles