Cakephp URL 蛞蝓问题

Posted

技术标签:

【中文标题】Cakephp URL 蛞蝓问题【英文标题】:Cakephp URL Slugs Question 【发布时间】:2011-10-18 06:33:36 【问题描述】:

我的网址是这样的

example.com/deals/by_city/glasgow

我在一个cities_controller 中有一个动作“by_city”,它需要获取url 的“glasgow”部分并做一些事情,我怎么能用cakephp 做到这一点?我只想知道如何抓取这部分url并将其存储在变量中。

感谢所有帮助:)

谢谢 戴夫

城市控制器

function city_changer($CitySlug = null) 
        $active = $this->City->find('first', array('conditions' => array('City.slug' => $CitySlug)));
        $cities = $this->City->find('all', array('order' => array('City.name', 'City.name ASC')));

        $this->set(compact('active', 'cities'));
    

City changer.ctp

<h2>Daily Deals from <?php echo $active['City']['name'];?></h2>
<form>
    <select name="file" size="1" onchange="loadPage(this.form.elements[0])" target="_parent._top" onmouseclick="this.focus()">

<?php foreach($cities as $city) ?>        
        <option value="/new_avc/deals/by_city/<?php echo $city['City']['slug'];?>"><?php echo $city['City']['name'];?></option>
<?php ?> 

    </select>
</form>

default.ctp

<div id="header_wrapper">
    <div id="navigation">
        <div id="logo">
            <h1>Amazing Voucher Codes</h1>
        </div>
        <div id="city_nav">
            <?php echo $this->requestAction('/cities/city_changer/'.$city['City']['slug'], array('return'));?>
        </div>

由于没有链接到 default.ctp 的数据库,因此无法将 slug 传递给控制器​​ :)

【问题讨论】:

您能否澄清一下问题:您在控制器deals 中是否有操作by_city,并且您想知道该操作如何使用该参数?或者您是否将该 URL 作为字符串并且您需要提取它的最后一部分?还是别的什么? SluggableBehavior 可以帮助您创建这些 URL 部分。只需将其附加到您的模型并将slug 字段添加到您的表中。 【参考方案1】:

假设没有自定义路由器规则干预,URL 中的第三个参数(在控制器/动作之后)是传递给动作的第一个参数。

class CitiesController extends AppController 
    function by_city( $cityName ) 
        // $cityName == 'glascow'
    

【讨论】:

唯一的问题是,城市转换器在不使用控制器或数据库的标题中,因此无法将 $cityname 传递给控制器​​:) 我不明白你的意思。您是说链接在布局文件中吗?点击链接后没有任何区别。 在我看来,问题是你在布局中使用了$city['City']['slug'],所以你的requestAction 不起作用,因为该变量并不总是设置。这与您的原始问题无关。请针对您的实际问题发布另一个问题。 我最初的问题是我将如何进行这项工作,如果这不能使其发挥作用,那么我该怎么做才能使其发挥作用。如果我删除它并只是将请求操作发送给城市变更者,它仍然不会接收它【参考方案2】:

您应该能够在deals 控制器的by_city 方法中添加一个$cityname 参数:这将自动接收城市名称(glasgow 来自上述网址)。

【讨论】:

唯一的问题是,城市转换器在不使用控制器或数据库的标题中:) 标题是一个和其他任何视图一样的视图:它呈现控制器方法中的数据集。将城市名称变量添加到控制器中的视图数据中,您应该没问题。您正在混淆对 URL 段的访问与呈现控制。 抱歉不知道你的意思:) 您的问题是如何从这样的网址中提取glasgowexample.com/deals/by_city/glasgow。您可以使用接收 URL 段的控制器方法参数来执行此操作。如果您需要访问头文件中的变量,那么您还应该在控制器中设置 city 变量(这将使其可用于 default.ctp 文件)但这与访问 URL 段中的控制器。 那么它会在应用控制器中提供吗? :S

以上是关于Cakephp URL 蛞蝓问题的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP - Router::url() 生成相对于当前页面的 url

CakePHP:防止在 URL 中获取表单字段

cakephp 在 Ubuntu 上无法进行 url 重写

Cakephp-Jquery 菜单栏更改 URL

更改加密 cakephp 脚本的 url slug

CakePHP 从 URL 中删除索引操作