gpt4 book ai didi

php - Laravel - 从 View 中调用 Redirect::to()

转载 作者:可可西里 更新时间:2023-11-01 00:21:48 25 4
gpt4 key购买 nike

我目前正在开发基于 Laravel 4 框架的 cms。我正在尝试构建一个类似于 Pyro CMS 的插件系统,其中可以使用 Blade 模板系统将模块 View 包含在页面 View 中。

我正在构建一个联系表单插件,如果提交成功,它将把用户重定向到给定的 url,或者简单地重定向回现有页面。

我的联系表单类的代码是:

class Contact {

public static function form($params)
{
//get params and execute relevant logic here

$redirect = isset($params['redirect']) ? $params['redirect'] : Request::url();

$data = Input::all();

if($data)
{
// Run validation and send message here
return Redirect::to($redirect)
}

return View::make('contact_form_view');
}

}

有一个页面 Controller 将根据使用的路由显示适当的页面 View ,其想法是用户可以将联系表单放入任何页面模板并通过从模板 View 中调用表单函数轻松自定义它如下图

<html>
<head>
</head>
<body>

{{ Contact::form(array(

'to' => 'myemail@mydomain.com',
'view' => 'contact_form_1',

)) }}

</body>
</html>

除了重定向之外,这一切都很好。成功提交表单并发送消息后,页面刷新并显示以下消息代替联系表单

HTTP/1.0 302 Found Cache-Control: no-cache Date: Tue, 17 Sep 2013 09:14:16 GMT Location: http://localhost:8888/my_initial_route Redirecting to http://localhost:8888/my_new_route.

大约 2 秒后,重定向发生,浏览器被重定向到用户在 $params 数组中提供的任何路由,如果没有提供重定向,则重定向到当前页面,如上例所示。

关于它为什么这样做的任何建议以及任何解决方案都会很棒。

谢谢!


编辑:

以下是我采用上述方法的原因的简要概述,这可能有助于理解问题:

该项目的一个要求是最终使用 cms 的开发人员可以通过 cms 控制面板单击“添加页面”按钮来创建无限数量的页面。这个想法是我们不会为我们想要创建的每个新页面编写新的页面 Controller 。有了这个,我想我有以下路线:

Route::any('{page_slug}/page', array('as' => 'frontend.page', 'uses' => 'FrontendPagesController@display_page'))->where('page_slug',  '[-A-Za-z0-9_-]+');

大大瘦身的display_page函数是:

public function display_page($slug)
{
$page = PagesModel::getPageBySlug($slug);
return View::make($page['view_name']);
}

有了这个,用户可以通过点击按钮创建一个页面,给它一个名字和一个 slug,然后应用程序可以显示该页面和相应的 View ——在创建页面时定义——而无需添加任何新路线、 Controller 等。

问题出现在用户想要在页面中包含联系表单的情况下。我们如何知道他们是否会添加表单、他们将使用哪些字段以及需要进行哪些验证?我需要一种能够将完全自定义的联系表单添加到任何页面的方法,而无需开发人员触摸 cms 代码。我对此的解决方案是上面给出的方法:开发人员将标签放入 View 中并向函数传递一些参数,这些参数自定义表单功能。

Contact::form() 函数有点像表单的 Controller 。它获取并返回包含来自 html 的 View ,处理提交并根据结果返回成功/错误消息。

现在我不一定需要使用上述方法,但我需要一种方法将联系表单 Controller 与页面 Controller 分开,以便开发人员能够在不接触 cms 后端代码的情况下将表单添加到任何页面。

任何关于此的想法都会很棒。

最佳答案

您应该从 Controller 调用 redirect 而不是从 View 调用。发生这种情况是因为,您已经在 View 中并且它是可见的,所以如果您可以以某种方式隐藏它(正文),那么在重定向发生之前它不会可见。

但是,你做错了,anti-pattern,IMO。使用 Controller 做出决定, View 应该只用于展示。这是 MVC 框架中非常基本的规则。

关于php - Laravel - 从 View 中调用 Redirect::to(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18846035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com