Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

Archive /

Our old forums are still available as a read-only archive.

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo

What's the correct way to publish a view after a form post.


Go to End


1502 Views

Avatar
adiwidjaja

Community Member, 14 Posts

1 November 2008 at 3:42am

Hi,

I'm wondering what the correct method ist to publish a different view after a form post. My use case: I want to filter a view via a form. I currently have this code:


        function FilterForm() {

                //...

		$actions = new FieldSet( 
			new FormAction( "filter", _t('UserDefinedForm.FILTER', 'Filtern') )
		);

                //...

                return new Form( $this, "FilterForm", $fields, $actions );
        }

	function filter($data, $form) {
		$ids = $this->someComplicatedFiltering($data);
		$_GET["ids"] = $ids;
		return Director::direct($this->data()->URLSegment."//select");
        }

        function select() {
               return array("FilteredIds" => $_GET["ids"]);
        }

It works, but I don't think it's nice because the Director starts from the very beginning.

I tried to make this work:

$this->pushCurrent();

 $controller = new ModelAsController();
 
 $request = new HTTPRequest("GET", $this->data()->URLSegment.'//preview', $request->getVars(), $request->postVars());
 $request->match('$URLSegment//$Action/$ID/$OtherID');

 $result = $controller->handleRequest($request);
 
 $this->popCurrent();
 return $result->getBody();

But this didn't work, it always showed me the default view of the object. I traced this to a code segment, where the request url (object_urlsegment/view) is "pushed" so it's object_urlsegment/object_urlsegment/view (I don't understand the use case of that).

So finally my question: What is the correct method to do this? There are two versions of this use case: Fetch a different view of the current object or fetch a view of a different object.

Thanks for your clarification,

Cheers,

Andy