Skip to content

Instantly share code, notes, and snippets.

@develpr
Forked from lucadegasperi/ProjectController.php
Last active August 29, 2015 14:10
Show Gist options
  • Save develpr/a20a90d9d7427ada0fa9 to your computer and use it in GitHub Desktop.
Save develpr/a20a90d9d7427ada0fa9 to your computer and use it in GitHub Desktop.
<?php
class ProjectController extends BaseController implements ProjectCreatorDelegate
{
public function store()
{
$creator = new ProjectCreator;
return $creator->create(Input::all(), $this);
}
public function projectCreationFailed($errors)
{
return Redirect::back()->withInput()->withErrors($errors);
}
public function projectCreationSucceded()
{
return Redirect::route('projects.index');
}
}
<?php
class ProjectCreator
{
protected $projectModel; //this would work with Laravel out of the box, but could be replaced by a repository, etc
public function __construct(Project $projectModel)
{
$this->projectModel = $projectModel;
}
public function create($input, ProjectCreatorDelegate $delegate)
{
$validation = Validator::make($input, ['name' => 'min:8']);
if ( $validation->fails() ) {
return $this->delegate->projectCreationFailed($validation->messages());
}
$this->projectModel->create($input); //or other db stuff :)
return $this->delegate->projectCreationSucceeded();
}
<?php
interface ProjectCreatorDelegate
{
public function projectCreationFailed($errors);
public function projectCreationSucceeded();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment